2016-11-15 45 views
3

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,那麼折衷工作(每次處理先前的階段或存儲結果之間)是如何工作的。它也可以配置。

+1

豬將保存在內存中的關係,直到用完。然後它溢出到磁盤。但它不存儲關係,沒有什麼是永久的。除非您主動存儲它,否則您不能在另一個Pig作業中訪問它。 – Andrew

回答

2

所有的轉化都懶,因爲它們不計算其結果的時候了。除了在DUMP和STORE中,以及在所有其他命令中,它只評估錯誤的語法。

而且statments是在存儲器和execite爲了一次動作(sotre /轉儲)被使用。

+0

如果關係(wellpaid_employees)被存儲在HDFS然後另一關係(wellpaid_employees_in_newyork)是基於先前的關係進行處理。然後,豬會智能地拾取存儲的文件進行進一步處理,或整個鏈再次處理(員工 - > wellpaid_employees - > wellpaid_employees_in_newyork)。 (我看到有很多的MapReduce涉及發動機罩下的。因此,沒有豬產生它使用保存的文件或剛剛生成可以放火的每一件事情一個MR工作MR工作) – samshers

+0

我的理解,將所有的方式回到第一個關係,你可以試一試,如果你做LOAD - > Filter - > FOREACH,並且首先LOAD有一個錯誤的目錄路徑,它不會抱怨,直到你運行dump或store, –