Hadoop筆記——技術點彙總

目錄

· 概況前端

    · Hadoopjava

    · 雲計算node

    · 大數據linux

    · 數據挖掘web

· 手工搭建集羣算法

    · 引言數據庫

    · 配置機器名apache

    · 調整時間編程

    · 建立用戶windows

    · 安裝JDK

    · 配置文件

    · 啓動與測試

· Cloudera Manager

· 原理

    · Hadoop架構

· 性能調優

    · 硬件選型

    · 操做系統調優

    · JVM調優

    · Hadoop參數調優


 

概況

Hadoop

1. ASF(Apache軟件基金會)給出定義:Hadoop軟件庫是一個框架,容許在集羣中使用簡單的編程模型對大規模數據集進行分佈式計算。

2. Hadoop生態圈

    a) Hadoop Common:Hadoop體系最底層的模塊(基礎模塊),爲Hadoop各子項目提供系統配置工具Configuration、遠程過程調用RPC、序列化機制和日誌操做等。

    b) HDFS:Hadoop Distributed File System是具備高度容錯性的文件系統,適合部署在廉價機器上。HDFS提供高吞吐量的數據訪問,很是適合大規模數據集上的應用。

    c) YARN:Yet Another Resource Negotiator是統一資源管理和調度平臺,解決了上一代Hadoop資源利用率低和不兼容異構計算框架等多種問題,提供資源隔離方案和雙調度器的實現。

    d) MapReduce:一種編程模型,利用函數式編程思想,將數據集處理過程分爲Map和Reduce兩個階段,很是適合進行分佈式計算。支持Java、C++、Python、PHP等多種語言。

    e) Spark:加州伯克利大學AMP實驗室開發的新一代計算框架,對迭代計算頗有優點,比MapReduce性能提高明顯。

    f) HBase:來源於Google Bigtable論文,是一個分佈式、面向列族的開源數據庫。擅長大規模數據的隨機、實時讀寫訪問。

    g) ZooKeeper:基於Fast Paxos算法,解決了分佈式系統中的一致性問題,提供配置維護、命名服務、分佈式同步、組服務等。

    h) Hive:由Facebook開發,基於Hadoop的數據倉庫工具,將結構化數據文件映射成一張表,提供SQL查詢功能,並將SQL轉換爲MapReduce運行。學習成本低,大大下降了Hadoop的使用門檻。

    i) Pig:與Hive相似,不提供SQL接口,而提供高層的、面向領域的抽象語言Pig Latin,並將Pig Latin轉爲MapReduce運行。與SQL相比,Pig Latin更靈活,但學習成本稍高。

    j) Impala:由Cloudera開發,對存儲在HDFS、HBase的海量數據提供交互式查詢SQL接口。Impala未基於MapReduce,定位是OLAP,是Google新三架馬車之一Dremel的開源實現,所以性能大幅領先於Hive。

    k) Mahout:機器學習和數據挖掘庫,利用MapReduce編程模型實現了k-means、Native Bayes、Collaborative Filtering等經典機器學習算法,並具備良好的擴展性。

    l) Flume:由Cloudera提供的高可用、高可靠、分佈式的海量日誌採集、聚合和傳輸系統,支持在日誌系統中定製各種數據發送方,用於收集數據;提供數據簡單處理,並寫到各類數據接受方(可定製)。

    m) Sqoop:SQL to Hadoop的縮寫,做用於在結構化的數據存儲(關係數據庫)與HDFS、Hive之間進行數據雙向交換。導入、導出都由MapReduce計算框架實現並行化,很是高效。

    n) Kafka:高吞吐量、高可用、分佈式發佈訂閱消息系統,在大數據系統被普遍使用。若是把大數據平臺比做一臺計算機,那麼Kafka消息中間件相似於前端總線,它鏈接平臺各組件。

3. Hadoop三大廠商及其發行版

    a) Cloudera:CDH,生產環境裝機量最大版本。

    b) Houtonworks:HDP。

    c) MapR:MapR

雲計算

