文章目錄
- 前言
- Hadoop大資料平臺搭建
- 一.Hadoop原理和功能介紹
- 二.Hadoop安裝部署
- 三.Hadoop常用操作
- 總結
前言
分布式機器學習為什么需求大資料呢?隨著海量用戶資料的積累,單機運算已經不能滿足需求,基于海量資料,機器學習訓練之前需要做資料預處理、特征工程等,需要在大資料平臺上來進行,另一個就是機器學習訓練程序的中間結果集可能會資料膨脹,依然需要大資料平臺來承載,也就是說為了高性能的資料處理、分布式計算等,分布式機器學習是以大資料平臺為基礎的,所以下面我們來講一下熱門常用的大資料技術,
Hadoop大資料平臺搭建
Hadoop是一種分析和處理大資料的軟體平臺,是一個用 Java 語言實作的 Apache 的開源軟體框架,在大量計算機組成的集群中實作了對海量資料的分布式計算,Hadoop是大資料平臺的標配,不管哪個公司的大資料部門,基本都是以Hadoop為核心,下面我們詳細講解下Hadoop原理和常用的一些操作命令,
一.Hadoop原理和功能介紹
Hadoop是一個由Apache基金會所開發的分布式系統基礎架構,用戶可以在不了解分布式底層細節的情況下,開發分布式程式,充分利用集群的威力進行高速運算和存盤,
Hadoop實作了一個分布式檔案系統(Hadoop Distributed File System),簡稱HDFS,HDFS有高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬體上;而且它提供高吞吐量(high throughput)來訪問應用程式的資料,適合那些有著超大資料集(large data set)的應用程式,HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)檔案系統中的資料,
Hadoop的框架最核心的設計有三大塊:HDFS分布式存盤、MapReduce計算引擎、YARN資源調度和管理,針對Hadoop這三大塊核心,我們詳細來講一下,
1.HDFS架構原理
HDFS 全稱 Hadoop 分布式檔案系統,其最主要的作用是作為 Hadoop 生態中各系統的存盤服務,HDFS為海量的資料提供了存盤,可以認為它是個分布式資料庫,用來存盤,HDFS 主要包含了6個服務:
1)NameNode
負責管理檔案系統的Namespace以及客戶端對檔案的訪問,NameNode在Hadoop2可以有多個,Hadoop1只能有一個,存在單點故障,HDFS中的NameNode被稱為元資料節點,DataNode稱為資料節點,NameNode維護了檔案與資料塊的映射表以及資料塊與資料節點的映射表,而真正的資料是存盤在DataNode上, NameNode的功能如下:
(1)它是維護和管理 DataNode 的主守護行程;
(2)它記錄存盤在集群中的所有檔案的元資料,例如Block 的位置、檔案大小、權限、層次結構等,有兩個檔案與元資料關聯;
(3)FsImage:它包含自 NameNode 開始以來檔案的 namespace 的完整狀態;
(4)EditLogs:它包含最近對檔案系統進行的與最新 FsImage 相關的所有修改,它記錄了發生在檔案系統元資料上的每個更改,例如,如果一個檔案在 HDFS 中被洗掉,NameNode會立即在EditLog中記錄這個操作;
(5)它定期從集群中的所有 DataNode 接收心跳資訊和Block 報告,以確保 DataNode 處于活動狀態;
(6)它保留了HDFS中所有Block的記錄以及這些Block所在的節點;
(7)它負責管理所有Block的復制;
(8)在 DataNode 失敗的情況下,NameNode會為副本選擇新的 DataNode,平衡磁盤使用并管理到DataNode的通信流量;
(9)DataNode 則是 HDFS 中的從節點,與 NameNode 不同的是,DataNode 是一種商品硬體,它并不具有高質量或高可用性,DataNode 是一個將資料存盤在本地檔案 ext3 或 ext4 中的Block服務器,
2)DataNode
用于管理它所在節點上的資料存盤:
(1)這些是叢屬守護進行或在每臺從屬機器上運行的行程;
(2)實際的資料存盤在DataNode上;
(3)執行檔案系統客戶端底層的讀寫請求;
(4)定期向NameNode發送心跳報告HDFS的整體健康狀況,默認頻率為3秒;
(5)資料塊(Block):通常,在任何檔案系統中,都將資料存盤為Block 的集合,Block 是硬碟上存盤資料的最不連續的位置,在Hadoop 集群中,每個Block 的默認大小為 128M(此處指 Hadoop 2.x 版本,Hadoop 1.x 版本為 64M),您也可以通過如下配置配置Block的大小:dfs.block.size或 dfs.blocksize =64M
(6)資料復制:HDFS 提供了一種將大資料作為資料塊存盤在分布式環境中的可靠方法,即將這些Block復制以容錯,默認的復制因子是3,您也可以通過如下配置配置復制因子:
fs.replication = 3每個Block 被復制3次存盤在不同的 DataNode 中,
3)FailoverController
故障切換控制器,負責監控與切換 NameNode 服務,
4)JournalNode
用于存盤 EditLog;記錄檔案和數映射關系,操作記錄,恢復操作,
5)Balancer
用于平衡集群之間各節點的磁盤利用率,
6)HttpFS
提供 HTTP 方式訪問 HDFS 的功能,總的看來NameNode 和 DataNode 是 HDFS 的核心,也是客戶端操作資料需要依賴的兩個服務,
2.MapReduce計算引擎
MapReduce計算引擎經歷了兩個版本,Hadoop1的時候叫MRv1,Hadoop2的時候叫MRv2,MapReduce則為海量的資料提供了計算引擎,拿里面的資料做運算,跑的快,一聲令下,多臺機器團結合作,每臺機器分自己一部分任務,同時并行跑,等所有機器小任務跑完,匯總報道,總任務全部完成,
1)MapReduce1架構原理
在Hadoop1.X的時代,其核心是JobTracker,
JobTracker:
主要負責資源監控管理和作業調度
(1)監控所有TaskTracker與Job的健康狀況,一旦發現失敗,就將相應的任務轉移到其他節點;
(2)同時JobTracker會跟蹤任務的執行進度、資源使用量等資訊,并將這些資訊告訴任務調度器,而調度器會在資源出現空閑時,選擇合適的任務使用這些資源,
TaskTracker:
TaskTracker是JobTracker與Task之前的橋梁,
(1)從JobTracker接收并執行各種命令:運行任務、提交任務、Kill任務、重新初始化任務;
(2)周期性地通過心跳機制,將節點健康情況和資源使用情況、各個任務的進度和狀態等匯報給JobTracker,
MapReduce1框架的主要局限:
(1)JobTracker 是 MapReduce 的集中處理點,存在單點故障,可靠性差;
(2)JobTracker 完成了太多的任務,造成了過多的資源消耗,當MapReduce Job非常多的時候,會造成很大的記憶體開銷,潛在來說,也增加了JobTracker 失效的風險,這也是業界普遍總結出老Hadoop的MapReduce只能支持4000節點主機的上限,擴展性能差;
(3)可預測的延遲:這是用戶非常關心的,小作業應該盡可能快得被調度,而當前基于TaskTracker->JobTracker ping(heartbeat)的通信方式代價和延遲過大,比較好的方式是JobTracker->TaskTracker ping,這樣JobTracker可以主動掃描有作業運行的TaskTracker,
2)MapReduce2架構原理
Hadoop2之后有Yarn,Hadoop1的時候還沒有,MapReduce2(又名MRv2),用Yarn來管理,下面我們來講一下Yarn資源調度,
3.Yarn資源調度和管理
1)ResourceManager(RM)
ResourceManager就是資源調度器,包含兩個主要的組件:定時呼叫器(Scheduler)以及應用管理器(ApplicationManager),
(1)調度器(Scheduler):根據容量,佇列等限制條件,將系統中的資源分配給各個正在運行的應用,這里的調度器是一個“純調度器”,因為它不再負責監控或者跟蹤應用的執行狀態等,此外,他也不負責重新啟動因應用執行失敗或者硬體故障而產生的失敗任務,調度器僅根據各個應用的資源需求進行調度,這是通過抽象概念“資源容器”完成的,資源容器(Resource Container)將記憶體,CPU,磁盤,網路等資源封裝在一起,從而限定每個任務使用的資源量,總而言之,定時調度器負責向應用程式分配資源,它不做監控以及應用程式的狀態跟蹤,并且它不保證會重啟由于應用程式本身或硬體出錯而執行失敗的應用程式,
(2)應用管理器(ApplicationsManager,ASM):ASM主要負責接收作業,協商獲取第一個容器用于執行AM和提供重啟失敗AM container的服務,
2)NodeManager
NodeManager簡稱NM,是每個節點上的框架代理,主要負責啟動應用所需的容器,監控資源(記憶體,CPU,磁盤,網路等)的使用情況并將之匯報給調度器(Scheduler),
3)ApplicationMaster
每個應用程式的ApplicationMaster負責從Scheduler申請資源,以及跟蹤這些資源的使用情況以及任務進度的監控,
4)Container
是Yarn中資源的抽象,它將記憶體、CPU、磁盤、網路等資源封裝在一起,當AM向RM申請資源時,RM為AM回傳的資源便是用Container表示的,
了解了Hadoop的原理和核心組件,我們看下如何安裝部署搭建分布式集群,
二.Hadoop安裝部署
Hadoop有Apache社區版和第三方發行版CDH,Apache社區版優點是完全開源免費 社區活躍 檔案、資料詳實,缺點是版本管理比較混亂,各種版本層出不窮,很難選擇,選擇生態組件時需要大量考慮兼容性問題、版本匹配問題、組件沖突問題、編譯問題等,集群的部署安裝配置復雜,需要撰寫大量組態檔,分發到每臺節點,容易出錯,效率低,集群運維復雜,需要安裝第三方軟體輔助,CDH是第三方公司Cloudera公司基于社區版本的基礎上做了一些優化和改進,穩定性更強一些,CDH分免費版和商業版,CDH安裝可以使用CM通過管理界面的方式來安裝,非常簡單,Cloudera Manager(簡稱CM)是Cloudera公司開發的一款大資料集群安裝部署利器,這款利器具有集群自動化安裝、中心化管理、集群監控、報警等功能,使得安裝集群從幾天的時間縮短在幾小時以內,運維人員從數十人降低到幾人以內,極大的提高集群管理的效率,
不管是CDH還是Apache社區版,我們都是使用tar包手動來部署,所有的環境需要我們一步步來操作,Hadoop的每個組態檔也需要我們手工配置,這種方式安裝的優勢比較靈活,集群服務器也不需要連外網,但這種方式對開發人員的要求比較高,對各種開發環境和組態檔都需要了解清楚,不過這種方式更方便我們了解Hadoop的各個模塊和作業原理,下面我們使用這種方式來手動的安裝分布式集群,我們的例子是部署5臺服務器,兩個NameNode節點做HA,5個DataNode節點,兩個NameNode節點也同時作為DataNode,一般當服務器不多的時候,為了盡量的充分利用服務器的資源,NameNode節點可以同時是DataNode,
安裝步驟如下:
1.創建Hadoop用戶
1)useradd hadoop
設密碼passwd hadoop
命令usermod -g hadoop hadoop
2)vi /root/sudo
添加一行
hadoop ALL=(ALL) NOPASSWD:ALL
chmod u+w /etc/sudoers
3)編輯/etc/sudoers檔案
#也就是輸入命令:
vi /etc/sudoers
#進入編輯模式,找到這一行:
root ALL=(ALL) ALL
#在它的下面添加:
hadoop ALL=(ALL) NOPASSWD:ALL
#這里的hadoop是你的用戶名,然后保存退出,
4)撤銷檔案的寫權限
#也就是輸入命令:
chmod u-w /etc/sudoers
2.設定環境變數
編輯/etc/profile檔案
vim /etc/profile
輸入以下配置,如代碼3.1所示:
【代碼3.1】 環境變數
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_121
export SPARK_HOME=/home/hadoop/software/spark21
export SCALA_HOME=/home/hadoop/software/scala-2.11.8
export SQOOP_HOME=/home/hadoop/software/sqoop
export HADOOP_HOME=/home/hadoop/software/hadoop2
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/bin
export PATH=
P
A
T
H
:
PATH:
PATH:HADOOP_HOME/sbin
export HADOOP_MAPARED_HOME=
H
A
D
O
O
P
H
O
M
E
e
x
p
o
r
t
H
A
D
O
O
P
C
O
M
M
O
N
H
O
M
E
=
{HADOOP_HOME} export HADOOP_COMMON_HOME=
HADOOPH?OMEexportHADOOPC?OMMONH?OME={HADOOP_HOME}
export HADOOP_HDFS_HOME=
H
A
D
O
O
P
H
O
M
E
e
x
p
o
r
t
Y
A
R
N
H
O
M
E
=
{HADOOP_HOME} export YARN_HOME=
HADOOPH?OMEexportYARNH?OME={HADOOP_HOME}
export HADOOP_CONF_DIR=
H
A
D
O
O
P
H
O
M
E
/
e
t
c
/
h
a
d
o
o
p
e
x
p
o
r
t
H
I
V
E
H
O
M
E
=
/
h
o
m
e
/
h
a
d
o
o
p
/
s
o
f
t
w
a
r
e
/
h
a
d
o
o
p
2
/
h
i
v
e
e
x
p
o
r
t
P
A
T
H
=
{HADOOP_HOME}/etc/hadoop export HIVE_HOME=/home/hadoop/software/hadoop2/hive export PATH=
HADOOPH?OME/etc/hadoopexportHIVEH?OME=/home/hadoop/software/hadoop2/hiveexportPATH=JAVA_HOME/bin:
H
I
V
E
H
O
M
E
/
b
i
n
:
HIVE_HOME/bin:
HIVEH?OME/bin:SQOOP_HOME/bin:
P
A
T
H
e
x
p
o
r
t
C
L
A
S
S
P
A
T
H
=
.
:
PATH export CLASSPATH=.:
PATHexportCLASSPATH=.:JAVA_HOME/lib/dt.jar:
J
A
V
A
H
O
M
E
/
l
i
b
/
t
o
o
l
s
.
j
a
r
e
x
p
o
r
t
P
A
T
H
U
S
E
R
L
O
G
N
A
M
E
M
A
I
L
H
O
S
T
N
A
M
E
H
I
S
T
S
I
Z
E
H
I
S
T
C
O
N
T
R
O
L
e
x
p
o
r
t
F
L
U
M
E
H
O
M
E
=
/
h
o
m
e
/
h
a
d
o
o
p
/
s
o
f
t
w
a
r
e
/
f
l
u
m
e
e
x
p
o
r
t
P
A
T
H
=
JAVA_HOME/lib/tools.jar export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL export FLUME_HOME=/home/hadoop/software/flume export PATH=
JAVAH?OME/lib/tools.jarexportPATHUSERLOGNAMEMAILHOSTNAMEHISTSIZEHISTCONTROLexportFLUMEH?OME=/home/hadoop/software/flumeexportPATH=PATH:
F
L
U
M
E
H
O
M
E
/
b
i
n
e
x
p
o
r
t
H
B
A
S
E
H
O
M
E
=
/
h
o
m
e
/
h
a
d
o
o
p
/
s
o
f
t
w
a
r
e
/
h
b
a
s
e
?
0.98.8
?
h
a
d
o
o
p
2
e
x
p
o
r
t
P
A
T
H
=
FLUME_HOME/bin export HBASE_HOME=/home/hadoop/software/hbase-0.98.8-hadoop2 export PATH=
FLUMEH?OME/binexportHBASEH?OME=/home/hadoop/software/hbase?0.98.8?hadoop2exportPATH=PATH:
H
B
A
S
E
H
O
M
E
/
b
i
n
e
x
p
o
r
t
S
O
L
R
H
O
M
E
=
/
h
o
m
e
/
h
a
d
o
o
p
/
s
o
f
t
w
a
r
e
/
s
o
l
r
c
l
o
u
d
/
s
o
l
r
?
6.4.2
e
x
p
o
r
t
P
A
T
H
=
HBASE_HOME/bin export SOLR_HOME=/home/hadoop/software/solrcloud/solr-6.4.2 export PATH=
HBASEH?OME/binexportSOLRH?OME=/home/hadoop/software/solrcloud/solr?6.4.2exportPATH=PATH:
S
O
L
R
H
O
M
E
/
b
i
n
e
x
p
o
r
t
M
2
H
O
M
E
=
/
h
o
m
e
/
h
a
d
o
o
p
/
s
o
f
t
w
a
r
e
/
a
p
a
c
h
e
?
m
a
v
e
n
?
3.3.9
e
x
p
o
r
t
P
A
T
H
=
SOLR_HOME/bin export M2_HOME=/home/hadoop/software/apache-maven-3.3.9 export PATH=
SOLRH?OME/binexportM2H?OME=/home/hadoop/software/apache?maven?3.3.9exportPATH=PATH:
M
2
H
O
M
E
/
b
i
n
e
x
p
o
r
t
P
A
T
H
=
M2_HOME/bin export PATH=
M2H?OME/binexportPATH=PATH:/home/hadoop/software/apache-storm-1.1.0/bin
export OOZIE_HOME=/home/hadoop/software/oozie-4.3.0
export SQOOP_HOME=/home/hadoop/software/sqoop-1.4.6-cdh5.5.2
export PATH=
P
A
T
H
:
PATH:
PATH:SQOOP_HOME/bin
#按:wq保存,保存后環境變數還沒有生效,執行以下命令才會生效,
source /etc/profile
#然后修改下Hadoop的安裝目錄為Hadoop用戶所有,
chown -R hadoop:hadoop /data1/software/hadoop
3.設定local無密碼登陸
su - hadoop
cd ~/.ssh 如果沒有.shh 則mkdir ~/.ssh
ssh-keygen -t rsa
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
sudo chmod 644 ~/.ssh/authorized_keys
sudo chmod 700 ~/.ssh
然后重啟sshd服務:
sudo /etc/rc.d/init.d/sshd restart
有些情況下會遇到這個報錯,可以這么來解決,
常見錯誤:
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Could not create directory ‘/home/hadoop/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
open /home/hadoop/.ssh/id_rsa failed: Permission denied.
Saving the key failed: /home/hadoop/.ssh/id_rsa.
解決辦法:
在root用戶下操作yum remove selinux*
4.修改/etc/hosts主機名和IP地址的映射檔案
sudo vim /etc/hosts
增加:
172.172.0.11 data1
172.172.0.12 data2
172.172.0.13 data3
172.172.0.14 data4
172.172.0.15 data5
5.設定遠程無密碼登陸
使用Hadoop用戶:
每臺機器先本地無秘鑰部署一遍,然后因為我們搭建的是雙NameNode節點,需要從這兩個服務器上把authorized_keys檔案復制到其它機器上,主要目的是NameNode節點需要直接訪問DataNode節點,
把雙namenode HA的authorized_keys復制到slave上,
從namenode1節點上復制:
scp authorized_keys hadoop@data2:~/.ssh/authorized_keys_from_data1
scp authorized_keys hadoop@data3:~/.ssh/authorized_keys_from_data1
scp authorized_keys hadoop@data4:~/.ssh/authorized_keys_from_data1
scp authorized_keys hadoop@data5:~/.ssh/authorized_keys_from_data1
然后從namenode2節點上復制:
scp authorized_keys hadoop@data1:~/.ssh/authorized_keys_from_data2
scp authorized_keys hadoop@data3:~/.ssh/authorized_keys_from_data2
scp authorized_keys hadoop@data4:~/.ssh/authorized_keys_from_data2
scp authorized_keys hadoop@data5:~/.ssh/authorized_keys_from_data2
6.每臺都關倍訓器的防火墻
#關閉防火墻
sudo /etc/init.d/iptables stop
#關閉開機啟動
sudo chkconfig iptables off
7.jdk安裝
因為Hadoop是基于Java開發,所以我們需要安裝jdk環境:
cd /home/hadoop/software/
上傳rz jdk1.8.0_121.gz
tar xvzf jdk1.8.0_121.gz
然后修改下環境變數指定到這個jdk目錄就算安裝好了:
vim /etc/profile
export JAVA_HOME=/home/hadoop/software/jdk1.8.0_121
source /etc/profile
8.Hadoop安裝
Hadoop就是一個tar包放上去解壓縮后再進行各個檔案的配置,
上傳hadoop-2.6.0-cdh5.tar.gz到/home/hadoop/software/
tar xvzf hadoop-2.6.0-cdh5.tar.gz
mv hadoop-2.6.0-cdh5 hadoop2
cd /home/hadoop/software/hadoop2/etc/hadoop
vi hadoop-env.sh
修改JAVA_HOME值(export JAVA_HOME=/home/hadoop/software/jdk1.8.0_121)
vi yarn-env.sh
修改JAVA_HOME值(export JAVA_HOME=/home/hadoop/software/jdk1.8.0_121)
然后修改Hadoop的主從節點檔案,slaves是從節點,masters是主節點,需要說明的是一個主節點也可以同時從節點,也就是說這個節點可以同時是NameNode節點和DataNode節點,
vim slaves
添加這5臺機器的節點:
data1
data2
data3
data4
data5
vim masters
添加兩個NameNode節點:
data1
data2
下面來修改Hadoop的組態檔:
1)編輯core-site.xml檔案
core-site.xml檔案用于定義系統級別的引數,如HDFS URL 、Hadoop的臨時目錄等,這個檔案主要是修改fs.defaultFS節點,改成hdfs://ai,ai是雙NameNodeHA的虛擬域名,再就是hadoop.tmp.dir這個節點也非常重要,如果不配置,Hadoop重啟后可能會有問題,
然后就是配置zookeeper的地址ha.zookeeper.quorum,
fs.defaultFS
hdfs://ai
ha.zookeeper.quorum
data1:2181,data2:2181,data3:2181,data4:2181,data5:2181
dfs.cluster.administrators
hadoop
io.file.buffer.size
131072
hadoop.tmp.dir
/home/hadoop/software/hadoop/tmp
Abase for other temporary directories.
hadoop.proxyuser.hduser.hosts
hadoop.proxyuser.hduser.groups
2)編輯hdfs-site.xml檔案
hdfs-site.xml檔案用來配置名稱節點和資料節點的存放位置、檔案副本的個數、檔案的讀取權限等,
dfs.nameservices設定雙NameNodeHA的虛擬域名,
dfs.ha.namenodes.ai指定兩個節點名稱,
dfs.namenode.rpc-address.ai.nn1指定HDFS訪問節點1,
dfs.namenode.rpc-address.ai.nn2指定HDFS訪問節點2,
dfs.namenode.http-address.ai.nn1指定HDFS的Web訪問節點1,
dfs.namenode.http-address.ai.nn2指定HDFS的Web訪問節點2,
dfs.namenode.name.dir定義DFS的名稱節點在本地檔案系統的位置,
dfs.datanode.data.dir定義DFS資料節點存盤資料塊時存盤在本地檔案系統的位置,
dfs.replication預設的塊復制數量,
dfs.webhdfs.enabled是否通過http協議讀取hdfs檔案,如果選是,則集群安全性較差,
vim hdfs-site.xml
dfs.nameservices
ai
dfs.ha.namenodes.ai
nn1,nn2
dfs.namenode.rpc-address.ai.nn1
data1:9000
dfs.namenode.rpc-address.ai.nn2
data2:9000
dfs.namenode.http-address.ai.nn1
data1:50070
dfs.namenode.http-address.ai.nn2
data2:50070
dfs.namenode.shared.edits.dir
qjournal://data1:8485;data2:8485;data3:8485;data4:8485;data5:8485/aicluster
dfs.client.failover.proxy.provider.ai
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/home/hadoop/.ssh/id_rsa
dfs.journalnode.edits.dir
/home/hadoop/software/hadoop/journal/data
dfs.ha.automatic-failover.enabled
true
dfs.namenode.name.dir
file:/home/hadoop/software/hadoop/dfs/name
dfs.datanode.data.dir
file:/home/hadoop/software/hadoop/dfs/data
dfs.replication
3
dfs.webhdfs.enabled
true
dfs.permissions
true
dfs.client.block.write.replace-datanode-on-failure.enable
true
dfs.client.block.write.replace-datanode-on-failure.policy
NEVER
dfs.datanode.max.xcievers
4096
dfs.datanode.balance.bandwidthPerSec
104857600
dfs.qjournal.write-txns.timeout.ms
120000
3)編輯mapred-site.xml檔案
主要是修改mapreduce.jobhistory.address和mapreduce.jobhistory.webapp.address兩個節點,主要是配置歷史服務器地址,通過歷史服務器查看已經運行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等資訊,默認情況下,Hadoop歷史服務器是沒有啟動的,我們可以通過下面的命令來啟動Hadoop歷史服務器:
$ sbin/mr-jobhistory-daemon.sh start historyserver
這樣我們就可以在相應機器的19888埠上打開歷史服務器的WEB UI界面,可以查看已經運行完的作業情況,歷史服務器可以單獨在一臺機器上啟動,引數配置如下:
vim mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
data1:10020
mapred.child.env
LD_LIBRARY_PATH=/usr/lib64
mapreduce.jobhistory.webapp.address
data1:19888
mapred.child.java.opts
-Xmx3072m
mapreduce.task.io.sort.mb
1000
mapreduce.jobtracker.expire.trackers.interval
1600000
mapreduce.tasktracker.healthchecker.script.timeout
1500000
mapreduce.task.timeout
88800000
mapreduce.map.memory.mb
8192
mapreduce.reduce.memory.mb
8192
mapreduce.reduce.java.opts
-Xmx6144m
4)編輯yarn-site.xml檔案
主要是對Yarn資源調度的配置,核心配置引數如下:
yarn.resourcemanager.address
引數解釋:ResourceManager 對客戶端暴露的地址,客戶端通過該地址向RM提交應用程式,殺死應用程式等,
默認值:
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
h
o
s
t
n
a
m
e
:
8032
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
a
d
d
r
e
s
s
參
數
解
釋
:
R
e
s
o
u
r
c
e
M
a
n
a
g
e
r
對
A
p
p
l
i
c
a
t
i
o
n
M
a
s
t
e
r
暴
露
的
訪
問
地
址
,
A
p
p
l
i
c
a
t
i
o
n
M
a
s
t
e
r
通
過
該
地
址
向
R
M
申
請
資
源
、
釋
放
資
源
等
,
默
認
值
:
{yarn.resourcemanager.hostname}:8032 yarn.resourcemanager.scheduler.address 引數解釋:ResourceManager 對ApplicationMaster暴露的訪問地址,ApplicationMaster通過該地址向RM申請資源、釋放資源等, 默認值:
yarn.resourcemanager.hostname:8032yarn.resourcemanager.scheduler.address參數解釋:ResourceManager對ApplicationMaster暴露的訪問地址,ApplicationMaster通過該地址向RM申請資源、釋放資源等,默認值:{yarn.resourcemanager.hostname}:8030
yarn.resourcemanager.resource-tracker.address
引數解釋:ResourceManager 對NodeManager暴露的地址.,NodeManager通過該地址向RM匯報心跳,領取任務等,
默認值:
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
h
o
s
t
n
a
m
e
:
8031
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
a
d
m
i
n
.
a
d
d
r
e
s
s
參
數
解
釋
:
R
e
s
o
u
r
c
e
M
a
n
a
g
e
r
對
管
理
員
暴
露
的
訪
問
地
址
,
管
理
員
通
過
該
地
址
向
R
M
發
送
管
理
命
令
等
,
默
認
值
:
{yarn.resourcemanager.hostname}:8031 yarn.resourcemanager.admin.address 引數解釋:ResourceManager 對管理員暴露的訪問地址,管理員通過該地址向RM發送管理命令等, 默認值:
yarn.resourcemanager.hostname:8031yarn.resourcemanager.admin.address參數解釋:ResourceManager對管理員暴露的訪問地址,管理員通過該地址向RM發送管理命令等,默認值:{yarn.resourcemanager.hostname}:8033
yarn.resourcemanager.webapp.address
引數解釋:ResourceManager對外web ui地址,用戶可通過該地址在瀏覽器中查看集群各類資訊,
默認值:
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
h
o
s
t
n
a
m
e
:
8088
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
c
l
a
s
s
參
數
解
釋
:
啟
用
的
資
源
調
度
器
主
類
,
目
前
可
用
的
有
F
I
F
O
、
C
a
p
a
c
i
t
y
S
c
h
e
d
u
l
e
r
和
F
a
i
r
S
c
h
e
d
u
l
e
r
,
默
認
值
:
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
y
a
r
n
.
s
e
r
v
e
r
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
c
a
p
a
c
i
t
y
.
C
a
p
a
c
i
t
y
S
c
h
e
d
u
l
e
r
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
r
e
s
o
u
r
c
e
?
t
r
a
c
k
e
r
.
c
l
i
e
n
t
.
t
h
r
e
a
d
?
c
o
u
n
t
參
數
解
釋
:
處
理
來
自
N
o
d
e
M
a
n
a
g
e
r
的
R
P
C
請
求
的
H
a
n
d
l
e
r
數
目
,
默
認
值
:
50
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
c
l
i
e
n
t
.
t
h
r
e
a
d
?
c
o
u
n
t
參
數
解
釋
:
處
理
來
自
A
p
p
l
i
c
a
t
i
o
n
M
a
s
t
e
r
的
R
P
C
請
求
的
H
a
n
d
l
e
r
數
目
,
默
認
值
:
50
y
a
r
n
.
s
c
h
e
d
u
l
e
r
.
m
i
n
i
m
u
m
?
a
l
l
o
c
a
t
i
o
n
?
m
b
/
y
a
r
n
.
s
c
h
e
d
u
l
e
r
.
m
a
x
i
m
u
m
?
a
l
l
o
c
a
t
i
o
n
?
m
b
參
數
解
釋
:
單
個
可
申
請
的
最
小
/
最
大
內
存
資
源
量
,
比
如
設
置
為
1024
和
3072
,
則
運
行
M
a
p
R
e
d
c
e
作
業
時
,
每
個
T
a
s
k
最
少
可
申
請
1024
M
B
內
存
,
最
多
可
申
請
3072
M
B
內
存
,
默
認
值
:
1024
/
8192
y
a
r
n
.
s
c
h
e
d
u
l
e
r
.
m
i
n
i
m
u
m
?
a
l
l
o
c
a
t
i
o
n
?
v
c
o
r
e
s
/
y
a
r
n
.
s
c
h
e
d
u
l
e
r
.
m
a
x
i
m
u
m
?
a
l
l
o
c
a
t
i
o
n
?
v
c
o
r
e
s
參
數
解
釋
:
單
個
可
申
請
的
最
小
/
最
大
虛
擬
C
P
U
個
數
,
比
如
設
置
為
1
和
4
,
則
運
行
M
a
p
R
e
d
u
c
e
作
業
時
,
每
個
T
a
s
k
最
少
可
申
請
1
個
虛
擬
C
P
U
,
最
多
可
申
請
4
個
虛
擬
C
P
U
,
什
么
是
虛
擬
C
P
U
,
可
閱
讀
我
的
這
篇
文
章
:
“
Y
A
R
N
資
源
調
度
器
剖
析
”
,
默
認
值
:
1
/
32
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
n
o
d
e
s
.
i
n
c
l
u
d
e
?
p
a
t
h
/
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
n
o
d
e
s
.
e
x
c
l
u
d
e
?
p
a
t
h
參
數
解
釋
:
N
o
d
e
M
a
n
a
g
e
r
黑
白
名
單
,
如
果
發
現
若
干
個
N
o
d
e
M
a
n
a
g
e
r
存
在
問
題
,
比
如
故
障
率
很
高
,
任
務
運
行
失
敗
率
高
,
則
可
以
將
之
加
入
黑
名
單
中
,
注
意
,
這
兩
個
配
置
參
數
可
以
動
態
生
效
,
(
調
用
一
個
r
e
f
r
e
s
h
命
令
即
可
)
默
認
值
:
“
”
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
n
o
d
e
m
a
n
a
g
e
r
s
.
h
e
a
r
t
b
e
a
t
?
i
n
t
e
r
v
a
l
?
m
s
參
數
解
釋
:
N
o
d
e
M
a
n
a
g
e
r
心
跳
間
隔
默
認
值
:
1000
(
毫
秒
)
一
般
需
要
修
改
的
地
方
在
下
面
的
配
置
中
加
粗
了
,
這
個
配
置
文
件
是
Y
a
r
n
資
源
調
度
最
核
心
的
配
置
,
下
面
的
是
一
個
實
例
配
置
,
有
一
個
需
要
注
意
的
配
置
技
巧
,
分
配
的
內
存
和
C
P
U
一
定
要
配
套
,
需
要
根
據
你
的
服
務
器
的
情
況
,
計
算
最
小
分
配
內
存
,
分
配
C
P
U
等
,
這
個
如
果
計
算
不
好
的
話
,
可
能
會
造
成
H
a
d
o
o
p
跑
任
務
資
源
分
配
的
時
候
,
C
P
U
資
源
用
盡
了
,
但
內
存
還
剩
很
多
,
但
對
于
H
a
d
o
o
p
來
講
,
只
要
C
P
U
或
內
存
有
一
個
占
滿
了
,
后
面
的
任
務
就
不
能
分
配
了
,
所
以
設
置
不
好
會
造
成
C
P
U
和
內
存
資
源
的
浪
費
,
另
外
一
個
需
要
注
意
的
地
方
y
a
r
n
.
n
o
d
e
m
a
n
a
g
e
r
.
w
e
b
a
p
p
.
a
d
d
r
e
s
s
節
點
復
制
到
每
臺
H
a
d
o
o
p
服
務
器
上
記
得
把
節
點
值
的
I
P
地
址
改
成
本
機
,
這
個
地
方
忘
了
改
,
可
能
會
出
現
N
o
d
e
M
a
n
a
g
e
r
啟
動
不
了
的
問
題
,
v
i
m
y
a
r
n
?
s
i
t
e
.
x
m
l
<
c
o
n
f
i
g
u
r
a
t
i
o
n
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
n
o
d
e
m
a
n
a
g
e
r
.
w
e
b
a
p
p
.
a
d
d
r
e
s
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
172.172.0.11
:
8042
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
r
e
s
o
u
r
c
e
?
t
r
a
c
k
e
r
.
a
d
d
r
e
s
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
d
a
t
a
1
:
8031
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
a
d
d
r
e
s
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
d
a
t
a
1
:
8030
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
c
l
a
s
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
o
r
g
.
a
p
a
c
h
e
.
h
a
d
o
o
p
.
y
a
r
n
.
s
e
r
v
e
r
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
s
c
h
e
d
u
l
e
r
.
c
a
p
a
c
i
t
y
.
C
a
p
a
c
i
t
y
S
c
h
e
d
u
l
e
r
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
r
e
s
o
u
r
c
e
m
a
n
a
g
e
r
.
a
d
d
r
e
s
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
d
a
t
a
1
:
8032
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
n
o
d
e
m
a
n
a
g
e
r
.
l
o
c
a
l
?
d
i
r
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
{yarn.resourcemanager.hostname}:8088 yarn.resourcemanager.scheduler.class 引數解釋:啟用的資源調度器主類,目前可用的有FIFO、Capacity Scheduler和Fair Scheduler, 默認值: org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler yarn.resourcemanager.resource-tracker.client.thread-count 引數解釋:處理來自NodeManager的RPC請求的Handler數目, 默認值:50 yarn.resourcemanager.scheduler.client.thread-count 引數解釋:處理來自ApplicationMaster的RPC請求的Handler數目, 默認值:50 yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb 引數解釋:單個可申請的最小/最大記憶體資源量,比如設定為1024和3072,則運行MapRedce作業時,每個Task最少可申請1024MB記憶體,最多可申請3072MB記憶體, 默認值:1024/8192 yarn.scheduler.minimum-allocation-vcores/yarn.scheduler.maximum-allocation-vcores 引數解釋:單個可申請的最小/最大虛擬CPU個數,比如設定為1和4,則運行MapReduce作業時,每個Task最少可申請1個虛擬CPU,最多可申請4個虛擬CPU,什么是虛擬CPU,可閱讀我的這篇文章:“YARN 資源調度器剖析”, 默認值:1/32 yarn.resourcemanager.nodes.include-path/yarn.resourcemanager.nodes.exclude-path 引數解釋:NodeManager黑白名單,如果發現若干個NodeManager存在問題,比如故障率很高,任務運行失敗率高,則可以將之加入黑名單中,注意,這兩個配置引數可以動態生效,(呼叫一個refresh命令即可) 默認值:“” yarn.resourcemanager.nodemanagers.heartbeat-interval-ms 引數解釋:NodeManager心跳間隔 默認值:1000(毫秒) 一般需要修改的地方在下面的配置中加粗了,這個組態檔是Yarn資源調度最核心的配置,下面的是一個實體配置,有一個需要注意的配置技巧,分配的記憶體和CPU一定要配套,需要根據你的服務器的情況,計算最小分配記憶體,分配CPU等,這個如果計算不好的話,可能會造成Hadoop跑任務資源分配的時候,CPU資源用盡了,但記憶體還剩很多,但對于Hadoop來講,只要CPU或記憶體有一個占滿了,后面的任務就不能分配了,所以設定不好會造成CPU和記憶體資源的浪費, 另外一個需要注意的地方yarn.nodemanager.webapp.address節點復制到每臺Hadoop服務器上記得把節點值的IP地址改成本機,這個地方忘了改,可能會出現NodeManager啟動不了的問題, vim yarn-site.xml <configuration> <property> <name>yarn.nodemanager.webapp.address</name> <value>172.172.0.11:8042</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>data1:8031</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>data1:8030</value> </property> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>data1:8032</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>
yarn.resourcemanager.hostname:8088yarn.resourcemanager.scheduler.class參數解釋:啟用的資源調度器主類,目前可用的有FIFO、CapacityScheduler和FairScheduler,默認值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduleryarn.resourcemanager.resource?tracker.client.thread?count參數解釋:處理來自NodeManager的RPC請求的Handler數目,默認值:50yarn.resourcemanager.scheduler.client.thread?count參數解釋:處理來自ApplicationMaster的RPC請求的Handler數目,默認值:50yarn.scheduler.minimum?allocation?mb/yarn.scheduler.maximum?allocation?mb參數解釋:單個可申請的最小/最大內存資源量,比如設置為1024和3072,則運行MapRedce作業時,每個Task最少可申請1024MB內存,最多可申請3072MB內存,默認值:1024/8192yarn.scheduler.minimum?allocation?vcores/yarn.scheduler.maximum?allocation?vcores參數解釋:單個可申請的最小/最大虛擬CPU個數,比如設置為1和4,則運行MapReduce作業時,每個Task最少可申請1個虛擬CPU,最多可申請4個虛擬CPU,什么是虛擬CPU,可閱讀我的這篇文章:“YARN資源調度器剖析”,默認值:1/32yarn.resourcemanager.nodes.include?path/yarn.resourcemanager.nodes.exclude?path參數解釋:NodeManager黑白名單,如果發現若干個NodeManager存在問題,比如故障率很高,任務運行失敗率高,則可以將之加入黑名單中,注意,這兩個配置參數可以動態生效,(調用一個refresh命令即可)默認值:“”yarn.resourcemanager.nodemanagers.heartbeat?interval?ms參數解釋:NodeManager心跳間隔默認值:1000(毫秒)一般需要修改的地方在下面的配置中加粗了,這個配置文件是Yarn資源調度最核心的配置,下面的是一個實例配置,有一個需要注意的配置技巧,分配的內存和CPU一定要配套,需要根據你的服務器的情況,計算最小分配內存,分配CPU等,這個如果計算不好的話,可能會造成Hadoop跑任務資源分配的時候,CPU資源用盡了,但內存還剩很多,但對于Hadoop來講,只要CPU或內存有一個占滿了,后面的任務就不能分配了,所以設置不好會造成CPU和內存資源的浪費,另外一個需要注意的地方yarn.nodemanager.webapp.address節點復制到每臺Hadoop服務器上記得把節點值的IP地址改成本機,這個地方忘了改,可能會出現NodeManager啟動不了的問題,vimyarn?site.xml<configuration><property><name>yarn.nodemanager.webapp.address</name><value>172.172.0.11:8042</value></property><property><name>yarn.resourcemanager.resource?tracker.address</name><value>data1:8031</value></property><property><name>yarn.resourcemanager.scheduler.address</name><value>data1:8030</value></property><property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value></property><property><name>yarn.resourcemanager.address</name><value>data1:8032</value></property><property><name>yarn.nodemanager.local?dirs</name><value>{hadoop.tmp.dir}/nodemanager/local
yarn.nodemanager.address
0.0.0.0:8034
yarn.nodemanager.remote-app-log-dir
h
a
d
o
o
p
.
t
m
p
.
d
i
r
/
n
o
d
e
m
a
n
a
g
e
r
/
r
e
m
o
t
e
<
/
v
a
l
u
e
>
<
/
p
r
o
p
e
r
t
y
>
<
p
r
o
p
e
r
t
y
>
<
n
a
m
e
>
y
a
r
n
.
n
o
d
e
m
a
n
a
g
e
r
.
l
o
g
?
d
i
r
s
<
/
n
a
m
e
>
<
v
a
l
u
e
>
{hadoop.tmp.dir}/nodemanager/remote</value> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>
hadoop.tmp.dir/nodemanager/remote</value></property><property><name>yarn.nodemanager.log?dirs</name><value>{hadoop.tmp.dir}/nodemanager/logs
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
mapred.job.queue.name
${user.name}
yarn.nodemanager.resource.memory-mb
116888
yarn.scheduler.minimum-allocation-mb
5120
yarn.scheduler.maximum-allocation-mb
36688
yarn.scheduler.maximum-allocation-vcores
8
yarn.nodemanager.resource.cpu-vcores
50
yarn.scheduler.minimum-allocation-vcores
2
yarn.nm.liveness-monitor.expiry-interval-ms
700000
yarn.nodemanager.health-checker.interval-ms
800000
yarn.nm.liveness-monitor.expiry-interval-ms
900000
yarn.resourcemanager.container.liveness-monitor.interval-ms
666000
yarn.nodemanager.localizer.cache.cleanup.interval-ms
688000
5)編輯capacity-scheduler.xml檔案
在上面講的yarn-site.xml 組態檔中,我們配置的調度器用的是容量調度器,就是這個節點指定的配置yarn.resourcemanager.scheduler.class,容量調度器是Hadoop默認的,另外還有公平調度器,我們可以分別講一下,看看它們有什么區別,
公平調度
公平共享調度器的核心概念是,隨著時間推移平均分配作業,這樣每個作業都能平均地共享到資源,結果是只需較少時間執行的作業能夠訪問 CPU,那些需要更長時間執行的作業中結束得遲,這樣的方式可以在 Hadoop 作業之間形成互動,而且可以讓 Hadoop 集群對提交的多種型別作業作出更大的回應,公平調度器是由Facebook開發出來的,
Hadoop的實作會創建一組池,將作業放在其中供調度器選擇,每個池會分配一組共享以平衡池中作業的資源(更多的共享意味著作業執行所需的資源更多),默認情況下,所有池的共享相等,但可以進行配置,根據作業型別提供更多或更少的共享,如果需要的話,還可以限制同時活動的作業數,以盡量減少擁堵,讓作業及時完成,
為了保證公平,每個用戶被分配一個池,在這樣的方式下,如果一個用戶提交很多作業,那么他分配的集群資源與其他用戶一樣多(與他提交的作業數無關),無論分配到池的共享有多少,如果系統未加載,那么作業收到的共享不會被使用(在可用作業之間分配),
調度器實作會追蹤系統中每個作業的計算時間,調度器還會定期檢查作業接收到的計算時間和在理想的調度器中應該收到的計算時間的差距,會使用該結果來確定任務的虧空,調度器作業接著會保證虧空最多的任務最先執行,
在 mapred-site.xml 檔案中配置公平共享,該檔案會定義對公平共享調度器行為的管理,一個 XML 檔案(即 mapred.fairscheduler.allocation.file 屬性)定義了每個池的共享的分配,為了優化作業大小,您可以設定 mapread.fairscheduler.sizebasedweight 將共享分配給作業作為其大小的函式,還有一個類似的屬性可以通過調整作業的權重讓更小的作業在 5 分鐘之后運行得更快 (mapred.fairscheduler.weightadjuster),您還可以用很多其他的屬性來調優節點上的作業負載(例如某個 TaskTracker 能管理的 maps 和 reduces 數目)并確定是否執行搶占,
容量調度器
容量調度器的原理與公平調度器有些相似,但也有一些區別,首先,容量調度是用于大型集群,它們有多個獨立用戶和目標應用程式,由于這個原因,容量調度能提供更大的控制和能力,提供用戶之間最小容量保證并在用戶之間共享多余的容量,容量調度是由 Yahoo! 開發出來的,
在容量調度中,創建的是佇列而不是池,每個佇列的 map 和 reduce 插槽數都可以配置,每個佇列都會分配一個保證容量(集群的總容量是每個佇列容量之和),
佇列處于監控之下;如果某個佇列未使用分配的容量,那么這些多余的容量會被臨時分配到其他佇列中,由于佇列可以表示一個人或大型組織,那么所有的可用容量都可以由其他用戶重新分配使用,
與公平調度另一個區別是可以調整佇列中作業的優先級,一般來說,具有高優先級的作業訪問資源比低優先級作業更快,Hadoop 路線圖包含了對搶占的支持(臨時替換出低優先級作業,讓高優先級作業先執行),但該功能尚未實作,
另一個區別是對佇列進行嚴格的訪問控制(假設佇列系結到一個人或組織),這些訪問控制是按照每個佇列進行定義的,對于將作業提交到佇列的能力和查看修改佇列中作業的能力都有嚴格限制,
可在多個 Hadoop 組態檔中配置容量調度器,佇列是在 hadoop-site.xml 中定義,在 capacity-scheduler.xml 中配置,可以在 mapred-queue-acls.xml 中配置 ACL,單個的佇列屬性包括容量百分比(集群中所有的佇列容量少于或等于 100)、最大容量(佇列多余容量使用的限制)以及佇列是否支持優先級,更重要的是,可以在運行時調整佇列優先級,從而可以在集群使用程序中改變或避免中斷的情況,
我們的實體用的容量調度器,我們看下配置引數:
mapred.capacity-scheduler.queue..capacity:
設定調度器中各個queue的容量,這里指的是占用的集群的slots的百分比,需要注意的是,所有queue的該配置項加起來必須小于等于100,否則會導致JobTracker啟動失敗,
mapred.capacity-scheduler.queue..maximum-capacity:
設定調度器中各個queue最大可以占有的容量,默認為-1表示最大可以占有集群100%的資源,和設定為100的效果是一樣的,
mapred.capacity-scheduler.queue..minimum-user-limit-percent:
當queue中多個用戶出現slots競爭的時候,限制每個用戶的slots資源的百分比,舉個例子,當minimum-user-limit-percent設定為25%時候,如果queue中有多余4個用戶同時提交job,那么調度器保證每個用戶占有的slots不超過queue中slots數的25%,默認為100表示不對用戶作限制,
mapred.capacity-scheduler.queue..user-limit-factor:
設定queue中用戶可占用queue容量的系數,默認為1表示,queue中每個用戶最多只能占有queue的容量(即mapred.capacity-scheduler.queue..capacity),因此,需要注意的是,如果queue中只有一個用戶提交job,且希望用戶在集群不繁忙時候可擴展到mapred.capacity-scheduler.queue..maximum-capacity指定的slots數,則必須相應調大user-limit-factor這個系數,
mapred.capacity-scheduler.queue..supports-priority:
設定調度器中各個queue是否支持job優先級,不用過多解釋,
mapred.capacity-scheduler.maximum-system-jobs:
設定調度器中各個queue中合起來共計可初始化后并發執行的job數,需要注意的是,各個queue會按照自己占有集群slots資源的比例(即mapred.capacity-scheduler.queue..capacity)決定每個queue最多同時并發執行的job數!舉個例子,假設maximum-system-jobs為20個,而queue1占集群10%資源,那么意味著queue1最多可同時并發運行2個job,如果碰巧是運行時間比較長的job的話,將直接導致其他新提交的job被JobTracker阻塞不能進行初始化!
mapred.capacity-scheduler.queue..maximum-initialized-active-tasks:
設定queue中所有并發運行job包含的task數的上限值,如果超過此限制,則新提交到該queue中的job會被排隊快取到磁盤上,
mapred.capacity-scheduler.queue..maximum-initialized-active-tasks-per-user:
設定queue中每個特定用戶并發運行job包含的task數的上限值,如果超過此限制,則該用戶新提交到該queue中的job會被排隊快取到磁盤上,
mapred.capacity-scheduler.queue..init-accept-jobs-factor:
設定每個queue中可容納接收的job總數(maximum-system-jobs * queue-capacity)的系數,舉個例子,如果maximum-system-jobs為20,queue-capacity為10%,init-accept-jobs-factor為10,則當queue中job總數達到10*(20*10%)=20時,新的job將被JobTracker拒絕提交,
我們下面的配置實體是配置了hadoop和spark兩個佇列,hadoop佇列分配了92%的資源,參見yarn.scheduler.capacity.root.hadoop.capacity配置,spark佇列分配了8%的資源,參見yarn.scheduler.capacity.root.spark.capacity配置:
vim capacity-scheduler.xml
yarn.scheduler.capacity.maximum-applications
10000
yarn.scheduler.capacity.maximum-am-resource-percent
0.1
yarn.scheduler.capacity.resource-calculator
org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
yarn.scheduler.capacity.node-locality-delay
-1
yarn.scheduler.capacity.root.queues
hadoop,spark
yarn.scheduler.capacity.root.hadoop.capacity
92
yarn.scheduler.capacity.root.hadoop.user-limit-factor
1
yarn.scheduler.capacity.root.hadoop.maximum-capacity
-1
yarn.scheduler.capacity.root.hadoop.state
RUNNING
yarn.scheduler.capacity.root.hadoop.acl_submit_applications
hadoop
yarn.scheduler.capacity.root.hadoop.acl_administer_queue
hadoop hadoop
yarn.scheduler.capacity.root.spark.capacity
8
yarn.scheduler.capacity.root.spark.user-limit-factor
1
yarn.scheduler.capacity.root.spark.maximum-capacity
-1
yarn.scheduler.capacity.root.spark.state
RUNNING
yarn.scheduler.capacity.root.spark.acl_submit_applications
hadoop
yarn.scheduler.capacity.root.spark.acl_administer_queue
hadoop hadoop
以上對Hadoop的組態檔都配好了,然把這臺服務器Hadoop整個目錄復制到其它機器上就可以了,記得有個地方需要修改下yarn-site.xml里yarn.nodemanager.webapp.address每臺Hadoop服務器上把IP地址改成本機,這個地方忘了改,可能會出現NodeManager啟動不了的問題,
scp -r /home/hadoop/software/hadoop2 hadoop@data2:/home/hadoop/software/
scp -r /home/hadoop/software/hadoop2 hadoop@data3:/home/hadoop/software/
scp -r /home/hadoop/software/hadoop2 hadoop@data4:/home/hadoop/software/
scp -r /home/hadoop/software/hadoop2 hadoop@data5:/home/hadoop/software/
另外還有個地方需要優化下,默認情況下Hadoop跑多個reduce可能報錯:
Failed on local exception: java.io.IOException: Couldn’t set up IO streams; Host Details : local hos
解決辦法:集群所有節點增加如下配置
#在檔案中增加
sudo vi /etc/security/limits.conf
hadoop soft nproc 100000
hadoop hard nproc 100000
重啟整個集群每個節點,重啟Hadoop集群即可,
到現在環境安裝一些準備就緒,下面就開始對Hadoop的HDFS分布式檔案系統格式化,就像我們買了新電腦磁盤需要格式化之后才能用一樣,由于我們的實體采用的NameNodeHA雙節點模式,它是依靠zookeeper來實作的,所有我們實作需要先安裝好zookeeper才行,每臺服務器上啟動zookeeper服務:
/home/hadoop/software/zookeeper-3.4.6/bin/zkServer.sh restart
在NameNode1上data1服務器上初始化zookeeper:
hdfs zkfc –formatZK
分別在5臺Hadoop集群上啟動journalnode服務,執行命令
hadoop-daemon.sh start journalnode
在NameNode1上data1服務器上格式化HDFS:
hdfs namenode -format
然后啟動這臺機器上的NameNode節點服務:
hadoop-daemon.sh start namenode
在第二個NameNode上data2執行:
hdfs namenode -bootstrapStandby
hadoop-daemon.sh start namenode
最后我們啟動Hadoop集群:
start-all.sh
啟動集群程序如下:
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [datanode1 datanode2]
datanode2: starting namenode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-namenode-datanode2.out
datanode1: starting namenode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-namenode-datanode1.out
datanode2: Java HotSpot? 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
datanode2: Java HotSpot? 64-Bit Server VM warning: CMSFullGCsBeforeCompaction is deprecated and will likely be removed in a future release.
datanode1: Java HotSpot? 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
datanode1: Java HotSpot? 64-Bit Server VM warning: CMSFullGCsBeforeCompaction is deprecated and will likely be removed in a future release.
172.172.0.12: starting datanode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-datanode-datanode2.out
172.172.0.11: starting datanode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-datanode-datanode1.out
172.172.0.14: starting datanode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-datanode-datanode4.out
172.172.0.13: starting datanode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-datanode-datanode3.out
172.172.0.15: starting datanode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-datanode-datanode5.out
Starting journal nodes [172.172.0.11 172.172.0.12 172.172.0.13 172.172.0.14 172.172.0.15]
172.172.0.14: starting journalnode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-journalnode-datanode4.out
172.172.0.11: starting journalnode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-journalnode-datanode1.out
172.172.0.13: starting journalnode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-journalnode-datanode3.out
172.172.0.15: starting journalnode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-journalnode-datanode5.out
172.172.0.12: starting journalnode, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-journalnode-datanode2.out
Starting ZK Failover Controllers on NN hosts [datanode1 datanode2]
datanode1: starting zkfc, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-zkfc-datanode1.out
datanode2: starting zkfc, logging to /home/hadoop/software/hadoop2/logs/hadoop-hadoop-zkfc-datanode2.out
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/software/hadoop2/logs/yarn-hadoop-resourcemanager-datanode1.out
172.172.0.15: starting nodemanager, logging to /home/hadoop/software/hadoop2/logs/yarn-hadoop-nodemanager-datanode5.out
172.172.0.14: starting nodemanager, logging to /home/hadoop/software/hadoop2/logs/yarn-hadoop-nodemanager-datanode4.out
172.172.0.12: starting nodemanager, logging to /home/hadoop/software/hadoop2/logs/yarn-hadoop-nodemanager-datanode2.out
172.172.0.13: starting nodemanager, logging to /home/hadoop/software/hadoop2/logs/yarn-hadoop-nodemanager-datanode3.out
172.172.0.11: starting nodemanager, logging to /home/hadoop/software/hadoop2/logs/yarn-hadoop-nodemanager-datanode1.out
如果是停止集群的話用這個命令stop-all.sh
停止集群程序如下:
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
Stopping namenodes on [datanode1 datanode2]
datanode1: stopping namenode
datanode2: stopping namenode
172.172.0.12: stopping datanode
172.172.0.11: stopping datanode
172.172.0.15: stopping datanode
172.172.0.13: stopping datanode
172.172.0.14: stopping datanode
Stopping journal nodes [172.172.0.11 172.172.0.12 172.172.0.13 172.172.0.14 172.172.0.15]
172.172.0.11: stopping journalnode
172.172.0.13: stopping journalnode
172.172.0.12: stopping journalnode
172.172.0.15: stopping journalnode
172.172.0.14: stopping journalnode
Stopping ZK Failover Controllers on NN hosts [datanode1 datanode2]
datanode2: stopping zkfc
datanode1: stopping zkfc
stopping yarn daemons
stopping resourcemanager
172.172.0.13: stopping nodemanager
172.172.0.12: stopping nodemanager
172.172.0.15: stopping nodemanager
172.172.0.14: stopping nodemanager
172.172.0.11: stopping nodemanager
no proxyserver to stop
啟動成功后每個節點上會看到對應Hadoop行程,NameNode1主節點上看到的行程如下:
5504 ResourceManager
4912 NameNode
5235 JournalNode
5028 DataNode
5415 DFSZKFailoverController
90 QuorumPeerMain
5628 NodeManager
ResourceManager就是Yarn資源調度的行程,NameNode是HDFS的NameNode主節點,
JournalNode是JournalNode節點,DataNode是HDFS的DataNode從節點和資料節點,DFSZKFailoverController是Hadoop中HDFS NameNode HA實作的中心組件,它負責整體的故障轉移控制等,它是一個守護行程,通main()方法啟動,繼承自ZKFailoverController,QuorumPeerMain是zookeeper的行程,NodeManager是Yarn在每臺服務器上的節點管理器,是運行在單個節點上的代理,它管理Hadoop集群中單個計算節點,功能包括與ResourceManager保持通信,管理Container的生命周期、監控每個Container的資源使用(記憶體、CPU等)情況、追蹤節點健康狀況、管理日志和不同應用程式用到的附屬服務等,
NameNode2主節點2上的行程如下:
27232 NameNode
165 QuorumPeerMain
27526 DFSZKFailoverController
27408 JournalNode
27313 DataNode
27638 NodeManager
會少很多行程,因為做主節點的HA,也會有一個NameNode行程,如果沒有,說明這個節點的NameNode掛了,我們需要重啟它,并需要查看掛掉的原因,
下面是其中一臺DataNode上的行程,沒有NameNode行程了:
114 QuorumPeerMain
17415 JournalNode
17320 DataNode
17517 NodeManager
除了我們能看到集群每個節點的行程,并且根據行程就能判斷哪個集群節點是不是有問題,但不是很方便,需要每臺服務器逐個來看,Hadoop提供了Web界面,非常方便查看集群的狀況,一個是Yarn的Web界面,在ResourceManager行程在的哪臺機器上訪問,也就是Yarn的主行程,訪問地址是http://namenodeip:8088/,埠是8088,當然這個是默認端,可以通過組態檔來改,不過一般不和其它埠沖突的話,是不需要的改的,看另一個是兩個NameNode的Web界面,埠是50070,能非常方便查看HDFS集群狀態,總空間、使用空間、剩余空間,每臺服務器節點情況一目了然,訪問地址是:http://namenodeip:50070/
我們來看下這兩個界面:
Yarn的Web界面如圖3.1所示:

