我是PIG和HDFS的新手。这是我想要做的。
我有很多平面文本LZO压缩格式错误的服务器日志文件 - 每天约400 GB从大约400个服务器生成。
我正在尝试利用map reduce来格式化并使用我的java格式化程序清理HDFS中的数据,然后在Hive中加载输出。
我的问题是我的PIG脚本只产生一个映射器,大约需要15分钟。按顺序读取文件。这对于我每天必须在配置单元中加载的数据量是不实际的。
这是我的猪脚本。
SET default_parallel 100;
SET output.compression.enabled true;
SET output.compression.codec com.hadoop.compression.lzo.LzopCodec
SET mapred.min.split.size 256000;
SET mapred.max.split.size 256000;
SET pig.noSplitCombination true;
SET mapred.max.jobs.per.node 1;
register file:/apps/pig/pacudf.jar
raw1 = LOAD '/data/serverx/20120710/serverx_20120710.lzo' USING PigStorage() as (field1);
pac = foreach raw1 generate pacudf.filegenerator(field1);
store pac into '/data/bazooka/';
看起来mapred.min.split.size设置不起作用。我只能看到启动了一个映射器,它可以在集群的单个服务器上的整个2 GB文件中运行。由于我们有一个100节点集群,我想知道如果我可以生成更多的映射器,是否可以并行使用更多服务器。
提前致谢
答案 0 :(得分:1)
PigStorage中的压缩支持不提供splitting ability。对于猪的可拆分lzo压缩支撑,你需要elephant-bird library from twitter。另外,要使用现有的常规lzo文件进行分割工作(正确吗?),您需要在加载猪脚本之前对它们进行索引。