Hadoop集群環境搭建

前言

Hadoop在大數據技術體系中的地位至關重要,Hadoop是大數據技術的基礎,對Hadoop基礎知識的掌握的扎實程度,會決定在大數據技術道路上走多遠。

這是一篇入門文章,Hadoop的學習方法很多,網上也有很多學習路線圖。本文的思路是:以安裝部署Apache Hadoop2.x版本為主線,來介紹Hadoop2.x的架構組成、各模塊協同工作原理、技術細節。安裝不是目的,通過安裝認識Hadoop才是目的。

第一部分:Linux環境安裝

Hadoop是運行在Linux,雖然借助工具也可以運行在Windows上,但是建議還是運行在Linux系統上,第一部分介紹Linux環境的安裝、配置、Java JDK安裝等。

第二部分:Hadoop本地模式安裝

Hadoop本地模式只是用于本地開發調試,或者快速安裝體驗Hadoop,這部分做簡單的介紹。

第三部分:Hadoop偽分布式模式安裝

學習Hadoop一般是在偽分布式模式下進行。這種模式是在一臺機器上各個進程上運行Hadoop的各個模塊,偽分布式的意思是雖然各個模塊是在各個進程上分開運行的,但是只是運行在一個操作系統上的,并不是真正的分布式。

第四部分:完全分布式安裝

完全分布式模式才是生產環境采用的模式,Hadoop運行在服務器集群上,生產環境一般都會做HA,以實現高可用。

第一部分:Linux環境安裝

第一步、配置Vmware NAT網絡

一、Vmware網絡模式介紹

參考:http://blog.csdn.net/collection4u/article/details/14127671

二、NAT模式配置

NAT是網絡地址轉換,是在宿主機和虛擬機之間增加一個地址轉換服務,負責外部和虛擬機之間的通訊轉接和IP轉換。

我們部署Hadoop集群,這里選擇NAT模式,各個虛擬機通過NAT使用宿主機的IP來訪問外網。

我們的要求是集群中的各個虛擬機有固定的IP、可以訪問外網,所以進行如下設置:

1、 Vmware安裝后,默認的NAT設置如下:

enter image description here

2、 默認的設置是啟動DHCP服務的,NAT會自動給虛擬機分配IP,但是我們需要將各個機器的IP固定下來,所以要取消這個默認設置。

3、 為機器設置一個子網網段,默認是192.168.136網段,我們這里設置為100網段,將來各個虛擬機Ip就為 192.168.100.*。

4、 點擊NAT設置按鈕,打開對話框,可以修改網關地址和DNS地址。這里我們為NAT指定DNS地址。

enter image description here

5、 網關地址為當前網段里的.2地址,好像是固定的,我們不做修改,先記住網關地址就好了,后面會用到。

第二步、安裝Linux操作系統

三、Vmware上安裝Linux系統

1、 文件菜單選擇新建虛擬機

2、 選擇經典類型安裝,下一步。

3、 選擇稍后安裝操作系統,下一步。

4、 選擇Linux系統,版本選擇CentOS 64位。

enter image description here

5、 命名虛擬機,給虛擬機起個名字,將來顯示在Vmware左側。并選擇Linux系統保存在宿主機的哪個目錄下,應該一個虛擬機保存在一個目錄下,不能多個虛擬機使用一個目錄。

enter image description here

6、 指定磁盤容量,是指定分給Linux虛擬機多大的硬盤,默認20G就可以,下一步。

7、 點擊自定義硬件,可以查看、修改虛擬機的硬件配置,這里我們不做修改。

8、 點擊完成后,就創建了一個虛擬機,但是此時的虛擬機還是一個空殼,沒有操作系統,接下來安裝操作系統。

9、 點擊編輯虛擬機設置,找到DVD,指定操作系統ISO文件所在位置。

enter image description here

10、 點擊開啟此虛擬機,選擇第一個回車開始安裝操作系統。

enter image description here

11、 設置root密碼。

enter image description here

12、 選擇Desktop,這樣就會裝一個Xwindow。

enter image description here

13、 先不添加普通用戶,其他用默認的,就把Linux安裝完畢了。

四、設置網絡

因為Vmware的NAT設置中關閉了DHCP自動分配IP功能,所以Linux還沒有IP,需要我們設置網絡各個參數。

1、 用root進入Xwindow,右擊右上角的網絡連接圖標,選擇修改連接。

enter image description here

2、 網絡連接里列出了當前Linux里所有的網卡,這里只有一個網卡System eth0,點擊編輯。