圖3.1 Yarn的Web界面截圖
NameNode的Web界面如圖3.2所示:

圖3.2 NameNode的Web界面截圖
三.Hadoop常用操作
Hadoop操作命令主要分Hadoop集群啟動維護、HDFS檔案操作命令、Yarn資源調度相關命令,我們分別來講一下,
1.Hadoop集群啟動維護
#整體啟動Hadoop集群:
start-all.sh
#整體停止Hadoop集群:
stop-all.sh
#單獨啟動namenode服務:
hadoop-daemon.sh start namenode
#單獨啟動datanode服務:
hadoop-daemon.sh start datanode
#在某臺機器上單獨啟動nodemanager服務:
yarn-daemon.sh start nodemanager
#單獨啟動historyserver
mr-jobhistory-daemon.sh start historyserver
2.HDFS檔案操作命令
操作使用hadoop dfs或者 hadoop fs都可以,建了簡化操作時間,建議使用hadoop fs,
1)列出HDFS下的檔案
hadoop fs -ls /
hadoop fs -ls /ods/kc/dim/ods_kc_dim_product_tab/
2) 查看檔案的尾部的記錄
hadoop fs -tail /ods/kc/dim/ods_kc_dim_product_tab/product.txt
3)上傳本地檔案到hadoop的hdfs上
hadoop fs -put product.txt /ods/kc/dim/ods_kc_dim_product_tab/
4)把hadoop上的檔案下載到本地系統中
hadoop fs -get /ods/kc/dim/ods_kc_dim_product_tab/product.txt product.txt
5)洗掉檔案和洗掉目錄
hadoop fs -rm /ods/kc/dim/ods_kc_dim_product_tab/product.txt
hadoop fs -rmr /ods/kc/dim/ods_kc_dim_product_tab/
6)查看檔案
#謹慎使用,尤其當檔案內容太長的話,
hadoop fs -cat /ods/kc/dim/ods_kc_dim_product_tab/product.txt
7)建立目錄
hadoop fs -mkdir /ods/kc/dim/ods_kc_dim_product_tab/(目錄/目錄名)
只能一級一級的建目錄,建完一級才能建下一級,如果-mkdir –p價格-p引數會自動把沒有檔案夾都創建上,
8)本集群內復制檔案
hadoop fs -cp 源路徑 路徑
9)跨集群對拷,適合做集群資料遷移使用
hadoop distcp hdfs://master1/ods/ hdfs://master2/ods/
10)通過Hadoop命令把多個檔案的內容合并起來
#hadoop fs -getmerge 位于hdfs中的原檔案(里面有多個檔案) 合并后的檔案名(本地)
例如:
hadoop fs -getmerge /ods/kc/dim/ods_kc_dim_product_tab/* all.txt
3.Yarn資源調度相關命令
1)application
使用語法:yarn application [options] #列印報告,申請和殺死任務
-appStates #與-list一起使用,可根據輸入的逗號分隔的應用程式狀態串列來過濾應用程式,有效的應用程式狀態可以是以下之一:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
-appTypes #與-list一起使用,可以根據輸入的逗號分隔的應用程式型別串列來過濾應用程式,
-list #列出RM中的應用程式,支持使用-appTypes來根據應用程式型別過濾應用程式,并支持使用-appStates來根據應用程式狀態過濾應用程式,
-kill #終止應用程式,
-status #列印應用程式的狀態,
2)applicationattempt
使用語法:yarn applicationattempt [options] #列印應用程式嘗試的報告
-help #幫助
-list #獲取到應用程式嘗試的串列,其回傳值ApplicationAttempt-Id 等于
-status #列印應用程式嘗試的狀態,
3)classpath
使用語法:yarn classpath #列印需要得到Hadoop的jar和所需要的lib包路徑
4)container
使用語法:yarn container [options] #列印container(s)的報告
-help #幫助
-list #應用程式嘗試的Containers串列
-status #列印Container的狀態
5)jar
使用語法:yarn jar [mainClass] args… #運行jar檔案,用戶可以將寫好的YARN代碼打包成jar檔案,用這個命令去運行它,
6)logs
使用語法:yarn logs -applicationId [options] #轉存container的日志,
-applicationId #指定應用程式ID,應用程式的ID可以在yarn.resourcemanager.webapp.address配置的路徑查看(即:ID)
-appOwner #應用的所有者(如果沒有指定就是當前用戶)應用程式的ID可以在yarn.resourcemanager.webapp.address配置的路徑查看(即:User)
-containerId #Container Id
-help #幫助
-nodeAddress #節點地址的格式:nodename:port (埠是組態檔中:yarn.nodemanager.webapp.address引數指定)
7)node
使用語法:yarn node [options] #列印節點報告
-all #所有的節點,不管是什么狀態的,
-list #列出所有RUNNING狀態的節點,支持-states選項過濾指定的狀態,節點的狀態包含:NEW,RUNNING,UNHEALTHY,DECOMMISSIONED,LOST,REBOOTED,支持–all顯示所有的節點,
-states #和-list配合使用,用逗號分隔節點狀態,只顯示這些狀態的節點資訊,
-status #列印指定節點的狀態,
8)queue
使用語法:yarn queue [options] #列印佇列資訊
-help #幫助
-status # 列印佇列的狀態
9)daemonlog
使用語法:
yarn daemonlog -getlevel host:httpport
yarn daemonlog -setlevel host:httpport
-getlevel host:httpport #列印運行在host:port的守護行程的日志級別,這個命令內部會連接http://host:port/logLevel?log=
-setlevel host:httpport #設定運行在host:port的守護行程的日志級別,這個命令內部會連接http://host:port/logLevel?log=
10)nodemanager
使用語法:yarn nodemanager #啟動nodemanager
11)proxyserver
使用語法:yarn proxyserver #啟動web proxy server
12)resourcemanager
使用語法:yarn resourcemanager [-format-state-store] #啟動ResourceManager
-format-state-store # RMStateStore的格式. 如果過去的應用程式不再需要,則清理RMStateStore, RMStateStore僅僅在ResourceManager沒有運行的時候,才運行RMStateStore
13)rmadmin
使用語法: #運行Resourcemanager管理客戶端
yarn rmadmin [-refreshQueues]
[-refreshNodes]
[-refreshUserToGroupsMapping]
[-refreshSuperUserGroupsConfiguration]
[-refreshAdminAcls]
[-refreshServiceAcl]
[-getGroups [username]]
[-transitionToActive [–forceactive] [–forcemanual] ]
[-transitionToStandby [–forcemanual] ]
[-failover [–forcefence] [–forceactive] ]
[-getServiceState ]
[-checkHealth ]
[-help [cmd]]
-refreshQueues #多載佇列的ACL,狀態和調度器特定的屬性,ResourceManager將多載mapred-queues組態檔
-refreshNodes #動態重繪dfs.hosts和dfs.hosts.exclude配置,無需重啟NameNode,
#dfs.hosts:列出了允許連入NameNode的datanode清單(IP或者機器名)
#dfs.hosts.exclude:列出了禁止連入NameNode的datanode清單(IP或者機器名)
#重新讀取hosts和exclude檔案,更新允許連到Namenode的或那些需要退出或入編的Datanode的集合,
-refreshUserToGroupsMappings #重繪用戶到組的映射,
-refreshSuperUserGroupsConfiguration #重繪用戶組的配置
-refreshAdminAcls #重繪ResourceManager的ACL管理
-refreshServiceAcl #ResourceManager多載服務級別的授權檔案,
-getGroups [username] #獲取指定用戶所屬的組,
-transitionToActive [–forceactive] [–forcemanual] #嘗試將目標服務轉為 Active 狀態,如果使用了–forceactive選項,不需要核對非Active節點,如果采用了自動故障轉移,這個命令不能使用,雖然你可以重寫–forcemanual選項,你需要謹慎,
-transitionToStandby [–forcemanual] #將服務轉為 Standby 狀態. 如果采用了自動故障轉移,這個命令不能使用,雖然你可以重寫–forcemanual選項,你需要謹慎,
-failover [–forceactive] #啟動從serviceId1 到 serviceId2的故障轉移,如果使用了-forceactive選項,即使服務沒有準備,也會嘗試故障轉移到目標服務,如果采用了自動故障轉移,這個命令不能使用,
-getServiceState #回傳服務的狀態,(注:ResourceManager不是HA的時候,時不能運行該命令的)
-checkHealth #請求服務器執行健康檢查,如果檢查失敗,RMAdmin將用一個非零標示退出,(注:ResourceManager不是HA的時候,時不能運行該命令的)
-help [cmd] #顯示指定命令的幫助,如果沒有指定,則顯示命令的幫助,
14)scmadmin
使用語法:yarn scmadmin [options] #運行共享快取管理客戶端
-help #查看幫助
-runCleanerTask #運行清理任務
15)sharedcachemanager
使用語法:yarn sharedcachemanager #啟動共享快取管理器
16)timelineserver
使用語法:yarn timelineserver #啟動timelineserver,
總結
Hadoop平臺搭建好了,里面本身是沒有資料的,所以下一步的作業就是建設資料倉庫,而資料庫是以Hive為主流的,有關Hive的更多內容請點擊下方鏈接閱讀
Hive資料倉庫實戰
此文章還有對應的配套視頻,其它更多精彩文章請大家下載充電了么app,可獲取千萬免費好課和文章,配套新書教材請看陳敬雷新書:《分布式機器學習實戰》(人工智能科學與技術叢書)
【新書介紹】
《分布式機器學習實戰》(人工智能科學與技術叢書)【陳敬雷編著】【清華大學出版社】
新書特色:深入淺出,逐步講解分布式機器學習的框架及應用配套個性化推薦演算法系統、人臉識別、對話機器人等實戰專案
【新書介紹視頻】
分布式機器學習實戰(人工智能科學與技術叢書)新書【陳敬雷】
視頻特色:重點對新書進行介紹,最新前沿技術熱點剖析,技術職業規劃建議!聽完此課你對人工智能領域將有一個嶄新的技術視野!職業發展也將有更加清晰的認識!
【精品課程】
《分布式機器學習實戰》大資料人工智能AI專家級精品課程
【免費體驗視頻】:
人工智能百萬年薪成長路線/從Python到最新熱點技術
從Python編程零基礎小白入門到人工智能高級實戰系列課
視頻特色: 本系列專家級精品課有對應的配套書籍《分布式機器學習實戰》,精品課和書籍可以互補式學習,彼此相互補充,可以大大提高學習效率,課程核心內容包括互聯網公司大資料和人工智能那些事、大資料演算法系統架構、大資料基礎、Python編程、Java編程、Scala編程、Docker容器、Mahout分布式機器學習平臺、Spark分布式機器學習平臺、分布式深度學習框架和神經網路演算法、自然語言處理演算法、工業級完整系統實戰(推薦演算法系統實戰、人臉識別實戰、對話機器人實戰)、就業/面試技巧/職業生涯規劃/職業晉升指導等內容,
【充電了么公司介紹】
充電了么App是專注上班族職業培訓充電學習的在線教育平臺,
專注作業職業技能提升和學習,提高作業效率,帶來經濟效益!今天你充電了么?
充電了么App官網下載地址
https://a.app.qq.com/o/simple.jsp?pkgname=com.charged.app
功能特色:
【全行業職位】 - 專注職場上班族職業技能提升
【牛人課堂】 - 學習牛人的作業經驗
【精品閱讀】 - 技能文章興趣閱讀
【精短課程】 - 高效學習知識
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/253585.html
標籤:其他
上一篇:程式員狂怒:薪水被應屆生倒掛了,很不爽,天王老子也別想留住我!
下一篇:hadoop之yarn
