hadoop - 在 Apache Pig 中并行下载文件列表

标签 hadoop mapreduce apache-pig

我有一个简单的文本文件,其中包含某些 FTP 服务器上的文件夹列表。每行都是一个单独的文件夹。每个文件夹包含几千张图片。我想连接到每个文件夹,将该文件夹内的所有文件存储在 SequenceFile 中,然后从 FTP 服务器中删除该文件夹。我为此编写了一个简单的 pig UDF。在这里:

dirs = LOAD '/var/location.txt' USING PigStorage();
results = FOREACH dirs GENERATE download_whole_folder_into_single_sequence_file($0);
/* I don't need results bag. It is just a dummy bag */

问题是我不确定是否每一行输入都在单独的映射器中处理。输入文件不是一个只有几百行的大文件。如果它是纯 Map/Reduce,那么我会使用 NLineInputFormat 并在单独的 Mapper 中处理每一行。我怎样才能在 pig 身上达到同样的效果?

最佳答案

Pig 让你自己写 load functions ,它让您指定要使用的 InputFormat。所以你可以自己写。

也就是说,您所描述的工作听起来只涉及一个 map-reduce 步骤。由于在这种情况下使用 Pig 不会降低复杂性,而且您必须编写自定义代码才能使用 Pig,所以我建议只在 vanilla map-reduce 中进行。如果总文件大小为 GB 或更小,我会直接在一台主机上完成所有操作。如果没有必要,不使用 map reduce 会更简单。

我通常使用 map-reduce 首先将数据加载到 HDFS,然后使用 Pig 进行所有数据处理。 Pig 并没有真正为加载数据 IMO 添加任何优于 vanilla hadoop 的好处,它只是 InputFormat/RecordReader 的包装器,带有您需要实现的其他方法。另外,从技术上讲,使用 Pig 可以多次调用您的加载程序。这是一个陷阱,您无需担心直接使用 Hadoop map-reduce。

关于hadoop - 在 Apache Pig 中并行下载文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31177924/

相关文章:

hadoop - apache thrift 传输 TTransportException

unix - 使用 Unix 遍历目录及其子目录中的所有文件

hadoop - 如何部署和运行 oozie 作业?

hadoop - hive 客户端无法正常工作

performance - 使用拼花格式时如何控制映射器的数量

hadoop - 无法使用单节点 hadoop 服务器运行 pig

hadoop - mapreduce文件传输实现

python - 在 hdfs 中运行顺序代码

hadoop - 为什么 HDFS 中的 block 这么大?

apache-pig - Apache Pig:组操作后删除 namespace 前缀(::)