简单的问题:
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 的了解还要少。我确实有编程/开发背景,但在这种情况下,我是系统管理员,而不是研究人员或程序员。