1. NIST(美國國家標準技術研究院)給出定義:雲計算是一種能夠經過網絡方便地接入共享資源池,按需獲取計算資源(包括網絡、服務器、存儲、應用、服務等)的服務模型。共享資源池中的資源能夠經過較少的管理代價和簡單業務交互過程而快速部署和發佈。

2. 雲計算特色:

    a) 按需提供服務:以服務的形式爲用戶提供應用程序、數據存儲、基礎設施等資源,並可根據用戶需求自動分配資源,而不須要系統管理員干預。

    b) 寬帶網絡訪問:用戶能夠利用各類終端設備(如PC機、筆記本電腦、智能手機等)隨時隨地經過互聯網訪問雲計算資源。

    c) 資源池化:資源以共享資源池的方式統一管理。利用虛擬化技術,將資源分享給不一樣用戶,資源的放置、管理與分配策略對用戶透明。

    d) 高可伸縮性:服務的規模可快速伸縮,以自動適應業務負載的動態變化。用戶使用的資源同業務的需求相一致,避免由於服務器性能過載或冗餘而致使的服務質量降低或資源浪費。

    e) 可量化的服務:雲計算中心均可以經過監控軟件監控用戶的使用狀況,並根據資源的使用狀況對外服務計費。

    f) 大規模:承載雲計算的集羣通常都具備超大規模。

    g) 服務極其廉價:「雲」的特殊容錯機制使得能夠採用廉價節點構建;「雲」的自動化管理使數據中心管理成本大幅下降;「雲」的公用性和通用性使資源利用率大幅提高;「雲」設施可建在電力豐富的地區,從而大幅下降能用成本。

3. 雲計算服務類型

    a) Iaas:Infrastructure as a Service,雲計算架構最底層,利用虛擬化技術將硬件設備等基礎資源封裝成服務供用戶使用,用戶至關於在使用裸機。典型虛擬化產品VMware vShpere、微軟Hyper-V、開源KVM、開源Xen、Amazon EC2/S3利用的是Xen技術;Docker。

    b) PaaS:Platform as a Service,對資源更進一步抽象,提供用戶應用程序的應用環境。例如Google App Engine。

    c) SaaS:Software as a Service,將某些特定應用軟件功能封裝成服務。例如Salesforce CRM服務。

4. Hadoop與雲計算:Hadoop擁有云計算PaaS層的全部特色。

    a) HDFS抽象了全部硬件資源,使其對用戶透明,並提供數據冗餘、自動災備、動態增長減小節點功能。

    b) Hadoop提供Java、C++、Python等運行環境,參照MapReduce編程模型便可實現應用開發,用戶無需考慮各節點之間配合。

大數據

1. 麥肯錫給出定義:大數據指所涉及的數據集規模已經超過了傳統數據庫軟件獲取、存儲、管理和分析的能力。

2. IBM給出特色(3V)

    a) 數據量(Volume):從TB級別轉向PB級別,並不可避免轉向ZB級別。隨着可供企業使用的數據量不斷增加,可處理、理解和分析的數據比例卻不斷降低。

    b) 多樣性(Variety):結構化、半結構化和非結構化數據。

    c) 速度(Velocity):數據增加速率。

3. 大數據結構類型

 

    a) 結構化數據:包括預約義的數據類型、格式和結構的數據,例如關係數據庫表數據。

    b) 半結構化數據:具備可識別的模式並能夠解析的文本數據文件,例如XML數據。

    c) 非結構化數據:沒有固定結構的數據,一般保存爲不一樣的類型文件,例如文本文檔、PDF、圖像、視頻。

4. 大數據變革:大數據變革和人類經歷過的若干次變革最大不一樣在於發生得悄無聲息,但確確實實改變了咱們的生活;各行各業的先知先覺者已經從與數據共舞中嚐到甜頭,而愈來愈多的後來者和新進者都但願藉助雲計算和大數據這波浪潮去撬動原有市場格局或開闢新的商業領域。

數據挖掘

1. 簡短定義:數據→知識。

