2012-12-21 78 views
0

我的EMR集羣中的路徑爲'hdfs:/// logs'的日誌文件很多。每個日誌條目都是多行,但有一個起始和結束標記來劃分兩個條目。 現在,在有或沒有使用Hive的情況下處理Amazon EMR中的日誌

  1. 未在日誌文件中的所有條目都是有用
  2. 其是有用的需要,待轉化的條目和輸出需要被存儲在一個輸出文件,讓我可以有效地查詢(使用配置單元)稍後輸出日誌。

我有一個python腳本,可以簡單地採取一個日誌文件,並做一部分。和b。如上所述,但我沒有編寫任何映射器或縮減器。

Hive負責Mappers和Reducers的查詢。請告訴我是否以及如何使用python腳本在所有日誌上運行並將輸出保存在'hdfs:/// outputlogs'中?

我是Map Reduce的新手,已經看到了Word count的一些例子,但它們都有一個輸入文件。我在哪裏可以找到具有多個輸入文件的示例?

回答

1

在這裏,我看到你有兩方面的問題:

1

長期正確的方式來做到這一點,因爲阿馬爾說,寫一個MapReduce工作去做。

但是,如果這是一個一次性的東西,數據是不是太龐大,它可能是最簡單的/最簡單的用一個簡單的bash腳本來做到這一點,因爲你已經擁有的python腳本:

hadoop fs -text /logs/* > input.log 
python myscript.py input.log output.log 
hadoop fs -copyFromLocal output.log /outputlogs 
rm -f input.log output.log 

如果這是一個重複的過程 - 你想要可靠和高效的東西,或者如果你只是想學習更好地使用MapReduce,那麼堅持Amar的答案。

1

如果您已經編寫了邏輯,並且您想要使用EMR和/或vanilla Hadoop進行並行處理 - 您可以使用Hadoop流式傳輸:http://hadoop.apache.org/docs/r0.15.2/streaming.html。簡而言之 - 腳本將數據轉換爲標準輸入並將輸出轉換爲標準輸出可以成爲映射器。
因此,您將使用羣集在HDFS中運行數據處理,而無需重新打包代碼。

相關問題