众所周知,Apache Pig是一种数据流语言。如果我写了一个Pig Script并且Pig决定拆分并运行两个或多个作业来执行手头的任务,那么Pig如何存储它从job1传递给作业2的数据。???
我读了猪文档,上面写着: -
“ Pig会在达到内存限制时分配一定数量的内存来存储行李并溢出到磁盘。这与Hadoop决定何时溢出合并器累积的数据非常类似。“
(网址:http://pig.apache.org/docs/r0.9.1/perf.html#memory-management)
因此,Pig有一个编写器,它将中间作业的输出存储在内存/ RAM中以获得更好的性能(如果需要,可以溢出到磁盘)然后如果PIG实现了一个Reader,它直接从内存读取数据以传递该数据到下一个处理工作???
在Mapreduce中,我们将整个数据写入磁盘,然后再次读取它以便开始下一个作业。
Pig在这方面有优势,通过实现在RAM /内存中写入的读取器和写入器(如果需要可以溢出)并从RAM(如果需要,还有磁盘)读取以获得更好的性能。
请分享您对PIG文档中突出显示的评论的专业知识/观点,了解其实际含义或其他情况。
先谢谢, 干杯:))
答案 0 :(得分:1)
如果pig脚本有多个作业,则每个作业的输出都写入HDFS中的临时文件夹,该文件夹由pig.temp.dir定义(默认为/ tmp)。请参阅Pig Docs"存储中间结果"。同时在运行脚本时执行row = service.insert(listFeedUrl, row);
,有时当作业中断时,这些文件夹不会被清理,需要手动释放。
行李的溢出是指Mapper阶段发生的事情,MR作业之间没有RAM通信。