enter image description here

3、 配置IP、子網掩碼、網關(和NAT設置的一樣)、DNS等參數,因為NAT里設置網段為100.*,所以這臺機器可以設置為192.168.100.10網關和NAT一致,為192.168.100.2

enter image description here

4、 用ping來檢查是否可以連接外網,如下圖,已經連接成功。

enter image description here

五、修改Hostname

1、 臨時修改hostname

[root@localhost Desktop]# hostname bigdata-senior01.chybinmy.com

這種修改方式,系統重啟后就會失效。

2、 永久修改hostname

想永久修改,應該修改配置文件 /etc/sysconfig/network。

命令:[root@bigdata-senior01 ~] vim /etc/sysconfig/network

打開文件后,

NETWORKING=yes  #使用網絡
HOSTNAME=bigdata-senior01.chybinmy.com  #設置主機名

六、配置Host

命令:[root@bigdata-senior01 ~] vim /etc/hosts
添加hosts: 192.168.100.10 bigdata-senior01.chybinmy.com

七、關閉防火墻

學習環境可以直接把防火墻關閉掉。

(1) 用root用戶登錄后,執行查看防火墻狀態。

[root@bigdata-senior01 hadoop]# service iptables status

(2) 用[root@bigdata-senior01 hadoop]# service iptables stop關閉防火墻,這個是臨時關閉防火墻。

[root@bigdata-senior01 hadoop-2.5.0]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]

(3) 如果要永久關閉防火墻用。

[root@bigdata-senior01 hadoop]# chkconfig iptables off

關閉,這種需要重啟才能生效。

八、關閉selinux

selinux是Linux一個子安全機制,學習環境可以將它禁用。

[hadoop@bigdata-senior01 hadoop-2.5.0]$ vim /etc/sysconfig/selinux
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
enter image description here

第三步、安裝JDK

九、安裝Java JDK

1、 查看是否已經安裝了java JDK。

[root@bigdata-senior01 Desktop]# java –version

注意:Hadoop機器上的JDK,最好是Oracle的Java JDK,不然會有一些問題,比如可能沒有JPS命令。
如果安裝了其他版本的JDK,卸載掉。

2、 安裝java JDK

(1) 去下載Oracle版本Java JDK:jdk-7u67-linux-x64.tar.gz

(2) 將jdk-7u67-linux-x64.tar.gz解壓到/opt/modules目錄下

[root@bigdata-senior01 /]# tar -zxvf jdk-7u67-linux-x64.tar.gz -C /opt/modules

(3) 添加環境變量

設置JDK的環境變量 JAVA_HOME。需要修改配置文件/etc/profile,追加

export JAVA_HOME="/opt/modules/jdk1.7.0_67"
export PATH=$JAVA_HOME/bin:$PATH

修改完畢后,執行 source /etc/profile

(4)安裝后再次執行 java –version,可以看見已經安裝完成。

[root@bigdata-senior01 /]# java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

第二部分:Hadoop本地模式安裝

第四步、Hadoop部署模式

Hadoop部署模式有:本地模式、偽分布模式、完全分布式模式。
區分的依據是NameNode、DataNode、ResourceManager、NodeManager等模塊運行在幾個JVM進程、幾個機器。

模式名稱 各個模塊占用的JVM進程數 各個模塊運行在幾個機器數上
本地模式 1個 1個
偽分布式模式 N個 1個
完全分布式模式 N個 N個

第五步、本地模式部署

十、本地模式介紹

本地模式是最簡單的模式,所有模塊都運行與一個JVM進程中,使用的本地文件系統,而不是HDFS,本地模式主要是用于本地開發過程中的運行調試用。下載hadoop安裝包后不用任何設置,默認的就是本地模式。

十一、解壓hadoop后就是直接可以使用

1、 創建一個存放本地模式hadoop的目錄

[hadoop@bigdata-senior01 modules]$ mkdir /opt/modules/hadoopstandalone

2、 解壓hadoop文件

[hadoop@bigdata-senior01 modules]$ tar -zxf /opt/sofeware/hadoop-2.5.0.tar.gz  -C /opt/modules/hadoopstandalone/

3、 確保JAVA_HOME環境變量已經配置好

[hadoop@bigdata-senior01 modules]$ echo ${JAVA_HOME}
/opt/modules/jdk1.7.0_67

十二、運行MapReduce程序,驗證

我們這里用hadoop自帶的wordcount例子來在本地模式下測試跑mapreduce。

