gpt4 book ai didi

hadoop - 在 HDFS 中递归合并多个文件

转载 作者:可可西里 更新时间:2023-11-01 15:57:16 25 4
gpt4 key购买 nike

我在 HDFS 中的文件夹路径结构是这样的:

/data/topicname/year=2017/month=02/day=28/hour=00
/data/topicname/year=2017/month=02/day=28/hour=01
/data/topicname/year=2017/month=02/day=28/hour=02
/data/topicname/year=2017/month=02/day=28/hour=03

在这些路径中,我有许多小的 json 文件。我正在编写一个 shell 脚本,它可以根据路径将所有这些单独目录中存在的所有文件合并为一个单独的文件名。

例子:

/data/topicname/year=2017/month=02/day=28/hour=00 中的所有 JSON 合并为一个文件 full_2017_02_28_00.json

/data/topicname/year=2017/month=02/day=28/hour=01 中的所有 JSON 合并成一个文件 full_2017_02_28_01.json

/data/topicname/year=2017/month=02/day=28/hour=02 中的所有 JSON 合并成一个文件 full_2017_02_28_02.json 等等。

将文件名保留在上述模式中是我将尝试实现的次要工作。目前我可以对文件名进行硬编码。

但是,目录路径结构中的递归连接并没有发生。

到目前为止,我已经尝试了以下:

hadoop fs -cat /data/topicname/year=2017/* | hadoop fs -put - /merged/test1.json

错误:-

cat: `/data/topicname/year=2017/month=02/day=28/hour=00': Is a directory
cat: `/data/topicname/year=2017/month=02/day=28/hour=01': Is a directory
cat: `/data/topicname/year=2017/month=02/day=28/hour=02': Is a directory

递归猫在上面的尝试中没有发生

hadoop fs -ls /data/topicname/year=2017/month=02 | find /data/topicname/year=2017/month=02/day=28 -name '*.json' -exec cat {} \; > output.json

错误:-

find: ‘/data/topicname/year=2017/month=02/day=28’: No such file or directory

在上面的尝试中,它在本地 FS 而不是 HDFS 中进行查找

for i in `hadoop fs -ls -R /data/topicname/year=2017/ | cut -d' ' -f19` ;do `hadoop fs -cat $i/* |hadoop fs -put - /merged/output.json`; done

错误:-

cannot write output to stream message is repeated multiple times
file /merged/output.json is repeated a few times

这是如何实现的?我不想使用 Spark。

最佳答案

使用-appendToFile :

for file in `hdfs dfs -ls -R /src_folder | awk '$2!="-" {print $8}'`; do hdfs dfs -cat $file | hdfs dfs -appendToFile - /target_folder/filename;done

所用时间将取决于文件的数量和大小,因为该过程是连续的。

关于hadoop - 在 HDFS 中递归合并多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42525413/

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