FreeBSD下安裝配置Hadoop叢集(效能調優)
hadoop的效能調優是個比較艱難的事情,由於這個系統的整個環境比較複雜,對於接觸時間不長的人來說,配置都很難,更別說找出效能優化的點了。
效能優化涉及的方面很廣,作業系統,網路配置,配置檔案,排程器等等,抓出幾點來說,但不敢說這幾點就是別人所遇到的效能瓶頸,拋磚引玉而已。應用場景不同,優化配置肯定是各不相同的。
對於作業系統和網路環境的調優,這個需要講的東西就太多了,無法在一篇文章裡贅述。集中於幾個關鍵詞:sysctl,ulimit,hosts檔案,內網配置。
儘量把hadoop叢集配置在內網地址上,這就不用多說了吧。
下面主要探討hadoop的配置檔案和排程器的選擇和開發。
以我公司的hadoop叢集舉例來說,主要是用了資料壓縮和索引和對排程器策略的優化。
使用壓縮是一個不錯的選擇,比如我們自己的叢集用的是LZO的壓縮方式,壓縮比大概是原始資料的1/3,也就是說,1G的原始日誌大概能壓縮成300Mb左右,一方面壓縮比不錯,另一方面,讀取速度也很不錯,配合的是Native的lzo庫。一個叫hadoop-gpl的東西。前一陣子泰國水災,硬碟難買,以壓縮的方式也可以多撐一陣子。
如果給lzo建立索引,效果就更好了
當然你需要先安裝hadoopgpl。
core-site.xml
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache
.hadoop.io.compress.BZip2Codec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache
.hadoop.io.compress.BZip2Codec</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
mapred-site.xml
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Djava.library.path=/opt/hadoopgpl/native/Linux-amd64-64</value>
</property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Djava.library.path=/opt/hadoopgpl/native/Linux-amd64-64</value>
</property>
當然每臺伺服器都需要定義這個才可以。
還有一個很重要的優化是槽位的設定和排程器的選擇,這個直接關係到hadoop的計算能力。相同硬體情況下,配置好的叢集的在計算相同任務的情況下,要比配置糟糕的叢集快幾倍乃至幾十倍。
對於map/reduce槽位的配置還有job對java虛擬機器的配置,我目前總結的規律大概是這樣,namenode的槽位總數相加和等於CPU數量,同時map槽位數大概是reduce槽位的3倍,也就是這樣,如果你有一個8核的伺服器,map數量就應該是6,reduce數量是2。對於datanode,我們需要他的計算能力強一些,就把map和reduce槽位總和設定成cpu數量的2倍,同時map數是reduce數量的3倍,同樣是8核的datanode,map數就是12,reduce數就是4。對於記憶體的使用,還是拿配置檔案舉例說明吧。
mapred-site on namenode:
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>6</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1536M</value>
</property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>6</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
<final>true</final>
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1536M</value>
</property>
mapred-site on datanode:
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>12</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>4</value>
<final>true</final>
</property>
<property>
<name>mapred.map.child.java.opts</name>
<value>-Xmx1224M</value>
</property>
<property>
<name>mapred.reduce.child.java.opts</name>
<value>-Xmx2048M</value>
</property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>12</value>
<final>true</final>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>4</value>
<final>true</final>
</property>
<property>
<name>mapred.map.child.java.opts</name>
<value>-Xmx1224M</value>
</property>
<property>
<name>mapred.reduce.child.java.opts</name>
<value>-Xmx2048M</value>
</property>
對於map槽位的記憶體佔用,我的理解是這樣,記憶體總數/CPU核數/4,上下可以浮動幾百兆。
對於reduce槽位是記憶體總數/cpu核數/2。
然後簡單說下排程器的問題,hadoop預設的排程器是FIFO,就是先入先出,通常來說,這就比較夠用了。但是如果叢集規模較小,計算任務又比較多,還需要細分不同任務的槽位分配,就還是配置其他的排程器比較好。
常用的有兩種第三方排程器,yahoo開發的Capacity Scheduler和Facebook貢獻的Fair Scheduler。翻譯過來叫計算能力排程器和公平排程器,可能大家聽公平排程器聽的比較多,不過目前我們公司主要是用計算能力排程器。
因為配置的XML太長,我就不貼了,需要了解計算能力排程器的配置方法,可以訪問我的同事老趙的技術部落格。
在我們的應用場景裡,計算能力被分為了3類,每個分類的map/reudce槽位數是不同的,根據統計平時的計算量來固定分配的槽位數。default,rush,和hive,其中普通的streaming的計算方式放入default的分類中執行,日誌清洗和入庫單獨使用rush分類,hive,顧名思義,就是給hive資料庫單獨使用的。這個分配的map/reduce是最多的。平時定時任務的70%左右都是用hive跑的,臨時資料查詢95%依賴hive。
這樣做的好處是計算任務的計算能力被隔離,互不干擾。可根據業務需求進行分類。避免任務搶佔造成的資源大量消耗。
相關文章
- FreeBSD下安裝配置Hadoop叢集(三)Hadoop
- hadoop叢集內lzo的安裝與配置Hadoop
- FastDFS 叢集 安裝 配置AST
- 超詳細hadoop叢集伺服器安裝配置教程Hadoop伺服器
- Redis安裝+叢集+效能監控Redis
- 安裝 Hadoop:設定單節點 Hadoop 叢集Hadoop
- hadoop叢集搭建配置檔案優化引數Hadoop優化
- 虛擬機器Hadoop叢集搭建5安裝Hadoop虛擬機Hadoop
- 在Ubuntu 18.04.1上安裝Hadoop叢集UbuntuHadoop
- 分散式Hadoop1.2.1叢集的安裝分散式Hadoop
- Ganglia監控Hadoop叢集的安裝部署Hadoop
- hadoop叢集多節點安裝詳解Hadoop
- Hadoop叢集安裝配置Hadoop
- CentOS上zookeeper叢集模式安裝配置CentOS模式
- 3 安裝配置oracle叢集和RACOracle
- 叢集寫效能優化優化
- 叢集讀效能優化優化
- Hadoop叢集--linux虛擬機器Hadoop安裝與配置、克隆虛擬機器HadoopLinux虛擬機
- Hadoop完全分散式叢集配置Hadoop分散式
- hadoop叢集配置和啟動Hadoop
- Hadoop安裝後的叢集基準測試Hadoop
- 使用FreeBSD的ports安裝hadoop薦Hadoop
- Zookeeper-3.4.10 叢集的安裝配置
- 安裝配置 zookeeper (單機非叢集模式)模式
- Ubuntu下 hadoop的安裝與配置UbuntuHadoop
- Hadoop 叢集安裝與配置Hadoop
- 完全分散式Hadoop叢集的安裝部署步驟分散式Hadoop
- Hadoop叢集是配置時間同步!Hadoop
- 【Hadoop】 分散式Hadoop叢集安裝配置Hadoop分散式
- Freebsd 下安裝squidUI
- FreeBSD安裝與配置概述(轉)
- 安裝 REDIS 叢集Redis
- 安裝Kafka叢集Kafka
- Hadoop叢集部署安裝Hadoop
- azkaban叢集模式安裝與execute-as-user配置模式
- 安裝配置PXC(Percona XtraDB Cluster)叢集
- Hadoop 2.6 叢集搭建從零開始之3 Hadoop的安裝與配置(偽分散式環境)Hadoop分散式
- Hadoop 2.6 叢集搭建從零開始之4 Hadoop的安裝與配置(完全分散式環境)Hadoop分散式