1. 程式人生 > >Hadoop2.7.4完全分散式環境搭建

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免密登入

  1. 在node1上執行:ssh-keygen -t rsa  (四個回車),生成公鑰和私鑰
  2. 將公鑰拷貝到要免密登陸的目標節點上

     --    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/serverhadoop-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