众所周知,Apache Pig是一种数据流语言。如果我编写一个Pig脚本,并且Pig决定拆分并运行两个或更多的作业来执行手头的任务,那么Pig如何存储它从作业1传递到作业2的数据?? ? ! !
我读了Pig文档,上面写着:-
"Pig分配固定数量的内存来存储包,并在达到内存限制时立即溢出到磁盘。这与Hadoop决定何时溢出由组合器积累的数据非常相似。"
(url: http://pig.apache.org/docs/r0.9.1/perf.html #内存管理)
那么Pig是否有一个写入器,将中间作业的输出存储在内存/RAM中以获得更好的性能(如果需要的话溢出到磁盘),然后如果Pig实现了一个读取器,直接从内存中读取数据,将数据传递给下一个作业进行处理?
在Mapreduce中,我们将整个数据写入磁盘,然后再次读取它以启动下一个作业。
Pig在这里占上风,通过实现读写器和写入器,它们在RAM/内存中写入(如果需要的话溢出),并从RAM(如果需要的话和磁盘)中读取,以获得更好的性能。
请分享您对PIG文档中突出显示的评论的专业知识/观点,以了解其实际含义或另有说明。
提前感谢欢呼:)
如果pig脚本有多个作业,那么每个作业的输出将被写入HDFS的临时文件夹,该文件夹由pig.temp.dir定义(默认为/tmp)。参见Pig文档"存储中间结果"。此外,当运行脚本做hadoop fs -ls /tmp/pig*
时,有时当作业被中断时,这些文件夹不被清理,需要手动释放。
袋子的溢出是指在Mapper阶段发生的事情,并且MR作业之间没有RAM通信。