2. 知識發現的過程由如下步驟迭代組成:

    a) 數據清理:消除噪聲。

    b) 數據集成:多種數據源能夠組合在一塊兒。

    c) 數據選擇:從數據庫中提取與分析任務相關的數據。

    d) 數據變換:經過彙總或彙集操做,把數據變換和統一成適合挖掘的形式。

    e) 數據挖掘:基本步驟,使用智能方法提取數據模式。

    f) 模式評估:根據某種興趣度度量,識別表明知識的真正有趣的模式。

    g) 知識表示:使用可視化和知識表示技術,向用戶提供挖掘的知識)。

3. 數據倉庫定義:面向主題的、集成的、時變的、非易失的數據集合,支持管理者的決策過程。

手工搭建集羣

引言

環境:

Role

Host name

Master

centos1

Slave

centos2

centos3

配置機器名

1. [Master、Slave]查看各機器的機器名。

hostname

2. [Master、Slave]將全部機器名配置到各機器中。

vi /etc/hosts
192.168.27.2 centos1
192.168.27.3 centos2
192.168.27.4 centos3

調整時間

3. [Master、Slave]保證各機器間時間差不超過2分鐘。

date # 查看
date -s "2017-03-02 09:07:00" # 修改
ntpdate time.windows.com # 若連通互聯網,可同步微軟
clock -w # 寫入BIOS

建立用戶

4. [Master、Slave]建立hadoop用戶。

# CentOS/RHEL
groupadd hadoop useradd
-g hadoop -G root -d /home/hadoop hadoop passwd hadoop
# Ubuntu
sudo adduser hadoop
sudo usermod -aG adm,sudo,dip,plugdev,lpadmin hadoop
sudo groups hadoop

5. [Master、Slave]建立軟件安裝目錄和數據目錄。

mkdir /opt/app /opt/data
chown hadoop:hadoop /opt/app /opt/data

6. [Master、Slave]登陸hadoop用戶,後續步驟均在該用戶下執行。

su - hadoop # 注意有減號。有減號表示登陸後使用hadoop用戶的環境變量,不然不使用。

7. [Master]生成SSH公鑰、私鑰,複製公鑰到各Slave。

ssh-keygen -t rsa # 生成
ssh-copy-id hadoop@centos1 # 複製方式1
ssh-copy-id hadoop@centos2
ssh-copy-id hadoop@centos3
cp id_rsa.pub authorized_keys # 複製方式2
scp authorized_keys hadoop@centos2:/home/hadoop/.ssh
scp authorized_keys hadoop@centos3:/home/hadoop/.ssh
chmod 700 /home/hadoop/.ssh # 各節點的.ssh目錄權限必須是700,不然沒法登陸

安裝JDK

8. [Master、Slave]安裝JDK到/opt/app目錄下。

tar zxvf jdk-8u121-linux-i586.tar.gz -C /opt/app

9. [Master、Slave]配置環境變量。

vi /etc/profile
export JAVA_HOME=/opt/app/jdk1.8.0_121
export CLASSPATH=.
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile # 生效
env | grep JAVA_HOME # 驗證

配置文件

10. [Master]注意:Hadoop臨時目錄應指向一個足夠空間的磁盤,而且須要目錄使用權限(各機器)。

tar zxvf hadoop-2.6.5.tar.gz -C /opt/app
cd /opt/app/hadoop-2.6.5/etc/hadoop
vi hadoop-env.sh
export JAVA_HOME=/opt/app/jdk1.8.0_121
export HADOOP_HOME=/opt/app/hadoop-2.6.5
vi core-site.xml
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/hadoop.tmp.dir</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://centos1:9000</value>
</property>
vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/data/dfs.name.dir</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/data/dfs.data.dir</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
vi yarn-site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>centos1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>centos1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>centos1:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>centos1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>centos1:8088</value>
</property>
<!--
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>512</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>2</value>
</property>
-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
vi slaves
centos2
centos3

11. [Master]從Master複製Hadoop目錄到各Slave。

scp -r /opt/app/hadoop-2.6.5 hadoop@centos2:/opt/app
scp -r /opt/app/hadoop-2.6.5 hadoop@centos3:/opt/app

啓動與測試

12. [Master]配置Hadoop環境變量。

vi /home/hadoop/.bash_profile
export HADOOP_HOME=/opt/app/hadoop-2.6.5
export PATH=$PATH:$HADOOP_HOME/bin
source /home/hadoop/.bash_profile
env | grep HADOOP_HOME

