Hadoop2.7.4完全分散式環境搭建
軟體版本
- 虛擬機器管理軟體:VMware WorkStation Pro 12.0
- 作業系統:CentOS 6.7
- Hadoop:Hadoop 2.7.4
- JDK:jdk-8u65-linux-x64.tar.gz
一、環境準備
1、 修改各個節點主機名:vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1
2、修改主機名和IP的對映關係:vi /etc/hosts
192.168.66.201 node1
192.168.66.202 node2
192.168.66.203 node3
3、設定ssh免密登入
- 在node1上執行:ssh-keygen -t rsa (四個回車),生成公鑰和私鑰
- 將公鑰拷貝到要免密登陸的目標節點上
-- ssh-copy-id node2
-- ssh-copy-id node3
注意:生成的金鑰在目錄:/root/.ssh
4、檢視防火牆狀態(必須處於關閉狀態)
檢視防火牆狀態:service iptables status
關閉防火牆:service iptables stop
檢視防火牆開機啟動狀態 :chkconfig iptables --list
關閉防火牆開機啟動 :chkconfig iptables off
5、JDK 環境安裝
a、遞迴建立目錄
- mkdir -p /export/server
- mkdir -p /export/data
b、上傳jdk安裝包:jdk-8u65-linux-x64.tar.gz
c、tar -zxvf jdk-8u65-linux-x64.tar.gz -C /export/server/
d、配置環境變數:vi /etc/profile
export JAVA_HOME=/export/server/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
e、重新整理配置檔案:source /etc/profile(暫時可不操作)
6、系統時間同步(兩種方式)
第一種:手動同步
a、安裝ntp伺服器:yum -y install ntpdate
b、各節點執行:ntpdate cn.pool.ntp.org
第二種:使用NameNode當作伺服器
a、安裝ntp伺服器:yum -y install ntpdate
b、在node1上與網路伺服器同步:ntpdate cn.pool.ntp.org
c、DateName節點上開啟ntp服務:service ntpd start
d、各節點同步Namenode伺服器時間:ntpdate node1
二、Hadoop 叢集安裝
提示:hadoop的核心配置檔案,有預設的配置檔案core-default.xml、hdfs-default.xml、mapred-default.xml、yarn-default.xml
core-default.xml,且與對應在目錄/export/server/hadoop-2.7.4/etc/hadoop下的配置檔案功能相同,但是目錄/export/server/hadoop-2.7.4/etc/hadoop下的配置檔案配置的屬性優先順序更高,Hadoop叢集啟動時優先讀取,如果在core-site.xml裡沒有配置屬性,則自動讀取預設配置檔案裡的屬性的值。
1、安裝Hadoop
a、上傳Hadoop安裝包到/export/server:hadoop-2.7.4-with-centos-6.7.tar.gz
b、當前目錄解壓:tar -zxvf hadoop-2.7.4-with-centos-6.7.tar.gz
hadoop-2.7.4-with-centos-6.7.tar.gz解壓後目錄結構如下:
bin:Hadoop 最基本的管理指令碼和使用指令碼的目錄,這些指令碼是 sbin 目錄下管理指令碼的基礎實現,使用者可以直接使用這些指令碼管理和使用Hadoop
etc:Hadoop配置檔案所在的目錄,包括core-site,xml、hdfs-site.xml、 mapred-site.xml 等從 Hadoop1.0 繼承而來的配置檔案和 yarn-site.xml 等 Hadoop2.0新增的配置檔案
include:對外提供的程式設計庫標頭檔案(具體動態庫和靜態庫在lib目錄中),這些標頭檔案均是用C++定義的,通常用於C++程式訪問HDFS或者編寫MapReduce 程式
lib:該目錄包含了Hadoop對外提供的程式設計動態庫和靜態庫,與include目錄中的標頭檔案結合使用
libexec:各個服務對用的shell配置檔案所在的目錄,可用於配置日誌輸出、啟動引數(比如JVM引數)等基本資訊
sbin:Hadoop管理指令碼所在的目錄,主要包含HDFS和YARN中各類服務的啟動/關閉指令碼
share:Hadoop各個模組編譯後的jar包所在的目錄
2、Hadoop 配置檔案修改
a、vi hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_65
解釋:Hadoop執行時依賴JDK的環境,JAVA_HOME是必須設定的。且需要在配置檔案hadoop-env.sh中指定JDK安裝目錄,因為Hadoop 即使是在本機上執行,它也是把當前的執行環境當成遠端伺服器,也就是說之前系統環境變數對Haddop來說時無效的。
b、vi core-site.xml
<!-- 用於設定 Hadoop 的檔案系統,由 URI 指定 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 配置 Hadoop 的臨時目錄,預設/export/data/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/export/data/hadoop</value>
</property>
c、vi hdfs-site.xml
<!-- 指定 HDFS 副本的數量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- secondary namenode 所在主機的 ip 和埠-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.66.202:50090</value>
</property>
d、vi mapred-site.xml
第一步:cp mapred-site.xml.template mapred-site.xml
第二步:vi mapred-site.xml
<!-- 指定 mr 執行時框架,這裡指定在 yarn 上,預設是 local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
解釋:目錄/export/server/hadoop-2.7.4/etc/hadoop沒有mapred-site.xml,但提供了一個mapred-site.xml.template,因此只需要拷貝一份模板配置檔案,並修改成mapred-site.xml即可。
e、vi yarn-site.xml
<!-- 指定 YARN 的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<!-- NodeManager上執行的附屬服務。需配置成mapreduce_shuffle,才可執行MapReduce 程式預設值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
f、vi slaves
node1
node2
node3
slaves檔案裡面記錄的是叢集主機名,一般有以下兩種作用:
第一種:配合一鍵啟動指令碼如start-dfs.sh、stop-yarn.sh用來進行叢集啟動。這時候slaves檔案裡面的主機標記的就是從節點角色所在的機器。
第二種:可以配合hdfs-site.xml裡面dfs.hosts屬性形成一種白名單機制,配置如下:
<property>
<!-- dfs.hosts指定一個檔案 -->
<name> dfs.hosts </name>
<!-- 必須指定檔案的完整路徑名允許連線到NameNode的主機列表,如果值為空,則允許所有主機 -->
<value> /export/server/hadoop-2.7.4/etc/hadoop/slaves </value>
</property>
g、Hadoop 環境變數
配置環境變數:vi /etc/profile
export HADOOP_HOME=/export/server/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重新整理配置檔案: source /etc/profile(暫時可不操作)
h、拷貝Hadoop 解壓包及系統配置檔案profile到其他節點所在主機,即node2、node3
scp –r /export/server/hadoop-2.7.4 [email protected]:/export/server
scp –r /export/server/hadoop-2.7.4 [email protected]:/export/server
scp –r /etc/profile [email protected]:/etc
scp –r /etc/profile [email protected]:/etc
各節點所在主機重新整理配置檔案:source /etc/profile(必須操作)
三、Hadoop 叢集啟動
首次啟動HDFS時,必須對其進行格式化操作。本質上是一些清理和準備工作,因為此時的HDFS在物理上還是不存在的
格式化命令:hdfs namenode –format(hadoop namenode –format已過時)
1、單節點逐個啟動
主節點上啟動HDFS NameNode:hadoop-daemon.sh start namenode
各從節點上啟動HDFS DataNode:hadoop-daemon.sh start datanode
主節點上啟動YARN ResourceManager:yarn-daemon.sh start resourcemanager
各從節點上啟動YARN nodemanager:yarn-daemon.sh start nodemanager
提示:$HADOOP_PREFIX/sbin/目錄下。如果想要停止某個節點上某個角色,只需要把命令中的start改為stop即可
2、指令碼一鍵啟動
啟動HDFS叢集:$HADOOP_PREFIX/sbin/start-dfs.sh
啟動YARN叢集: $HADOOP_PREFIX/sbin/start-yarn.sh
同時啟動HDFS、YARN叢集:$HADOOP_PREFIX/sbin/stop-yarn.sh(不推薦,仍可使用)
停止HDFS叢集:$HADOOP_PREFIX/sbin/stop-dfs.sh、stop-yarn.sh
停止YARN叢集:$HADOOP_PREFIX/sbin/stop-yarn.sh
過時的指令碼:stop-all.sh(不可使用)
3、訪問叢集 web-ui
一旦Hadoop叢集啟動並執行,可以通過web-ui進行叢集檢視,如下所述:
NameNode http://nn_host:port/ 預設50070
訪問URL:http:node1:50070或者http:192.169.66.201:50070
ResourceManager http://rm_host:port/ 預設 8088
訪問URL:http:node1:8088或者http:192.169.66.201:8088
提示:需要配置本地主機名和IP的對映關係,才能使用NameNode http://nn_host:port/ 形式訪問
192.168.66.201 node1
192.168.66.202 node2
192.168.66.203 node3
提示:使用命令驗證叢集是否正常啟動:jps,需要關注各節點的職責、身份
<!-- 這是主節點namenode的狀態資訊 -->
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode
四、操作HDFS常用的Shell命令介紹
1、顯示檔案、目錄資訊:ls
用法:hadoop fs -ls [-d] [-h] [-R] <args>
-d:目錄列為純檔案
-h:以人類可讀的方式格式化檔案大小
-R:遞迴列出遇到的子目錄
例子:hadoop fs -ls -R /user/hive/warehouse/
2、建立目錄:mkdir
用法:hadoop fs -mkdir [-p] <paths>
-p:遞迴建立目錄
例子:hadoop fs -mkdir /user/hadoop/dir1
3、上傳檔案:put
功能:將單個src或多個srcs從本地檔案系統複製到目標檔案系統
用法:hadoop fs -put [-f] [-p] <localsrc1> [ localsrc2. ]
-p:保留訪問和修改時間,所有權和許可權。(假設許可權可以跨檔案系統傳播)
-f:覆蓋目標(如果已存在)
例子:
- hadoop fs -put localfile /user/hadoop/hadoopfile
-
hadoop fs -D dfs.replication=1 -put localfile /user/hadoop/hadoopfile 上傳檔案的同時指定副本數為1
4、下載檔案:get
功能:將檔案複製到本地檔案系統
用法:hadoop fs -get [-p] <src> <localdst>
-p:保留訪問和修改時間,所有權和許可權。(假設許可權可以跨檔案系統傳播)
-f:覆蓋目標(如果已存在)
例子:hadoop fs -get hdfs://node1:9000/wordcount/input/wordcount.log
注意:hadoop fs -get hdfs://node1:9000/wordcount/input/ wordcount.log 這種形式是先建立wordcount.log目錄,再將wordcount.log檔案上傳到wordcount.log目錄下
5、追加檔案內容:-appendToFile
功能:將單個src或多個srcs從本地檔案系統附加到目標檔案系統的末尾
用法:hadoop fs -appendToFile <localsrc> ... <dst>
例子:hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile
6、檢視檔案內容:cat
功能:顯示檔案內容到stdout
用法:hadoop fs -cat URI [URI ...]
例子:hadoop fs -cat localfile /user/hadoop/hadoopfile
7、跟追日誌:tail
功能:顯示檔案的最後一千位元組到stdout
用法:hadoop fs -tail [-f] URI
-f:持續輸出檔案增加的資料資訊
例子:hadoop fs -tail /hadoop/hadoopfile
8、拷貝檔案到本地:copyToLocal
功能:複製HDFS系統檔案到本地檔案系統中,與get命令類似,但目標只能是本地檔案
用法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
例子:hadoop fs -copyToLocal /dim_time_dat.txt /root/data/
9、拷貝檔案到HDFS:copyFromLocal
功能:複製本地系統檔案到HDFS檔案系統中,與put命令類似,但原始檔只能是本地檔案
用法:hadoop fs -copyFromLocal <localsrc> URI
-p:保留訪問和修改時間,所有權和許可權。(假設許可權可以跨檔案系統傳播)
-f:覆蓋目標(如果已存在)
例子:hadoop fs -copyFromLocal -f dim_time_dat.txt /
10、拷貝檔案(同系統中):cp
功能:將檔案從源複製到目標。此命令也允許多個源,在這種情況下,目標必須是目錄
用法:hadoop fs -cp [-f] [-p | -p URI [URI ...] <dest>
-p:如果目標已存在,則-f選項將覆蓋目標
例子:hadoop fs -cp -f /dim_time_dat.txt /
11、合併檔案:getmerge
功能:合併下載多個檔案
用法:hadoop fs -getmerge [-nl] <src> <localdst>
例子:hadoop fs -getmerge -nl /a.txt /b.txt /c.txt
12、刪除檔案、目錄:rm
功能:刪除指定的檔案。只刪除非空目錄和檔案。
用法:hadoop fs -rm [-f] [-r | -R] [-skipTrash] URI [URI ...]
-r:選項以遞迴方式刪除目錄及其下的任何內容
例子:hadoop fs -rm -r /a.txt /b.txt /c.txt
13、修改HDFS檔案的副本數:setrep
功能:改變一個檔案的副本系數;如果path是目錄,則命令以遞迴方式更改以path為根的目錄樹下的所有檔案的複製因子
用法:hadoop fs -setrep [-R] [-w] <numReplicas> <path>
-w:標誌請求命令等待複製完成。這可能需要很長時間
-R :選項用於遞迴改變目錄下所有檔案的副本系數
例子:hadoop fs -setrep -w 3 /dim_time_dat.txt
hadoop fsck -locations:檢視當前hdfs的副本數
14、檢視HDFS檔案系統可用空間:df
用法:hadoop fs -df [-h] URI [URI ...]
例子:hadoop fs -df -h /
15、顯示檔案大小:du
用法:hadoop fs -du [-s] [-h] URI [URI ...]
-s選項將導致顯示檔案長度的彙總摘要,而不是單個檔案。
-h選項將以“人類可讀”的方式格式化檔案大小(例如64.0m而不是67108864)
例子:hadoop fs -du -s /dim_time_dat.txt
五:格式化HDFS檔案系統
前提條件:關閉HDFS叢集、YARN叢集(否則格式化不成功)
1、刪除所有節點的資料目錄
rm -rf /export/data/hadoop
2、刪除所有節點的日誌檔案
rm -rf /export/server/hadoop-2.7.4/logs/*
3、在node1節點上,重新格式化
hdfs namenode -format