我有一个简单的文本文件,其中包含一些ftp服务器上的文件夹列表。每行都是一个单独的文件夹。每个文件夹包含几千个图像。我想连接到每个文件夹,将文件夹中的所有文件存储在一个文件夹中 SequenceFile
然后从ftp服务器中删除该文件夹。我已经为此写了一个简单的Pig自定义项。在这里:
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器中处理。输入文件不是一个大文件,只有几百行。如果它是纯的 Map/Reduce
那我就用 NLineInputFormat
并以单独的方式处理每一行 Mapper
. 我怎样才能在Pig身上达到同样的效果?
1条答案
按热度按时间tkclm6bt1#
pig允许您编写自己的加载函数,它允许您指定要使用的输入格式。所以你可以自己写。
也就是说,你所描述的工作听起来好像只涉及一个map reduce步骤。因为在这种情况下使用pig并不能降低复杂性,而且您必须编写自定义代码才能使用pig,所以我建议您使用vanilla map reduce。如果总文件大小小于等于千兆字节,我就直接在一台主机上完成。如果不需要,不使用map reduce更简单。
我通常使用map reduce首先将数据加载到hdfs中,然后使用pig进行所有数据处理。pig与vanilla hadoop相比并没有为imo加载数据带来任何好处,它只是inputformat/recordreader的一个 Package 器,包含需要实现的其他方法。加上它的技术上可能与Pig,你的装载机将被调用多次。你不必担心直接使用hadoop map reduce。