13. [Master]格式化HDFS,啓動Hadoop

hadoop namenode -format
sbin/start-dfs.sh
sbin/start-yarn.sh

14. [MasterSlave]檢查守護進程。

jps
# Master守護進程
NameNode SecondaryNameNode ResourceManager
# Slave守護進程
DataNode NodeManager

15.   [Master]測試。

hadoop jar /opt/app/hadoop-2.6.5/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar pi 2 100

16. 監控頁面。

http://centos1:8088

YARN監控

http://centos1:50070

HDFS監控

Cloudera Manager

1. 主要功能:集羣自動化安裝部署、集羣監控和集羣運維。

2. 注意:免費但不開源(開源考慮Apache Ambari);CDH5無集羣規模限制。

原理

Hadoop架構

1. Hadoop集羣:HDFS守護進程、YARN守護進程及運行這些守護進程的節點構成Hadoop集羣。

2. 部署

    a) 生產環境,爲了性能和穩定性,建議NameNode和ResourceManager分開部署。

    b) DataNode和NodeManager可部署在不一樣節點,但爲了數據本地化,從而提升性能,NodeManager應部署在DataNode節點。

 

性能調優

硬件選型

1. 整體思路

    a) 對集羣總體規劃時,常先根據存儲空間估算集羣大小,再在存儲能力上估算計算資源。

    b) Hadoop做業屬於數據密集型非計算密集型(大量中間結果需磁盤和網絡開銷)。

2. NameNode內存估算

    a) 原理:HDFS啓動時,NameNode將元數據加載到內存,因此HDFS文件總數受限於NameNode內存容量。

    b) 公式:通常,若是每一個文件佔用一個塊,則100萬個文件約佔用300MB NameNode內存。

3. ResourceManager內存估算

    a) 原理:ResourceManager默認保存最近100個做業的元數據,而且保存在內存。

4. 虛擬CPU數計算

    a) 公式

虛擬CPU數 = CPU數 × 單CPU核數 × 單CPU核超線程數

    b) 示例:雙路六核CPU,HT(超線程)技術,虛擬CPU數=2×6×2=24。

5. 從節點內存估算

    a) 公式:每一個虛擬CPU分配4~8GB內存。

    b) 示例:雙路六核CPU,HT(超線程)技術,從節點內存至少96~192GB。

6. 從節點磁盤估算

    a) 公式:根據天天集羣處理的數據量估算;考慮副本數;至少爲臨時數據保留20%~30%空間。

    b) 示例:若是天天數據量爲1TB,副本數爲3,則天天集羣需3.6~9TB磁盤;若是有2臺DataNode,則天天單DataNode需1.8~4.5GB磁盤。

7. 網絡選型:千兆交換機,甚至萬兆交換機。

8. 參考硬件

    a) 中檔配置

硬件

配置

CPU

2×6 Core 2.9GHz / 15MB cache

內存

128GB DDR3-1600 ECC

磁盤控制器

SAS 6GB/s

磁盤

12×3TB LFF SATA II 7200 RPM

交換機

2×千兆交換機

    b) 高檔配置

硬件

配置

CPU

2×6 Core 2.9GHz / 15MB cache

內存

256GB DDR3-1600 ECC

磁盤控制器

2×SAS 6GB/s

磁盤

24×1TB SFF Nearline/MDL SAS 7200 RPM

交換機

萬兆交換機

操做系統調優

1. 禁用swap分區

    a) swap分區:系統在物理內存不足時,把物理內存中一部分釋放,以供當前運行程序使用。

    b) vm.swappiness參數:範圍0~100,值越高則系統內核越積極將應用程序數據交換到磁盤。

    c) 調優:Hadoop守護進程數據交換到磁盤可能致使操做超時,修改/etc/sysctl.conf設置vm.swappiness爲0。

