input:讀取程式輸入
預設:讀hdfs上檔案,将檔案拆分為分片split
500m -->4個block --> 4個split --> 将每個split中的每一行轉換為一個keyvalue
key:行的偏移量
value:行的内容
map:将任務進行拆分嗎,啟動多個map task 來處理每個分片
預設:一個分片對應一個map task(線程)
每個maptask中的每一條去調用一次map方法
map方法:
1:對資料進行處理:
-->對資料進行過濾,合法性判斷
-->對資料進行格式化
dd/MM/yyyy:HH:mm:ss ->yyyy-MM-dd HH:mm:ss
-->資料字段補全
2:封裝新的key value進行輸出
shuffle:将map輸出結果按照key進行分組,相同的key的value進行合并
-->對資料進行操作:
分區,排序,分組
key,{value1,value2,value3,......}
reduce:将任務的結果進行合并,啟動reduce task 對shuffle輸出的每條資料進行處理,每一種keyvalue調用一次
reduce方法
reduce方法:
1:對每種key的資料進行處理
eg:求和統計類的操作
2:封裝結果的keyvakle
output:将整個程式的結果進行輸出,預設輸出到hdfs變為檔案
input輸出:
<0,hbase hive hadoop>
<20,spark hadoop>
<40,hadoop hive>
<60,spark hbase>
<80,spark hadoop>
map輸出:
hbase 1
hive 1
hadoop 1
spark 1
hadoop 1
hadoop 1
hive 1
spark 1
hbase 1
spark 1
hadoop 1
shullef輸出:
hbase {1,1}
hive {1,1}
hadoop {1,1,1,1}
spark {1,1,1}
reduce輸出:
hbase 2
hive 2
hadoop 4
spark 3
output輸出:
hbase 2
hive 2
hadoop 4
spark 3