LOAD函数/命令从HDFS或本地FS加载数据。 例如: - 这猪命令可以执行在引擎盖下? PIG在哪里保存中间结果/关系数据?
gurnt >employees = LOAD 'hdfs://localhost:9090/pig_dir/data.txt' USING PigStorage(',') as (id:int, salary:int, ...etc)
关注 - 像
grunt >wellpaid_employees = FILTER employees BY salary > '100000';
于是我开始思考,哪里猪存储“雇员”数据/关系。当需要进一步处理时使用,即生成wellpaid_employees。
1)员工关系 - 如果只是将员工保存在临时目录(基于配置)中,有什么好处。它可以以任何方式每次从HDFS读取数据。该文件可以从1GB到1TB甚至更大。所以我会假设LOAD不会在其他地方复制数据。它懒散地工作。它使用HDFS中的原始文件来运行猪作业(这是屏幕后面的MR作业)。
2)wellpaid_employees关系 - 当猪过程员工关系产生wellpaid_employees关系。它在哪里保存这个结果。 因为,如果我必须做“wellpaid_employees”进一步处理想获得的所有高薪员工在一个特定的城市 - 例如
grunt >wellpaid_employees_in_newyork = FILTER wellpaid_employees BY city == 'NY';
在这种情况下,我看到PIG的存储benfit所有的中间和最终结果/关系一些地方。这是猪的工作原理吗?
那么如何(格式等)和地方(物理位置)不养猪存储中间结果/关系,以及如何配置这些方面?
但是,如果中间结果也太大 - 比如几GB,那么折衷工作(每次处理先前的阶段或存储结果之间)是如何工作的。它也可以配置。
猪将保存在内存中的关系,直到用完。然后它溢出到磁盘。但它不存储关系,没有什么是永久的。除非您主动存储它,否则您不能在另一个Pig作业中访问它。 – Andrew