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