二、Hadoop
1、入門
1)常用端口號
Hadoop3.x
???? HDFS ???? 歷史服務器 ???? MapReduce????? ? ? 客戶端
???? 9870???? ? ? ? 19888? ? ? ? ? ???? 8088???? ? ?? ? ? ? 9000/8020
Hadoop2.x
???? HDFS ????
???? 50070
2)安裝配置文件
Hadoop3.x
???? core-site.xml ???? hdfs-site.xml ????mapred-site.xml ???????workers
Hadoop2.x
???? core-site.xml ???? yarn-site.xml ????mapred-site.xml ???????slaves
2、HDFS
1)讀寫流程
2)小文件問題
- 危害
(1)占namenode元數(shù)據(jù)內(nèi)存
??????????(不管文件多小,都要占用150字節(jié))
??????????128g內(nèi)存的namenode能存儲多少個文件塊
??????????128g * 1024M * 1024 KB * 1024 字節(jié) /150 字節(jié) = 約等于9億
(2)增加切片,進而影響增加MapTask個數(shù)(默認1g),增加計算內(nèi)存
- 優(yōu)化手段
(1)har歸檔
(2)CombineTextInputformat ????改變切片
(3)jvm重用
3)HDFS有幾個副本
3個
4)HDFS塊大小
????2.x 3.x 默認塊 128M
????本地模式 32M
????1.x 塊多大 64M
????hive的塊大小:256M
????在大廠企業(yè)塊大?。?56M
????塊大小,取決于服務器之間的傳輸速度
3、MapReduce
shuffle及其優(yōu)化: map方法之后,reduce方法之前,混洗的過程
- Shuffleg過程及三次排序
Map方法出來,會進入getPartition()方法進行分區(qū),然后會進入環(huán)形緩沖區(qū)(默認100M)一側(cè)存數(shù)據(jù),一側(cè)存索引,到了80%后會溢寫
第一次排序在環(huán)形緩沖區(qū),對溢寫文件按key的索引進行快速排序,按照字典順序排序。
第二次排序在環(huán)形緩存區(qū)溢寫進磁盤后,對所有在磁盤的文件按分區(qū)內(nèi)部進行歸并排序,按照分區(qū)寫入進磁盤,然后將磁盤的文件合并成一個最終文件。
第三次Reduce Task拉取數(shù)據(jù)存儲到內(nèi)存,如果存不下,則放進磁盤,然后將內(nèi)存和磁盤的數(shù)據(jù)進行歸并排序,則還可以進行(第四次排序)分組。最后進入reduce方法
優(yōu)化方案
自定義分區(qū)
調(diào)整環(huán)形緩沖區(qū)大小100M->200M
增大環(huán)形緩沖區(qū)溢寫比列80%->90%或95% (從減少溢寫文件個數(shù)角度)
溢寫文件提前進行Combiner 只要不影響最終業(yè)務邏輯
在磁盤對溢寫文件進行歸并時默認歸并10個,可改成20個
Map端輸出為了減少磁盤IO采用壓縮(快,Snappy,LZO)
Reduce端輸出看需求:下一個MapReduce輸入,數(shù)據(jù)量大小,切片
Reduce端默認一次拉取5個,可以多拉一些10-20,增大reduce內(nèi)存
默認內(nèi)存及內(nèi)存優(yōu)化大小

4、Yarn
1)FIFO、容量調(diào)度器、公平調(diào)度器
2)默認哪個調(diào)度器:
????????Apache 默認容量
????????CDH 默認公平
3)FIFO調(diào)度器:
????????支持單隊列、先進先出、同一時間只有一個任務執(zhí)行。
????????并發(fā)度非常低、在企業(yè)里面不會使用。
4)容量調(diào)度器:
????????支持多隊列,由多個FIFO調(diào)度器組成,優(yōu)先滿足,先進入的任務,并發(fā)度一般
5)公平調(diào)度器:
????????支持多隊列,每個任務都公平享有資源,并發(fā)度最高
6)在企業(yè)里面怎么選擇
????????如果電腦服務器性能比較好,對并發(fā)度要求比較搞,選擇公平調(diào)度器(上市公司、大廠)
????????如果電腦服務器性能比較差,對并發(fā)度要求不是特別搞,選擇容量調(diào)度器(中小型公司)
7)在企業(yè)開發(fā)時,如何創(chuàng)建隊列
????????容量調(diào)度器默認就一個default隊列;
????????按照執(zhí)行任務的框架創(chuàng)建:hive、spark、flink
????????按照業(yè)務模塊創(chuàng)建(較多):登錄注冊模塊、訂單、物流
618降級使用 登錄注冊模塊、訂單、物流(x) 優(yōu)先保障前兩個任務
8)YARN工作機制
5、Hadoop解決數(shù)據(jù)傾斜方法
1)提前在map進行combine,減少傳輸?shù)臄?shù)據(jù)量
2)導致數(shù)據(jù)傾斜的key大量分布在不同的mapper
(1)局部聚合加全局聚合
(2)增加Reducer,提升并行度
(3)實現(xiàn)自定義分區(qū)