本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用串流處理資料
Hadoop 串流是 Hadoop 隨附的公用程式,可讓您開發 MapReduce Java 以外語言的可執行檔。串流是以 JAR 檔案的形式實作,因此您可以從 Amazon EMRAPI或命令列執行,就像標準JAR檔案一樣。
本節說明如何搭配 Amazon 使用串流EMR。
注意
Apache Hadoop 串流是一個獨立的工具。因此,這裡並不會敘述其所有函數和參數。如需 Hadoop 串流的詳細資訊,請前往 http://hadoop.apache.org/docs/stable/hadoop-streaming/HadoopStreaming.html
使用 Hadoop 串流公用程式
本章節將描述了如何使用 Hadoop 的串流公用程式。
1 |
以您選擇的程式設計語言來寫入映射器和縮減器可執行檔。 遵照 Hadoop 文件中的指示來撰寫串流可執行檔。此程式應透過標準輸出從標準輸入和輸出資料讀取其輸入。根據預設,每列輸入/輸出代表一個記錄且每列的第一個標籤會用做為金鑰和值的分隔符號。 |
2 |
在本機上測試可執行檔並將它們上傳到 Amazon S3。 |
3 |
使用 Amazon EMR命令列界面或 Amazon EMR主控台來執行您的應用程式。 |
每個映射器指令碼會在叢集中以個別程序來啟動。每個縮減器可執行檔會將映射器可執行檔的輸出轉換為任務流程的資料輸出。
大多數串流應用程式都需要 input
、output
、mapper
和 reducer
參數。下表描述這些和其他可選參數。
參數 | 描述 | 必要 |
---|---|---|
-input |
Amazon S3 上的輸入資料位置。 類型:字串 預設:無 限制條件:URI。如果沒有指定通訊協定,則會使用叢集的預設檔案系統。 |
是 |
-輸出 |
Amazon S3 上 Amazon EMR上傳已處理資料的位置。 類型:字串 預設:無 限制條件: URI 預設:如果未指定位置,Amazon 會將資料EMR上傳到 指定的位置 |
是 |
-mapper |
映射器可執行檔的名稱。 類型:字串 預設:無 |
是 |
-reducer |
縮減器可執行檔的名稱。 類型:字串 預設:無 |
是 |
-cacheFile |
包含 Hadoop 檔案的 Amazon S3 位置會複製到本機工作目錄 (主要是為了改善效能)。 類型:字串 預設:無 限制條件:【URI】#【在工作目錄中建立的符號連結名稱】 |
否 |
-cacheArchive |
JAR 要擷取至工作目錄的檔案 類型:字串 預設:無 限制條件:【URI】#【symlink 目錄名稱,以在工作目錄中建立 |
否 |
-combiner |
結合結果 類型:字串 預設:無 限制條件:Java 類別名稱 |
否 |
以下程式碼範例是一種以 Python 編寫的映射器可執行檔。此指令碼是 WordCount 範例應用程式的一部分。
#!/usr/bin/python
import sys
def main(argv):
line = sys.stdin.readline()
try:
while line:
line = line.rstrip()
words = line.split()
for word in words:
print "LongValueSum:" + word + "\t" + "1"
line = sys.stdin.readline()
except "end of file":
return None
if __name__ == "__main__":
main(sys.argv)