1

简单的问题:

Pig LOAD 语句的内存限制是多少?

更详细的问题:

有没有办法将可用的物理资源(磁盘、RAM、CPU)与 Pig LOAD 语句可以处理的目录的最大大小相关联?

设想:

一个研究项目正在使用 Pig 脚本,该脚本试图在单个 Pig LOAD 语句中加载包含 12,000 多个文件的目录,总大小为 891GB,复制如下。这些文件是 gzipped WAT 文件,它以原始文本描述网页的集合。运行时,该作业似乎每次都会崩溃/挂起/冻结我们的集群。由于我们都是 Hadoop 新手,因此一直怀疑资源和配置,直到我终于能够查看代码。

-- load data from I_WATS_DIR 
Orig = LOAD '$I_WATS_DIR' USING org.archive.hadoop.ArchiveJSONViewLoader('Envelope.ARC-Header-    Metadata.Target-URI','var2...','var3...','var4...{1,2,3,4} as
(src:chararray,timestamp:chararray,html_base:chararray,relative:chararray,path:chararray,text:chararray,alt:chararray); 

细节:

1 个前端节点,16 核,64GB RAM,128GB 交换,NameNode

3 个计算节点,16 个内核,128GB RAM,128GB 交换,DataNode

测试作业 1

上面引用的相同脚本,加载一个包含 1 个文件的目录

常驻内存报告为 1.2GB

输入:138MB

输出:207MB

减少输入记录:1,630,477

时长:4m 11s

测试作业 2

相同的脚本,17 个文件

常驻内存:16.4GB

输入:3.5GB

输出:1.3GB

减少输入记录:10,648,807

时长:6m 48s

测试工作 3

相同的脚本,51 个文件

常驻内存:41.4GB

输入:10.9GB

输出:未记录

减少输入记录:31,968,331

时长:6m 18s

最后的想法:

这是一个 4 节点集群,上面没有运行其他任何东西,完全专用于 Cloudera Hadoop CDH4,只运行这 1 个作业。希望这是人们回答我最初的问题所需的所有信息!我强烈怀疑某种一次加载 1 个文件的文件解析循环是解决方案,但我对 Pig 的了解甚至比对 Hadoop 的了解还要少。我确实有编程/开发背景,但在这种情况下,我是系统管理员,而不是研究人员或程序员。

4

1 回答 1

0

根据您对集群的描述以及您通过它推送的数据量,听起来您在作业的映射/洗牌阶段空间不足。临时数据通过网络发送,解压缩,然后写入 reducer 上的磁盘,然后在 reduce 阶段进行处理。您可以尝试的一件事是通过设置mapred.map.compress.outputtrue(并指定所需的编解码器)来压缩映射器的输出。

但是只有四个节点,我怀疑你只是想一次做太多事情。如果可以,请尝试将您的工作分成多个步骤。例如,如果您正在执行标准字数统计示例,请对数据的一小部分进行字数统计,然后运行第二个 MR 程序对这些计数求和。

于 2013-10-21T22:05:52.123 回答