1. 程式人生 > >Hadoop2.7.4叢集搭建

Hadoop2.7.4叢集搭建

HDFS:分散式檔案系統

MAPREDUCE:分散式運算程式開發框架

HIVE:基於HADOOP的分散式資料倉庫,提供基於SQL的查詢資料操作

HBASE:基於HADOOP的分散式海量資料庫

ZOOKEEPER:分散式協調服務基礎元件

Mahout:基於mapreduce/spark/flink等分散式運算框架的機器學習演算法庫

Oozie:工作流排程框架

Sqoop:資料匯入匯出工具(比如用於mysql和HDFS之間)

Flume:日誌資料採集框架

Impala:基於Hadoop的實時分析

HADOOP叢集具體來說包含兩個叢集:HDFS叢集和YARN叢集,兩者邏輯上分離,但物理上常在一起。

HDFS叢集負責海量資料的儲存,叢集中的角色主要有: NameNode、DataNode、SecondaryNameNode

YARN叢集負責海量資料運算時的資源排程,叢集中的角色主要有: ResourceManager、NodeManager

一、伺服器系統設定

設定主機名

vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node1

配置IP、主機名對映

vi /etc/hosts
192.168.182.201 node1
192.168.182.202 node2
192.168.182.203 node3

配置ssh免密登陸 #生成ssh免登陸金鑰

ssh-keygen -t rsa (四個回車)

執行完這個命令後,會生成id_rsa(私鑰)、id_rsa.pub(公鑰)

將公鑰拷貝到要免密登陸的目標機器上

ssh-copy-id node2

配置防火牆

#檢視防火牆狀態

service iptables status

#關閉防火牆

service iptables stop

#檢視防火牆開機啟動狀態

chkconfig iptables --list

#關閉防火牆開機啟動

chkconfig iptables off

同步時間

#手動同步叢集各機器時間

date -s "2017-03-03 03:03:03"  
yum install ntpdate #預設已經安裝好

#網路同步時間(推薦)

ntpdate cn.pool.ntp.org

二、JDK 環境安裝

#上傳jdk安裝包

#解壓安裝包

tar zxvf jdk-8u65-linux-x64.tar.gz -C /export/server

#配置環境變數

vi /etc/profile 
export JAVA_HOME=/root/apps/jdk1.8.0_65 
export PATH=$PATH:$JAVA_HOME/bin

#重新整理配置

source /etc/profile

三、Hadoop 安裝包目錄結構

解壓到/export/server/中:

tar -zxvf 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包所在的目錄。

四、Hadoop 配置檔案修改

4.1 hadoop-env.sh

檔案中設定的是Hadoop執行時需要的環境變數。JAVA_HOME是必須設定的,即使我們當前的系統中設定了 JAVA_HOME,它也是不認識的,因為 Hadoop 即使是在本機上執行,它也是把當前的執行環境當成遠端伺服器。

vi hadoop-env.sh
export JAVA_HOME=/export/server/jdk1.8.0_65

4.2 core-site.xml

hadoop的核心配置檔案,有預設的配置項core-default.xml。

core-default.xml 與 core-site.xml 的功能是一樣的,如果在core-site.xml裡沒有配置的屬性,則會自動會獲取core-default.xml裡的相同屬性的值。

/export/server/hadoop-2.7.4/etc/hadoop/core-site.xml

<!-- 用於設定 Hadoop 的檔案系統,由 URI 指定 --> 
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1:9000</value>
</property>
<!-- 配置 Hadoop 的臨時目錄,預設/tmp/hadoop-${user.name} --> 
<property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop</value>
</property>

4.3 hdfs-site.xml

HDFS的核心配置檔案,有預設的配置項hdfs-default.xml。

hdfs-default.xml 與 hdfs-site.xml 的功能是一樣的,如果在 hdfs-site.xml裡沒有配置的屬性,則會自動會獲取hdfs-default.xml裡的相同屬性的值。

/export/server/hadoop-2.7.4/etc/hadoop/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>node2:50090</value>
</property>

4.4 mapred-site.xml

MapReduce的核心配置檔案,有預設的配置項mapred-default.xml。 mapred-default.xml與mapred-site.xml的功能是一樣的,如果在mapred-site.xml裡沒有配置的屬性,則會自動會獲取mapred-default.xml裡的相同屬性的值。

/export/server/hadoop-2.7.4/etc/hadoop/該目錄中沒有mapred-site.xml,將mapred-site.xml.template改名為mapred-site.xml。

<!-- 指定 mr 執行時框架,這裡指定在 yarn 上,預設是 local --> 
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

4.5 yarn-site.xml

YARN的核心配置檔案,有預設的配置項yarn-default.xml。

yarn-default.xml 與 yarn-site.xml 的功能是一樣的,如果在 yarnsite.xml裡沒有配置的屬性,則會自動會獲取yarn-default.xml裡的相同屬性的值。

/export/server/hadoop-2.7.4/etc/hadoop/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>

4.6 slaves

slaves檔案裡面記錄的是叢集主機名。一般有以下兩種作用:

一是:配合一鍵啟動指令碼如start-dfs.sh、stop-yarn.sh用來進行叢集啟動。這時候slaves檔案裡面的主機標記的就是從節點角色所在的機器。

二是:可以配合hdfs-site.xml裡面dfs.hosts屬性形成一種白名單機制。dfs.hosts指定一個檔案,其中包含允許連線到NameNode的主機列表。必須指定檔案的完整路徑名。如果值為空,則允許所有主機。例如:

<property>
    <name>dfs.hosts</name>
    <value>/export/server/hadoop-2.7.4/etc/hadoop/slaves</value>
</property>

那麼所有在slaves中的主機才可以加入的叢集中。

五、Hadoop 環境變數

新增配置環境變數的配置檔案:

vi /etc/profile
export JAVA_HOME=/export/server/jdk1.8.0_65 
export HADOOP_HOME=/export/server/hadoop-2.7.4 
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin 

儲存配置檔案,重新整理配置檔案:

source /etc/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啟動方式

要啟動Hadoop叢集,需要啟動HDFS和YARN兩個叢集。注意:首次啟動HDFS時,必須對其進行格式化操作。本質上是一些清理和準備工作,因為此時的HDFS在物理上還是不存在的。

hdfs namenode-format或者hadoop namenode -format

重新格式化:

1、備份資料

2、刪除日誌目錄  /export/server/hadoop-2.7.4/logs

3、刪除資料目錄   rm -rf  /export/data/hadoop

4、在node1上:hadoop namenode –format

6.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即可。

6.2 指令碼一鍵啟動

如果配置了etc/hadoop/slaves和ssh免密登入,則可以使用程式指令碼啟動

所有Hadoop兩個叢集的相關程序,在主節點所設定的機器上執行。

hdfs:start-dfs.sh

yarn:  start-yarn.sh

停止叢集:stop-dfs.sh、stop-yarn.sh

過時的指令碼:一鍵啟動hdfs和yarn:start-all.sh

一鍵停止hdfs和yarn:stop-all.sh

七、測試

輸入:

NameNode http://nn_host:port/ 預設50070.

建立wc目錄:

hadoop fs -mkdir -p /wc/in

建立wc.log檔案

上傳到/wc/in目錄中

hadoop fs -put wc.log /wc/in

 ResourceManager http://rm_host:port/ 預設 8088.

進入

執行該目錄下的官方mapreduce檔案

執行中:

執行成功:

檢視統計的單詞個數:

下載並檢視該檔案

測試結束!!