2. 調整內存分配策略

    a) CommitLimit是overcommit的閾值。CommitLimit=物理內存大小×vm.overcommit_ratio÷100+swap分區大小,vm.overcommit_ratio默認50。

    b) vm.overcommit_memory參數

        i) 0:Heuristic overcommit handling,默認值。容許overcommit,但過於明目張膽的overcommit會被拒絕。Heuristic的意思是「試探式的」,內核利用某種算法猜想你的內存申請是否合理,它認爲不合理就會拒絕overcommit。

        ii) 1:Always overcommit。容許overcommit,直至內存用完爲止。

        iii) 2:Don’t overcommit。不容許overcommit。

    c) 調優:修改/etc/sysctl.conf設置vm.overcommit_memory爲0,vm.overcommit_ratio爲1,最後重啓或刷新設置「sudo sysctl -p」生效。

3. 調整backlog上限

    a) backlog:套接字監聽隊列,默認長度128。當一個請求還沒有被處理或創建時,進入backlog,套接字服務器一次性處理backlog中全部請求。當服務器處理較慢,監聽隊列填滿後,新請求被拒絕。

    b) 調優:修改/etc/sysctl.conf設置net.core.somaxconn爲32768,core-site.xml的「ipc.server.listen.queue.size」參數設置爲32768,最後重啓或刷新設置「sudo sysctl -p」生效。

4. 調整同時打開文件描述符上限

    a) 文件描述符:當打開一個現有文件或建立一個新文件時,內核向進程返回一個文件描述符。

    b) 調優:Hadoop做業可能同時打開多個文件。修改/etc/sysctl.conf設置fs.file-max爲65535(系統級),同時修改/etc/security/limits.conf設置「hadoop hard nofile 65535」和「hadoop soft nofile 65535」(用戶級,hadoop爲用戶名),最後重啓或刷新設置「sudo sysctl -p」生效。

5. 禁用文件訪問時間

    a) 文件訪問時間:若是開啓記錄文件訪問時間,在每次讀操做時,伴隨一個寫操做。

    b) 調優:修改/etc/fstab,在需禁用的分區options字段後添加「noatime」,重啓生效。

6. 禁用THP

    a) Huge Pages:大小爲2MB~1GB的內存頁。

    b) THP:Transparent Huge Pages,一個管理Huge Pages自動化的抽象層。

    c) 調優:運行Hadoop做業時,THP會引發CPU佔用率偏高,需禁用。

JVM調優

調優後效率提高約4%

Hadoop參數調優

1. 整體原則(適用於許多分佈式計算框架,如MapReduceSpark

    a) 增大做業並行度,例如增大Map任務數。

    b) 保證做業執行時有足夠資源。

    c) 知足前兩條前提下,儘量爲Shuffle階段提供資源。

2. core-site.xml

    a) io.file.buffer.size

        i. 默認值:4096

        ii. 官方說明:The size of buffer for use in sequence files. The size of this buffer should probably be a multiple of hardware page size (4096 on Intel x86), and it determines how much data is buffered during read and write operations.

        iii. 調優:設置爲131072

3. hdfs-site.xml

    a) dfs.blocksize

        i. 默認值:134217728

        ii. 官方說明:The default block size for new files, in bytes. You can use the following suffix (case insensitive): k(kilo), m(mega), g(giga), t(tera), p(peta), e(exa) to specify the size (such as 128k, 512m, 1g, etc.), Or provide complete size in bytes (such as 134217728 for 128 MB).

        iii. 調優:設置爲128MB256MB

    b) dfs.namenode.handler.count

        i. 默認值:10

        ii. 官方說明:The number of server threads for the namenode.

        iii. 調優:設置爲40

    c) dfs.datanode.max.transfer.threads

        i. 默認值:40

        ii. 官方說明:Specifies the maximum number of threads to use for transferring data in and out of the DN.

        iii. 調優:當DataNode鏈接數超過該值,則拒絕鏈接。設置爲65535

    d) dfs.datanode.balance.bandwidthPerSec

        i. 默認值:1048576

        ii. 官方說明:Specifies the maximum amount of bandwidth that each datanode can utilize for the balancing purpose in term of the number of bytes per second.

        iii. 調優:設置爲20971520,即20MB/s

    e) dfs.replication

        i. 默認值:3

        ii. 官方說明:Default block replication. The actual number of replications can be specified when the file is created. The default is used if replication is not specified in create time.

        iii. 調優:當任務同時讀取一個文件時,可能形成瓶頸,增大該值可有效緩解,但形成佔用磁盤。可只修改Hadoop客戶端,則影響從該客戶端上傳的文件副本數。

    f) dfs.datanode.max.transfer.threads

        i. 默認值:4096

        ii. 官方說明:Specifies the maximum number of threads to use for transferring data in and out of the DN.

        iii. 調優:設置爲8192

