hadoop - pig CPU 密集型任务 - 小数据文件 - 许多映射器?

标签 hadoop apache-pig

我正在寻找有关如何通过我的 Pig 作业提高性能的任何提示。

输入是单个文件 (MB),但对于文件中的每一行,都会执行一个 CPU 密集型任务。

因此,理想的做法是将此文件拆分到我的 Amazon EMR 集群中的许多映射器(和机器)。

但是我找不到一种方法来做到这一点,因为 Hadoop 自然只会以 64(或者是 128?)MB 间隔进行拆分,所以我只有 1 个映射器!

我看过 NLineInputFormat ( http://www.olenick.com/blog/hadoop-for-small-data/ ),但这是针对旧 API 的,也不确定它如何与 Pig 一起使用。

为了让事情更复杂,我正在使用 CSVExcelStorage piggybank loadfunc 进行加载。

谢谢

邓肯

最佳答案

已解决。

这需要设置更多参数。我并不是说您需要设置所有这些,但我没有时间进行反复试验以了解最低要求设置是什么。很高兴得到纠正!

将以下内容放在 pig 脚本的顶部:

SET mapred.max.split.size 131072; -- 128KB
SET mapred.min.split.size 131072;
SET default_parallel 2;
SET pig.noSplitCombination true; 
SET mapred.max.jobs.per.node 1;

我将我的设置为 128KB block ,因为我的输入真的那么小!

此外,设置dfs block 大小。在 Amazon EMR 中,通过设置以下 Boostrap 操作来执行此操作:

--hdfs-key-value dfs.block.size=131072

我们可以通过查看输出看到这已经起作用了:

工作统计(以秒为单位的时间): JobId Maps 减少 MaxMapTime MinMapTIme AvgMapTime MedianMapTime MaxReduceTime MinReduceTime AvgReduceTime MedianReducetime 别名特征输出 job_201309111450_0001 14 0 15 9 11 12 0 0 0 0 A,cleaned,nostop MAP_ONLY s3n://mybucket/out42,

所以我们可以看到使用了 14 个映射器。此外,还生成了 14 个部分(在我的例子中),总运行时间与单个记录的时间相同(在我的例子中是 4 分钟)。

关于hadoop - pig CPU 密集型任务 - 小数据文件 - 许多映射器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723540/

相关文章:

java - Hadoop 追加到 Sequencefile

java - Hadoop WordCount代码,显示以下错误

java - 默认情况下禁用Azkaban作业的参数

hadoop - 运行Apache Pig教程问题

json - 解析Hadoop中包含的复杂Json字符串

ant - 使用Ant在子目录中运行PigUnit

hadoop - 使用单台机器时发生Spark RDD联合OOM错误

hadoop - 将 HDFS 从本地磁盘替换为 s3 出现错误 (org.apache.hadoop.service.AbstractService)

hadoop - 如何使用PIG/HIVE/HBASE从文件动态加载没有文本限定符的数据?

hadoop - 如何在PIG中读取以分号分隔的csv文件