gpt4 book ai didi

hadoop - 在 Hadoop 集群上编辑数百万行文件

转载 作者:可可西里 更新时间:2023-11-01 14:18:47 25 4
gpt4 key购买 nike

我正在尝试编辑 Hadoop 集群上的一个大文件,并从文件中删除空格和特殊字符,如 ¦、*、@、"等。我不想复制到本地并使用 sed,因为我有 1000 个这样的文件要编辑。

最佳答案

MapReduce 非常适合这一点。幸好你在 HDFS 中拥有它!

你说你认为你可以用 sed 解决你的问题。如果是这样的话,那么Hadoop Streaming一次性使用会是一个不错的选择。

$ hadoop jar /path/to/hadoop/hadoop-streaming.jar \
-D mapred.reduce.tasks=0 \
-input MyLargeFiles \
-output outputdir \
-mapper "sed ..."

这将启动一个 MapReduce 作业,将您的 sed 命令应用于整个文件中的每一行。由于有 1000 个文件,您将有多个映射器任务同时访问这些文件。数据也将立即返回到集群中。

注意我这里reducer的个数设置为0。那是因为它不是真正需要的。如果您希望输出为一个文件,则使用一个 reducer,但不要指定 -reducer。我认为使用 identity reducer 并有效地只用一个 reducer 创建一个输出文件。仅映射器版本肯定更快。


另一个选项,我认为不是很好,但不需要 MapReduce,但仍然比 copyToLocal 更好,它是通过节点流式传输它并在不影响磁盘的情况下将其推回。这是一个例子:

$ hadoop fs -cat MyLargeFile.txt | sed '...' | hadoop fs -put - outputfile.txt

hadoop fs -put 中的 - 告诉它从标准输入而不是文件中获取数据。

关于hadoop - 在 Hadoop 集群上编辑数百万行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21917616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com