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檔案
執行中:
執行成功:
檢視統計的單詞個數:
下載並檢視該檔案
測試結束!!