4. yarn-site.xml

    a) yarn.nodemanager.resource.memory-mb

        i. 默認值:8192

        ii. 官方說明:Amount of physical memory, in MB, that can be allocated for containers.

        iii. 調優:注意爲操做系統和其餘服務預留內存資源。

    b) yarn.nodemanager.resource.cpu-vcores

        i. 默認值:8

        ii. 官方說明:Number of vcores that can be allocated for containers. This is used by the RM scheduler when allocating resources for containers. This is not used to limit the number of physical cores used by YARN containers.

        iii. 調優:注意爲操做系統和其餘服務預留虛擬內存資源。虛擬CPU計算方法見操做系統調優。

    c) yarn.scheduler.minimum-allocation-mb

        i. 默認值:1024

        ii. 官方說明:The minimum allocation for every container request at the RM, in MBs. Memory requests lower than this won't take effect, and the specified value will get allocated at minimum.

        iii. 調優:無。

    d) yarn.scheduler.maximum-allocation-mb

        i. 默認值:8192

        ii. 官方說明:The maximum allocation for every container request at the RM, in MBs. Memory requests higher than this won't take effect, and will get capped to this value.

        iii. 調優:根據容器總量(即yarn.nodemanager.resource.memory-mb)設置,若是與之相等,則單任務內存資源使用不受限制。

    e) yarn.scheduler.minimum-allocation-vcores

        i. 默認值:1

        ii. 官方說明:The minimum allocation for every container request at the RM, in terms of virtual CPU cores. Requests lower than this won't take effect, and the specified value will get allocated the minimum.

        iii. 調優:無。

    f) yarn.scheduler.maximum-allocation-vcores

        i. 默認值:32

        ii. 官方說明:The maximum allocation for every container request at the RM, in terms of virtual CPU cores. Requests higher than this won't take effect, and will get capped to this value.

        iii. 調優:根據容器虛擬CPU總數(即yarn.nodemanager.resource.cpu-vcores)設置,若是與之相等,則單任務CPU資源使用不受限制。