1、 準備mapreduce輸入文件wc.input

[hadoop@bigdata-senior01 modules]$ cat /opt/data/wc.input
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop

2、 運行hadoop自帶的mapreduce Demo

[hadoop@bigdata-senior01 hadoopstandalone]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /opt/data/wc.input output2
enter image description here

這里可以看到job ID中有local字樣,說明是運行在本地模式下的。

3、 查看輸出文件

本地模式下,mapreduce的輸出是輸出到本地。

[hadoop@bigdata-senior01 hadoopstandalone]$ ll output2
total 4
-rw-r--r-- 1 hadoop hadoop 60 Jul  7 12:50 part-r-00000
-rw-r--r-- 1 hadoop hadoop  0 Jul  7 12:50 _SUCCESS

輸出目錄中有_SUCCESS文件說明JOB運行成功,part-r-00000是輸出結果文件。

第三部分:Hadoop偽分布式模式安裝

第六步、偽分布式Hadoop部署過程

十三、Hadoop所用的用戶設置

1、 創建一個名字為hadoop的普通用戶

[root@bigdata-senior01 ~]# useradd hadoop
[root@bigdata-senior01 ~]# passwd hadoop

2、 給hadoop用戶sudo權限

[root@bigdata-senior01 ~]# vim /etc/sudoers

設置權限,學習環境可以將hadoop用戶的權限設置的大一些,但是生產環境一定要注意普通用戶的權限限制。

root    ALL=(ALL)       ALL
hadoop ALL=(root) NOPASSWD:ALL

注意:如果root用戶無權修改sudoers文件,先手動為root用戶添加寫權限。

[root@bigdata-senior01 ~]# chmod u+w /etc/sudoers

3、 切換到hadoop用戶

[root@bigdata-senior01 ~]# su - hadoop
[hadoop@bigdata-senior01 ~]$

4、 創建存放hadoop文件的目錄

[hadoop@bigdata-senior01 ~]$ sudo mkdir /opt/modules

5、 將hadoop文件夾的所有者指定為hadoop用戶

如果存放hadoop的目錄的所有者不是hadoop,之后hadoop運行中可能會有權限問題,那么就講所有者改為hadoop。

[hadoop@bigdata-senior01 ~]# sudo chown -R hadoop:hadoop /opt/modules

十四、解壓Hadoop目錄文件

1、 復制hadoop-2.5.0.tar.gz到/opt/modules目錄下。

2、 解壓hadoop-2.5.0.tar.gz

[hadoop@bigdata-senior01 ~]# cd /opt/modules
[hadoop@bigdata-senior01 hadoop]# tar -zxvf hadoop-2.5.0.tar.gz

十五、配置Hadoop

1、 配置Hadoop環境變量

[hadoop@bigdata-senior01 hadoop]# vim /etc/profile

追加配置:

export HADOOP_HOME="/opt/modules/hadoop-2.5.0"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

執行:source /etc/profile 使得配置生效

驗證HADOOP_HOME參數:

[hadoop@bigdata-senior01 /]$ echo $HADOOP_HOME
/opt/modules/hadoop-2.5.0

2、 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME參數

[hadoop@bigdata-senior01 ~]$ sudo vim  ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
修改JAVA_HOME參數為:
export JAVA_HOME="/opt/modules/jdk1.7.0_67"

3、 配置core-site.xml

enter image description here

配置hostname,host,關閉防火墻的方法參見第一部分

[hadoop@bigdata-senior01 ~]{HADOOP_HOME}/etc/hadoop/core-site.xml
(1) fs.defaultFS參數配置的是HDFS的地址。

<property>
<name>fs.defaultFS</name>
<value>hdfs://bigdata-senior01.chybinmy.com:8020</value>
</property>

(2) hadoop.tmp.dir配置的是Hadoop臨時目錄,比如HDFS的NameNode數據默認都存放這個目錄下,查看*-default.xml等默認配置文件,就可以看到很多依賴${hadoop.tmp.dir}的配置。

默認的hadoop.tmp.dir/tmp/hadoop-${user.name},此時有個問題就是NameNode會將HDFS的元數據存儲在這個/tmp目錄下,如果操作系統重啟了,系統會清空/tmp目錄下的東西,導致NameNode元數據丟失,是個非常嚴重的問題,所有我們應該修改這個路徑。

  • 創建臨時目錄:
    [hadoop@bigdata-senior01 hadoop-2.5.0]$ sudo mkdir -p /opt/data/tmp
  • 將臨時目錄的所有者修改為hadoop
