不确定这是否是 MapReduce 的合适用例:我尝试实现的 OOZIE 工作流程的一部分是下载一系列以序号命名的文件(例如 1 到 20)。我希望同时下载这些文件(一次 5 个文件),所以我创建了一个 python 脚本来创建 5 个文本文件,如下所示:
1.txt: 1,2,3,4
2.txt: 5,6,7,8
3.txt: 9,10,11,12
4.txt: 13,14,15,16
5.txt: 17,18,19,20
然后对于工作流程的下一步,我创建了一个download.sh
shell 脚本,它使用逗号分隔的数字列表并下载请求的文件。在工作流程中,我在 Oozie 中设置了一个流式操作,并使用包含上面生成的文件的目录作为输入 ( mapred.input.dir
),并使用 download.sh 作为映射器命令,使用“cat”作为减速器命令。我假设 Hadoop 将为上面的每个输入文件生成一个不同的映射器。
有时这似乎可行,它会正确下载文件,但有时它只是在尝试执行时卡住了,我不知道为什么。我注意到当我增加同时下载的数量时会发生这种情况(例如,而不是每个 txt 文件的文件,我会做 20 个等等)。
所以我的问题是:这是使用 MapReduce 和 OOZIE 实现文件并行检索的正确方法吗?如果没有,这通常是如何使用 OOZIE 完成的?我试图在运行 Hive 脚本之前将我的 CSV 文件放入 HDFS,但我不确定实现这一目标的最佳方法是什么。