LOAD功能/命令从HDFS或本地FS加载数据。 例如: -
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的好处存储了所有中间和最终结果/相关性。这是猪的工作原理。
那么如何(格式等)和哪里(物理位置)猪存储中间结果/关系以及如何配置这些方面?
但是如果中间结果也太大 - 比如几GB,那么如何进行权衡(每次处理前几个阶段或存储结果之间)。它也可以配置。
答案 0 :(得分:1)
所有转换都是懒惰的,因为它们不会立即计算结果。除了在DUMP和STORE中,在所有其他命令中它只评估错误的语法。
一旦使用动作(sotre / Dump),状态就会在内存和执行中依次存在。
答案 1 :(得分:1)
Pig在其配置文件中具有一个可配置的属性,可让您配置中间MR作业的结果的“ HDFS位置”,例如/ user / cloudera / loc1(通常由管理员完成)。因此,当MR编译器随MR作业链一起出现时,例如MR1-> MR2-> MR3--MR4,其中MR4是最后一步,然后编译器告诉MR:MR1,MR2和MR3使用此上述配置位置。 MR4当然会使用您在STORE语句中指定的位置。
更多内容:https://pig.apache.org/docs/latest/start.html#data-store