[hadoop@bigdata-senior01 hadoop-2.5.0]$ sudo chown –R hadoop:hadoop /opt/data/tmp
  • 修改hadoop.tmp.dir
 <property>
   <name>hadoop.tmp.dir</name>
    <value>/opt/data/tmp</value>
  </property>

十六、配置、格式化、啟動HDFS

1、 配置hdfs-site.xml

enter image description here
[hadoop@bigdata-senior01 hadoop-2.5.0]$ vim ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
    <property>
       <name>dfs.replication</name>
       <value>1</value>
    </property>

dfs.replication配置的是HDFS存儲時的備份數量,因為這里是偽分布式環境只有一個節點,所以這里設置為1。

2、 格式化HDFS

enter image description here
[hadoop@bigdata-senior01 ~]$ hdfs namenode –format

格式化是對HDFS這個分布式文件系統中的DataNode進行分塊,統計所有分塊后的初始元數據的存儲在NameNode中。

格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data/tmp目錄)指定的目錄下是否有了dfs目錄,如果有,說明格式化成功。

注意:

  1. 格式化時,這里注意hadoop.tmp.dir目錄的權限問題,應該hadoop普通用戶有讀寫權限才行,可以將/opt/data的所有者改為hadoop。
    [hadoop@bigdata-senior01 hadoop-2.5.0]$ sudo chown -R hadoop:hadoop /opt/data

  2. 查看NameNode格式化后的目錄。

   [hadoop@bigdata-senior01 ~]$ ll /opt/data/tmp/dfs/name/current
enter image description here

fsimage是NameNode元數據在內存滿了后,持久化保存到的文件。

fsimage*.md5 是校驗文件,用于校驗fsimage的完整性。

seen_txid 是hadoop的版本

vession文件里保存:

  • namespaceID:NameNode的唯一ID。

  • clusterID:集群ID,NameNode和DataNode的集群ID應該一致,表明是一個集群。

#Mon Jul 04 17:25:50 CST 2016
namespaceID=2101579007
clusterID=CID-205277e6-493b-4601-8e33-c09d1d23ece4
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1641019026-127.0.0.1-1467624350057
layoutVersion=-57

3、 啟動NameNode

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-namenode-bigdata-senior01.chybinmy.com.out
enter image description here

4、 啟動DataNode

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-datanode-bigdata-senior01.chybinmy.com.out
enter image description here

5、 啟動SecondaryNameNode

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /opt/modules/hadoop-2.5.0/logs/hadoop-hadoop-secondarynamenode-bigdata-senior01.chybinmy.com.out
enter image description here

6、 JPS命令查看是否已經啟動成功,有結果就是啟動成功了。

[hadoop@bigdata-senior01 hadoop-2.5.0]$ jps
3034 NameNode
3233 Jps
3193 SecondaryNameNode
3110 DataNode
enter image description here

7、 HDFS上測試創建目錄、上傳、下載文件

HDFS上創建目錄

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/bin/hdfs dfs -mkdir /demo1

上傳本地文件到HDFS上

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/bin/hdfs dfs -put 
${HADOOP_HOME}/etc/hadoop/core-site.xml /demo1

讀取HDFS上的文件內容

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/bin/hdfs dfs -cat /demo1/core-site.xml
enter image description here

從HDFS上下載文件到本地

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -get /demo1/core-site.xml
enter image description here

十七、配置、啟動YARN

1、 配置mapred-site.xml

默認沒有mapred-site.xml文件,但是有個mapred-site.xml.template配置模板文件。復制模板生成mapred-site.xml。

[hadoop@bigdata-senior01 hadoop-2.5.0]# cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

添加配置如下:

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

指定mapreduce運行在yarn框架上。

enter image description here

2、 配置yarn-site.xml

添加配置如下:

<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>bigdata-senior01.chybinmy.com</value>
 </property>
  • yarn.nodemanager.aux-services配置了yarn的默認混洗方式,選擇為mapreduce的默認混洗算法。

  • yarn.resourcemanager.hostname指定了Resourcemanager運行在哪個節點上。

    enter image description here

3、 啟動Resourcemanager

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
enter image description here

4、 啟動nodemanager

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
enter image description here

5、 查看是否啟動成功

[hadoop@bigdata-senior01 hadoop-2.5.0]$ jps
3034 NameNode
4439 NodeManager
4197 ResourceManager
4543 Jps
3193 SecondaryNameNode
3110 DataNode