5. mapred-site.xml

    a) mapreduce.job.reduces

        i. 默認值:1

        ii. 官方說明:The default number of reduce tasks per job. Typically set to 99% of the cluster's reduce capacity, so that if a node fails the reduces can still be executed in a single wave. Ignored when mapreduce.jobtracker.address is "local".

        iii. 調優:設置爲0.95×NodeManager節點數或1.75×NodeManager節點數。

    b) mapreduce.map.output.compress

        i. 默認值:false

        ii. 官方說明:Should the outputs of the maps be compressed before being sent across the network. Uses SequenceFile compression.

        iii. 調優:設置爲true

    c) mapreduce.map.output.compress.codec

        i. 默認值:org.apache.hadoop.io.compress.DefaultCodec

        ii. 官方說明:If the map outputs are compressed, how should they be compressed?

        iii. 調優:設置爲org.apache.hadoop.io.compress.SnappyCodec,由Google開源,CDH5已內置。

    d) mapreduce.job.jvm.numtasks

        i. 默認值:1

        ii. 官方說明:How many tasks to run per jvm. If set to -1, there is no limit.

        iii. 調優:設置爲-1,即無JVM無限制次數重用。

    e) mapreduce.map.speculative

        i. 默認值:true

        ii. 官方說明:If true, then multiple instances of some map tasks may be executed in parallel.

        iii. 調優:保持默認值true,即開啓推測機制有效放置因瓶頸而拖累整個做業。

    f) mapreduce.reduce.speculative

        i. 默認值:true

        ii. 官方說明:If true, then multiple instances of some reduce tasks may be executed in parallel.

        iii. 調優:保持默認值true,即開啓推測機制有效放置因瓶頸而拖累整個做業。

    g) mapreduce.cluster.local.dir

        i. 默認值:${hadoop.tmp.dir}/mapred/local

        ii. 官方說明:The local directory where MapReduce stores intermediate data files. May be a comma-separated list of directories on different devices in order to spread disk i/o. Directories that do not exist are ignored.

        iii. 調優:設置多個磁盤,提供IO效率。

    h) mapred.child.java.opts

        i. 默認值:-Xmx200m

        ii. 官方說明:Java opts for the task processes. The following symbol, if present, will be interpolated: @taskid@ is replaced by current TaskID. Any other occurrences of '@' will go unchanged. For example, to enable verbose gc logging to a file named for the taskid in /tmp and to set the heap maximum to be a gigabyte, pass a 'value' of: -Xmx1024m -verbose:gc -Xloggc:/tmp/@taskid@.gc Usage of -Djava.library.path can cause programs to no longer function if hadoop native libraries are used. These values should instead be set as part of LD_LIBRARY_PATH in the map / reduce JVM env using the mapreduce.map.env and mapreduce.reduce.env config settings.

        iii. 調優:根據任務增大內存,並使用G1垃圾回收器。

    i) mapreduce.map.java.opts

        i. 默認值:空

        ii. 調優:設置Map任務JVM參數,彌補mapred.child.java.opts粗粒度的不足。

    j) mapreduce.reduce.java.opts

        i. 默認值:空。

        ii. 調優:設置Reduce任務JVM參數,彌補mapred.child.java.opts粗粒度的不足。

    k) mapreduce.map.memory.mb

        i. 默認值:1024

        ii. 官方說明:The amount of memory to request from the scheduler for each map task.

        iii. 調優:設置爲-1,即從mapreduce.map.java.opts參數值繼承。

    l) mapreduce.reduce.memory.mb

        i. 默認值:1024

        ii. 官方說明:The amount of memory to request from the scheduler for each reduce task.

        iii. 調優:設置爲-1,即從mapreduce.reduce.java.opts參數值繼承,通常要大於mapreduce.map.java.opts參數值。

    m) mapreduce.map.cpu.vcores

        i. 默認值:1

        ii. 官方說明:The number of virtual cores to request from the scheduler for each map task.

        iii. 調優:根據容器虛擬CPU數(即yarn.scheduler.maximum-allocation-vcores)設置,注意與mapreduce.map.memory.mb參數值保持線性比例。

    n) mapreduce.reduce.cpu.vcores

        i. 默認值:1

        ii. 官方說明:The number of virtual cores to request from the scheduler for each reduce task.

        iii. 調優:根據容器虛擬CPU數(即yarn.scheduler.maximum-allocation-vcores)設置,注意與mapreduce.reduce.memory.mb參數值保持線性比例。

    o) yarn.app.mapreduce.am.resource.cpu-vcores

        i. 默認值:1

        ii. 官方說明:The number of virtual CPU cores the MR AppMaster needs.

        iii. 調優:適當增大。

    p) yarn.app.mapreduce.am.resource.mb

        i. 默認值:1536

        ii. 官方說明:The amount of memory the MR AppMaster needs.

        iii. 調優:適當增大。

    q) mapreduce.task.io.sort.mb

        i. 默認值:100

        ii. 官方說明:The total amount of buffer memory to use while sorting files, in megabytes. By default, gives each merge stream 1MB, which should minimize seeks.

        iii. 調優:適當增大Map任務環形緩衝區大小。

    r) mapreduce.reduce.shuffle.parallelcopies

        i. 默認值:5

        ii. 官方說明:The default number of parallel transfers run by reduce during the copy(shuffle) phase.

        iii. 調優:適當調高,但過大將致使大量數據同時網絡傳輸,引發IO壓力,建議設置爲4×lgnn爲集羣規模。

 

做者:netoxi
出處:http://www.cnblogs.com/netoxi本文版權歸做者和博客園共有,歡迎轉載,未經贊成須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。歡迎指正與交流。

相關文章
相關標籤/搜索