MapReduce小記和Hadoop Streaming

MapReduce中兩個重要的進程


– JobTracker
    • 主進程,負責接收客戶作業提交,調度任務到作節點上運行,並提供諸如監控工作節點狀態及任務進度等
      管理功能,一個MapReduce集羣有一個jobtracker,一般運行在可靠的硬件上。
    • tasktracker是通過週期性的心跳來通知jobtracker其當前的健康狀態,每一次心跳包含了可用的map和
      reduce任務數目、佔用的數目以及運行中的任務詳細信息。Jobtracker利用一個線程池來同時處理心跳和
      客戶請求。
– TaskTracker
    • 由jobtracker指派任務,實例化用戶程序,在本地執行任務並週期性地向jobtracker彙報狀態。在每一個工
      作節點上永遠只會有一個tasktracker

MapReduce工作原理


• JobTracker一直在等待JobClient提交作業
• TaskTracker每隔3秒向JobTracker發送心跳詢問有沒有任務可做,如果有,讓
   其派發任務給它執行
• Slave主動向master拉生意

 

Hadoop Streaming介紹


• MapReduce和HDFS採用Java實現,默認提供Java編程接口
• Streaming框架允許任何程序語言實現的程序在Hadoop MapReduce中
使用
• Streaming方便已有程序向Hadoop平臺
• hadoop streaming通過用戶編寫的map函數中標準輸入讀取數據(一行一行地讀取),按照map函數的處理邏輯處理後,將處理後的數據由標準輸出進行輸出到下一個階段,reduce函數也是按行讀取數據,按照函數的處理邏輯處理完數據後將它們通過標準輸出寫到hdfs的指定目錄中

示例: shell腳本內容
HADOOP_CMD="/home/app/hadoop-2.6.1/bin/hadoop"

STREAM_JAR_PATH="/home/app/hadoop-2.6.1/share/hadoop/tools/lib/hadoop-streaming-2.6.1.jar"

$HADOOP_CMD jar $STREAM_JAR_PATH \
    -input $OUTPUT_A_PATH,$OUTPUT_B_PATH \
    -output $OUTPUT_JOIN_PATH \
    -mapper "cat" \
    -reducer "python red_join.py" \
    -file ./red_join.py \
    -jobconf stream.num.map.output.key.fields=2 \
    -jobconf num.key.fields.for.partition=1

注意:
1:每行最後的\符號的作用是轉義,將換行符轉以爲普通字符,因爲我們不想在一行中輸完全部內容,用轉義字符轉義換行符在下行行中輸入未輸完的內容
2:輸入文件必須在hdfs上,輸出也是輸出到hdfs上
3:爲了避免發生函數腳本找不到的問題,最好使用-file參數,將腳本文件提交到集羣中
jobconf:
提交作業的一些配置屬性
常見配置:
(1)mapred.map.tasks:map task數目
(2)mapred.reduce.tasks:reduce task數目
(3)stream.num.map.output.key.fields:指定map task輸出記錄中key所佔的域數目
(4)num.key.fields.for.partition指定對key分出來的前幾部分做partition而不是整個key

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章