可以看到ResourceManager、NodeManager已經啟動成功了。

enter image description here

6、 YARN的Web頁面

YARN的Web客戶端端口號是8088,通過http://192.168.100.10:8088/可以查看。

enter image description here

十八、運行MapReduce Job

在Hadoop的share目錄里,自帶了一些jar包,里面帶有一些mapreduce實例小例子,位置在share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar,可以運行這些例子體驗剛搭建好的Hadoop平臺,我們這里來運行最經典的WordCount實例。

1、 創建測試用的Input文件

創建輸入目錄:

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -mkdir -p /wordcountdemo/input

創建原始文件:

在本地/opt/data目錄創建一個文件wc.input,內容如下。

enter image description here

將wc.input文件上傳到HDFS的/wordcountdemo/input目錄中:

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -put /opt/data/wc.input /wordcountdemo/input
enter image description here

2、 運行WordCount MapReduce Job

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-
2.5.0.jar wordcount /wordcountdemo/input /wordcountdemo/output
enter image description here

3、 查看輸出結果目錄

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -ls /wordcountdemo/output
-rw-r--r--   1 hadoop supergroup          0 2016-07-05 05:12 /wordcountdemo/output/_SUCCESS
-rw-r--r--   1 hadoop supergroup         60 2016-07-05 05:12 /wordcountdemo/output/part-r-00000
enter image description here
  • output目錄中有兩個文件,_SUCCESS文件是空文件,有這個文件說明Job執行成功。

  • part-r-00000文件是結果文件,其中-r-說明這個文件是Reduce階段產生的結果,mapreduce程序執行時,可以沒有reduce階段,但是肯定會有map階段,如果沒有reduce階段這個地方有是-m-。

  • 一個reduce會產生一個part-r-開頭的文件。

  • 查看輸出文件內容。

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -cat /wordcountdemo/output/part-r-00000
hadoop  3
hbase   1
hive    2
mapreduce       1
spark   2
sqoop   1
storm   1

結果是按照鍵值排好序的。

