轉換一個JSON文件我的JSON文件,文件的每一行100GB看起來是這樣的:Hadoop中
{"field1":100, "field2":200, "field3":[{"in1":20, "in2":"abc"},{"in1":30, "in2":"xyz"}]}
(它實際上要複雜得多,但對於這個會作爲一個小的演示做的。)
我想把它處理的東西,其每一行看起來是這樣的:
{"field1":100, "field2":200, "abc":20, "xyz":30}
作爲非常新的Hadoop,我只是想知道如果我在正確的道路上:
指的是: http://www.glennklockwood.com/di/hadoop-streaming.php 對於傳統的應用我會在Python創造出一個映射,與減速機及使用類似執行:
hadoop \
jar /opt/hadoop/contrib/streaming/hadoop-streaming-1.0.3.jar \
-mapper "python $PWD/mapper.py" \
-reducer "python $PWD/reducer.py" \
-input "wordcount/mobydick.txt" \
-output "wordcount/output"
現在讓我知道如果我在正確的軌道上:
因爲我只需要大量的文件解析成另一種形式;我想我不需要任何減少步驟。我可以簡單地寫映射器,其中:
- 從stdin注意到輸入
- 逐行讀取
- std.in線將每個線根據我的規格
- 輸出到標準輸出
然後我可以用簡單的映射器和0個縮減器運行hadoop。
請問這種做法似乎正確嗎?我是否會正確使用羣集,或者這會和在單個主機上運行Python腳本一樣糟糕嗎?
太棒了!但是輸出將以什麼形式出現?如果我給它一個包含2000個文件的位置作爲輸入,那麼映射器通過stdout的輸出將自動保存爲2000個文件?我明天會嘗試一下,但我希望對這個過程中發生的事情有個體面的想法。 – user1265125 2014-08-27 18:36:23
輸出文件的數量取決於減速器的數量,因爲它會爲每個減速器創建一個文件。但是,如果將其設置爲0減速器,則它將取決於映射器的數量。如果你想要所有的東西都在同一個文件中,那麼把1 reducer,IdentityReducer,在這種情況下,它只接受mapper輸出並將其作爲reducer輸出。 – Balduz 2014-08-27 18:38:11