十九、停止Hadoop

 [hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/hadoop-daemon.sh stop namenode
stopping namenode
[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/hadoop-daemon.sh stop datanode
stopping datanode
[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/yarn-daemon.sh stop resourcemanager
stopping resourcemanager
[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/yarn-daemon.sh stop nodemanager
stopping nodemanager
enter image description here

二十、 Hadoop各個功能模塊的理解

1、 HDFS模塊

HDFS負責大數據的存儲,通過將大文件分塊后進行分布式存儲方式,突破了服務器硬盤大小的限制,解決了單臺機器無法存儲大文件的問題,HDFS是個相對獨立的模塊,可以為YARN提供服務,也可以為HBase等其他模塊提供服務。

2、 YARN模塊

YARN是一個通用的資源協同和任務調度框架,是為了解決Hadoop1.x中MapReduce里NameNode負載太大和其他問題而創建的一個框架。

YARN是個通用框架,不止可以運行MapReduce,還可以運行Spark、Storm等其他計算框架。

3、 MapReduce模塊

MapReduce是一個計算框架,它給出了一種數據處理的方式,即通過Map階段、Reduce階段來分布式地流式處理數據。它只適用于大數據的離線處理,對實時性要求很高的應用不適用。

第七步、開啟歷史服務

二十一、歷史服務介紹

Hadoop開啟歷史服務可以在web頁面上查看Yarn上執行job情況的詳細信息。可以通過歷史服務器查看已經運行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啟動時間、作業完成時間等信息。

二十二、開啟歷史服務

[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh start historyserver、

開啟后,可以通過Web頁面查看歷史服務器:

http://bigdata-senior01.chybinmy.com:19888/

二十三、Web查看job執行歷史

1、 運行一個mapreduce任務

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-
2.5.0.jar wordcount /wordcountdemo/input /wordcountdemo/output1

2、 job執行中

enter image description here

3、 查看job歷史

enter image description here
enter image description here

歷史服務器的Web端口默認是19888,可以查看Web界面。

但是在上面所顯示的某一個Job任務頁面的最下面,Map和Reduce個數的鏈接上,點擊進入Map的詳細信息頁面,再查看某一個Map或者Reduce的詳細日志是看不到的,是因為沒有開啟日志聚集服務。

二十四、開啟日志聚集

4、 日志聚集介紹

MapReduce是在各個機器上運行的,在運行過程中產生的日志存在于各個機器上,為了能夠統一查看各個機器的運行日志,將日志集中存放在HDFS上,這個過程就是日志聚集。

5、 開啟日志聚集

配置日志聚集功能:

Hadoop默認是不啟用日志聚集的。在yarn-site.xml文件里配置啟用日志聚集。

<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
 </property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>106800</value>
 </property>

yarn.log-aggregation-enable:是否啟用日志聚集功能。

yarn.log-aggregation.retain-seconds:設置日志保留時間,單位是秒。

將配置文件分發到其他節點:

[hadoop@bigdata-senior01 hadoop]$ scp /opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml bigdata-senior02.chybinmy.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
[hadoop@bigdata-senior01 hadoop]$ scp /opt/modules/hadoop-2.5.0/etc/hadoop/yarn-site.xml bigdata-senior03.chybinmy.com:/opt/modules/hadoop-2.5.0/etc/hadoop/

重啟Yarn進程:

[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/stop-yarn.sh
[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/start-yarn.sh

重啟HistoryServer進程:

[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh stop historyserver
[hadoop@bigdata-senior01 hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh start historyserver

6、 測試日志聚集

運行一個demo MapReduce,使之產生日志:

bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input /output1

查看日志:

運行Job后,就可以在歷史服務器Web頁面查看各個Map和Reduce的日志了。

第四部分:完全分布式安裝

第八步、完全布式環境部署Hadoop

完全分部式是真正利用多臺Linux主機來進行部署Hadoop,對Linux機器集群進行規劃,使得Hadoop各個模塊分別部署在不同的多臺機器上。

二十五、環境準備

1、 克隆虛擬機

  • Vmware左側選中要克隆的機器,這里對原有的BigData01機器進行克隆,虛擬機菜單中,選中管理菜單下的克隆命令。

  • 選擇“創建完整克隆”,虛擬機名稱為BigData02,選擇虛擬機文件保存路徑,進行克隆。

  • 再次克隆一個名為BigData03的虛擬機。

2、 配置網絡

修改網卡名稱:

在BigData02和BigData03機器上編輯網卡信息。執行sudo vim /etc/udev/rules.d/70-persistent-net.rules命令。因為是從BigData01機器克隆來的,所以會保留BigData01的網卡eth0,并且再添加一個網卡eth1。并且eth0的Mac地址和BigData01的地址是一樣的,Mac地址不允許相同,所以要刪除eth0,只保留eth1網卡,并且要將eth1改名為eth0。將修改后的eth0的mac地址復制下來,修改network-scripts文件中的HWADDR屬性。

sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
enter image description here

修改網絡參數:

BigData02機器IP改為192.168.100.12

BigData03機器IP改為192.168.100.13

3、 配置Hostname

BigData02配置hostname為 bigdata-senior02.chybinmy.com

BigData03配置hostname為 bigdata-senior03.chybinmy.com

4、 配置hosts

BigData01、BigData02、BigData03三臺機器hosts都配置為:

[hadoop@bigdata-senior01 hadoop-2.5.0]$ sudo vim /etc/hosts
192.168.100.10 bigdata-senior01.chybinmy.com
192.168.100.12 bigdata-senior02.chybinmy.com
192.168.100.13 bigdata-senior03.chybinmy.com

5、 配置Windows上的SSH客戶端

在本地Windows中的SSH客戶端上添加對BigData02、BigData03機器的SSH鏈接。

二十六、服務器功能規劃

bigdata-senior01.chybinmy.com bigdata-senior02.chybinmy.com bigdata-senior03.chybinmy.com
NameNode ResourceManage
DataNode DataNode DataNode
NodeManager NodeManager NodeManager
HistoryServer SecondaryNameNode

二十七、在第一臺機器上安裝新的Hadoop

為了和之前BigData01機器上安裝偽分布式Hadoop區分開來,我們將BigData01上的Hadoop服務都停止掉,然后在一個新的目錄/opt/modules/app下安裝另外一個Hadoop。
我們采用先在第一臺機器上解壓、配置Hadoop,然后再分發到其他兩臺機器上的方式來安裝集群。

6、 解壓Hadoop目錄:

[hadoop@bigdata-senior01 modules]$ tar -zxf /opt/sofeware/hadoop-2.5.0.tar.gz -C /opt/modules/app/

7、 配置Hadoop JDK路徑修改hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中的JDK路徑:

export JAVA_HOME="/opt/modules/jdk1.7.0_67"

8、 配置core-site.xml

[hadoop@bigdata-senior01 hadoop-2.5.0]$ vim etc/hadoop/core-site.xml
<configuration>
 <property>
   <name>fs.defaultFS</name>
   <value>hdfs://bigdata-senior01.chybinmy.com:8020</value>
 </property>
 <property>
   <name>hadoop.tmp.dir</name>
   <value>/opt/modules/app/hadoop-2.5.0/data/tmp</value>
 </property>
</configuration>

fs.defaultFS為NameNode的地址。

hadoop.tmp.dir為hadoop臨時目錄的地址,默認情況下,NameNode和DataNode的數據文件都會存在這個目錄下的對應子目錄下。應該保證此目錄是存在的,如果不存在,先創建。

9、 配置hdfs-site.xml

[hadoop@bigdata-senior01 hadoop-2.5.0]$ vim etc/hadoop/hdfs-site.xml
<configuration>
 <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>bigdata-senior03.chybinmy.com:50090</value>
 </property>
</configuration>

dfs.namenode.secondary.http-address是指定secondaryNameNode的http訪問地址和端口號,因為在規劃中,我們將BigData03規劃為SecondaryNameNode服務器。

所以這里設置為:bigdata-senior03.chybinmy.com:50090

10、 配置slaves

[hadoop@bigdata-senior01 hadoop-2.5.0]$ vim etc/hadoop/slaves
bigdata-senior01.chybinmy.com
bigdata-senior02.chybinmy.com
bigdata-senior03.chybinmy.com

slaves文件是指定HDFS上有哪些DataNode節點。

11、 配置yarn-site.xml

[hadoop@bigdata-senior01 hadoop-2.5.0]$ vim etc/hadoop/yarn-site.xml
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>bigdata-senior02.chybinmy.com</value>
    </property>
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>106800</value>
    </property>

根據規劃yarn.resourcemanager.hostname這個指定resourcemanager服務器指向bigdata-senior02.chybinmy.com

yarn.log-aggregation-enable是配置是否啟用日志聚集功能。

yarn.log-aggregation.retain-seconds是配置聚集的日志在HDFS上最多保存多長時間。

12、 配置mapred-site.xml

從mapred-site.xml.template復制一個mapred-site.xml文件。

[hadoop@bigdata-senior01 hadoop-2.5.0]$ cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>bigdata-senior01.chybinmy.com:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>bigdata-senior01.chybinmy.com:19888</value>
    </property>
</configuration>

mapreduce.framework.name設置mapreduce任務運行在yarn上。

mapreduce.jobhistory.address是設置mapreduce的歷史服務器安裝在BigData01機器上。

mapreduce.jobhistory.webapp.address是設置歷史服務器的web頁面地址和端口號。

二十八、設置SSH無密碼登錄

Hadoop集群中的各個機器間會相互地通過SSH訪問,每次訪問都輸入密碼是不現實的,所以要配置各個機器間的

SSH是無密碼登錄的。

1、 在BigData01上生成公鑰

[hadoop@bigdata-senior01 hadoop-2.5.0]$ ssh-keygen -t rsa

一路回車,都設置為默認值,然后再當前用戶的Home目錄下的.ssh目錄中會生成公鑰文件(id_rsa.pub)和私鑰文件(id_rsa)

2、 分發公鑰

yum -y install openssh-server openssh-clients
[hadoop@bigdata-senior01 hadoop-2.5.0]$ ssh-copy-id bigdata-senior01.chybinmy.com
[hadoop@bigdata-senior01 hadoop-2.5.0]$ ssh-copy-id bigdata-senior02.chybinmy.com
[hadoop@bigdata-senior01 hadoop-2.5.0]$ ssh-copy-id bigdata-senior03.chybinmy.com

3、 設置BigData02、BigData03到其他機器的無密鑰登錄

同樣的在BigData02、BigData03上生成公鑰和私鑰后,將公鑰分發到三臺機器上。

二十九、分發Hadoop文件

1、 首先在其他兩臺機器上創建存放Hadoop的目錄

[hadoop@bigdata-senior02 ~]$ mkdir /opt/modules/app
[hadoop@bigdata-senior03 ~]$ mkdir /opt/modules/app

2、 通過Scp分發

Hadoop根目錄下的share/doc目錄是存放的hadoop的文檔,文件相當大,建議在分發之前將這個目錄刪除掉,可以節省硬盤空間并能提高分發的速度。

doc目錄大小有1.6G。

[hadoop@bigdata-senior01 hadoop-2.5.0]$ du -sh /opt/modules/app/hadoop-2.5.0/share/doc
1.6G    /opt/modules/app/hadoop-2.5.0/share/doc
[hadoop@bigdata-senior01 hadoop-2.5.0]$ scp -r /opt/modules/app/hadoop-2.5.0/ bigdata-senior02.chybinmy.com:/opt/modules/app
[hadoop@bigdata-senior01 hadoop-2.5.0]$ scp -r /opt/modules/app/hadoop-2.5.0/ bigdata-senior03.chybinmy.com:/opt/modules/app

三十、格式NameNode

在NameNode機器上執行格式化:

[hadoop@bigdata-senior01 hadoop-2.5.0]$ /opt/modules/app/hadoop-2.5.0/bin/hdfs namenode –format

注意:

如果需要重新格式化NameNode,需要先將原來NameNode和DataNode下的文件全部刪除,不然會報錯,NameNode和DataNode所在目錄是在core-site.xmlhadoop.tmp.dirdfs.namenode.name.dirdfs.datanode.data.dir屬性配置的。

<property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/data/tmp</value>
  </property>
<property>
     <name>dfs.namenode.name.dir</name>
     <value>file://${hadoop.tmp.dir}/dfs/name</value>
  </property>
<property>
     <name>dfs.datanode.data.dir</name>
     <value>file://${hadoop.tmp.dir}/dfs/data</value>
  </property>

因為每次格式化,默認是創建一個集群ID,并寫入NameNode和DataNode的VERSION文件中(VERSION文件所在目錄為dfs/name/current 和 dfs/data/current),重新格式化時,默認會生成一個新的集群ID,如果不刪除原來的目錄,會導致namenode中的VERSION文件中是新的集群ID,而DataNode中是舊的集群ID,不一致時會報錯。

另一種方法是格式化時指定集群ID參數,指定為舊的集群ID。

三十一、啟動集群

1、 啟動HDFS

[hadoop@bigdata-senior01 hadoop-2.5.0]$ /opt/modules/app/hadoop-2.5.0/sbin/start-dfs.sh
enter image description here

2、 啟動YARN

[hadoop@bigdata-senior01 hadoop-2.5.0]$ /opt/modules/app/hadoop-2.5.0/sbin/start-yarn.sh

在BigData02上啟動ResourceManager:

[hadoop@bigdata-senior02 hadoop-2.5.0]$ sbin/yarn-daemon.sh start resourcemanager
enter image description here

3、 啟動日志服務器

因為我們規劃的是在BigData03服務器上運行MapReduce日志服務,所以要在BigData03上啟動。

[hadoop@bigdata-senior03 ~]$ /opt/modules/app/hadoop-2.5.0/sbin/mr-jobhistory-daemon.sh start historyserver
starting historyserver, logging to /opt/modules/app/hadoop-2.5.0/logs/mapred-hadoop-historyserver-bigda       ta-senior03.chybinmy.com.out
[hadoop@bigdata-senior03 ~]$ jps
3570 Jps
3537 JobHistoryServer
3310 SecondaryNameNode
3213 DataNode
3392 NodeManager

4、 查看HDFS Web頁面

http://bigdata-senior01.chybinmy.com:50070/

5、 查看YARN Web 頁面

http://bigdata-senior02.chybinmy.com:8088/cluster

三十二、測試Job

我們這里用hadoop自帶的wordcount例子來在本地模式下測試跑mapreduce。

1、 準備mapreduce輸入文件wc.input

[hadoop@bigdata-senior01 modules]$ cat /opt/data/wc.input
hadoop mapreduce hive
hbase spark storm
sqoop hadoop hive
spark hadoop

2、 在HDFS創建輸入目錄input

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -mkdir /input

3、 將wc.input上傳到HDFS

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -put /opt/data/wc.input /input/wc.input

4、 運行hadoop自帶的mapreduce Demo

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /input/wc.input /output
enter image description here

5、 查看輸出文件

[hadoop@bigdata-senior01 hadoop-2.5.0]$ bin/hdfs dfs -ls /output
Found 2 items
-rw-r--r--   3 hadoop supergroup          0 2016-07-14 16:36 /output/_SUCCESS
-rw-r--r--   3 hadoop supergroup         60 2016-07-14 16:36 /output/part-r-00000
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,786評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,656評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,697評論 0 379
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,098評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,855評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,254評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,322評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,473評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,014評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,833評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,016評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,568評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,273評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,680評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,946評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,730評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,006評論 2 374

推薦閱讀更多精彩內容