1. 程式人生 > >阿里雲centos7 四臺部署hadoop叢集

阿里雲centos7 四臺部署hadoop叢集

前言 :

Hadoop 發展前景 :
(1)分散式檔案系統 HDFS (GFS) 。
(2)資料的計算 : 分散式計算。

1 MapReduce , 搜尋排名
2 大任務 拆分成小任務
3 Map 階段 進行任務拆分,Reduce 階段進行資料計算彙總 。

(3)bigTable — Hbase (nosql), 行鍵 、列族。

啟動 :start-all.sh
HDFS : 儲存資料。
Yarn : Mapreduce 的執行容器。

訪問 :
(1)命令列
(2)java api
(3) Web Console 管理介面

本地模式 :
特點:不具備 HDFS , 只能測試MapReduce 程式。

偽分散式模式 :
特點:具備Hadoop 所有功能,在單機上模擬一個分散式的環境。
(1)HDFS : 主 : NameNode , 資料節點 : DataNode
(2)Yarn : 容器 :執行MapReduce 程式 。
主節點 : ResourceManager 。
從節點 :NodeManager

這裡寫圖片描述

MapReduce 的使用 :agui/hadoop/hadoop-2.8.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar

[[email protected]
mapreduce]# hadoop jar hadoop-mapreduce-examples-2.8.3.jar An example program must be given as the first argument. Valid program names are: aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files. aggregatewordhist: An Aggregate based map/reduce program that
computes the histogram of the words in the input files. bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi. dbcount: An example job that count the pageview counts from a database. distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi. grep: A map/reduce program that counts the matches of a regex in the input. join: A job that effects a join over sorted, equally partitioned datasets multifilewc: A job that counts words from several files. pentomino: A map/reduce tile laying program to find solutions to pentomino problems. pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method. randomtextwriter: A map/reduce program that writes 10GB of random textual data per node. randomwriter: A map/reduce program that writes 10GB of random data per node. secondarysort: An example defining a secondary sort to the reduce. sort: A map/reduce program that sorts the data written by the random writer. sudoku: A sudoku solver. teragen: Generate data for the terasort terasort: Run the terasort teravalidate: Checking results of terasort wordcount: A map/reduce program that counts the words in the input files. wordmean: A map/reduce program that counts the average length of the words in the input files. wordmedian: A map/reduce program that counts the median length of the words in the input files. wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files. [[email protected] mapreduce]#

個人備忘

簡單記錄下操作過程,以及一些必要的配置和一些爬過的坑,希望對其他同學有幫助。

這裡寫圖片描述

圖中提到的關鍵性 “名詞”這裡暫不做解釋~可自行查閱。

想要搭建叢集,需要大家至少知道,我們要“一主幾從”,這裡的namenode 就可以當成主 ,其他的datanode 可以看成從。

大體思路 :

1)配置ip 對映 (可有可無)
2)防火牆關閉 或者 開放埠。
3)靜態ip 網路配置(虛擬機器專用),阿里雲的伺服器,ip 不會變,不必配置。
4)下載lrzsz ,用於 win 與 linux 的檔案上傳和下載。(Xsftp 也可 , 可有可無)。
5)新增hadoop 使用者(可有可無,我用的是root 使用者)
6)配置無密碼的ssh 認證 (不做這步,初始化hdfs 的時候,會讓你輸入各個datanode 伺服器的密碼,可有可無)
7)下載hadoop 壓縮包,解壓縮安裝。
8)對 hadoop 安裝資料夾做對映 (可有可無)。
9)配置環境變數 cd ~ , ls -a 下的 .bashrc 檔案 vim 開啟,配置 hadoop 路徑。
10) 開始hadoop 的叢集配置,所有的配置檔案都在 hadoop-2.8.3 下的 etc/hadoop 資料夾下。
11) 修改配置檔案 vim hadoop-env.sh ,配置你本地的java路徑。
12) 修改配置core-site.xml , hdfs-site.xml, mapred-site.xml , yarn-site.xml , slaves檔案(namenode 節點配置即可,其他不用)。

對作業系統的要求 :

1、Hadoop生產環境要求Linux作業系統;
2、Hadoop官網只提供64位的安裝包,我們的Linux系統也需是64的;
3、Hadoop程式中包含對本地庫的呼叫,linux核心的glibc庫版本必須匹配Hadoop的本地庫版本要求。
如 hadoop-2.8.以上要求的glibc版本為2.14,如果我們Linux系統用CentOS,則需用CentOS-7.的版本,不能用CentOS-6.,CentOS-6.的glibc版本為2.12。

對JDK的要求 :

Hadoop版本與java版本的對應關係如下:
hadoop3.0 java8
hadoop2.7及後續版本 最低 java7
hadoop2.6及以前的版本 最低 java6

hadoop所有版本暫不鼓勵用java9。

步驟一 : 配置主機名 -ip 對映

//修改主機名:
// 四個節點都需要設定,我這裡起的名字是:nn.hadoop , dn1.hadoop , dn2.hadoop , dn3.hadoop 。為每臺機器設定自己的主機名
[[email protected] hadoop]# hostnamectl set-hostname nn.hadoop
[[email protected] hadoop]# hostname
nn.hadoop
[[email protected] hadoop]#

// 修改每臺機器的/etc/hosts 檔案,加入如下內容:

47.104.8.2     nn.hadoop
39.107.34.31   dn1.hadoop
39.107.2.11   dn2.hadoop
47.95.0.10     dn3.hadoop

步驟二 :防火牆 配置

我直接關閉了防火牆,開發埠等,可以參考我原來的備忘。

防火牆配置

步驟三 : 下載 lrzsz 軟體

lrzsz是一款在linux裡可代替ftp上傳和下載的程式。因為我們要上傳安裝包檔案。
安裝命令:yum install –y lrzsz

lrzsz使用
上傳檔案
在xshell視窗中:
上傳檔案輸入命令: rz
下載檔案輸入命令:sz 你要下載的檔案 例如 :

[root@nn hadoop]# sz hadoop-env.sh  

步驟四 :配合ssh 祕鑰 ,免登入

ssh無密碼認證配置
為方便管理叢集,在主控節點上統一開啟、停止叢集中各節點的hadoop程序,而不需每個節點去啟動、停止。hadoop採用ssh無密碼驗證的方式由namenode、resourcemanager節點來統一管理HDFS叢集、yarn叢集的節點。
要實現統一管理,需要節點上的每臺機器上都開啟了ssh和rsync服務。
ssh 用來安全登入遠端主機,這裡是主控節點(NameNode、ResourceManager)要無密碼連線到各從節點(DataNode、NodeManager)來控制從節點上的hadoop程序。
rsync 是一個遠端同步工具,namenode用它來向個datanode同步檔案。
在叢集的每臺機器上進行安裝、配置。

檢查是否安裝了ssh和rsync服務
命令:
rpm –qa | grep ssh
rpm –qa | grep rsync

安裝ssh和rsync
如果沒有安裝ssh:
yum install ssh 以yum的方式安裝ssh

安裝好後,啟動sshd服務:
service sshd restart

開啟開機自啟動:
chkconfig sshd on

如果沒有安裝 rsync:
yum install rsync 以yum的方式來安裝rsync

配置無密碼連線
配置HDFS、yarn兩個叢集的無密碼連線管理,就是配置主控節點上的執行使用者可以無密碼連線到從節點,來管理從節點的服務。以HDFS叢集為例,我們在NameNode節點以hdfs使用者來啟動hdfs叢集,在NameNode節點上將執行NameNode程序,而需要在DataNode節點上開啟DataNode程序,這時就需要無密碼登入連線到DataNode節點的hdfs使用者,來開啟DataNode程序。
下面介紹HDFS叢集的上的無密碼連線,yarn叢集是一樣的。

Namenode的配置
1. 以root使用者登入linux來操作。
先檢查是否可以無密碼連線:

這裡寫圖片描述

2、生成無密碼金鑰對:
命令:ssh-keygen -t rsa -P ” -f ~/.ssh/id_rsa
說明: -t rsa 指定使用rsa演算法
-P ‘’ 單引號中沒有字元,表示沒有密碼
-f 指定祕鑰檔案的名字

這裡寫圖片描述

3、檢視生成的金鑰對檔案,命令:ls –a ~/.ssh

這裡寫圖片描述

4、將公鑰追加到root使用者的授權keys中。
命令:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
5、修改授權keys檔案的許可權為600
命令:chmod 600 ~/.ssh/authorized_keys

這裡寫圖片描述

6、驗證root使用者是否可以無密碼ssh連線了
root使用者,ssh連線本機,命令:ssh localhost

這裡寫圖片描述

如果你的還是不能無密碼連線,則進行下面的設定後,再試一下。

7、修改sshd的配置檔案,開啟RSA認證。
注意:用root使用者來修改,操作
修改sshd的配置檔案命令:vi /etc/ssh/sshd_config
在檔案中作下圖所示的修改:

這裡寫圖片描述

8、重啟sshd服務
命令:service sshd restart

這裡寫圖片描述

Datanode的配置
Datanode的配置是讓Namenode能無密碼登入連線到Datanode,Namenode是客戶端,Datanode是服務端,我們只需把客戶端的公鑰加入到服務端使用者的授權keys檔案中,則客戶端通過其私鑰連線服務端時,服務端能解出密文,就能確認使用者,允許連線。
用hdfs使用者在各Datanode機器上進行如下操作:

這裡寫圖片描述

步驟說明:
1、拷貝公鑰檔案到DataNode上
拷貝Namenode上的公鑰檔案 /home/hdfs/.ssh/id_rsa.pub到Datanode上。
在datanode上,我們可以用scp命令來進行遠端拷貝,命令:
scp [email protected]:~/.ssh/id_rsa.pub ~
說明:
root:遠端使用者名稱(連線namenode的使用者名稱)
namenode-ip: namenode機器的ip地址
:~/.ssh/id_rsa.pub >> 號後是要拷貝的檔案(目錄)
~ 拷貝到本地使用者的home目錄,也可指定別的目錄

2、追加公鑰到使用者的授權keys檔案中。
3、修改授權keys檔案的許可權為600。

從Namenode無密碼連線Datanode試試。

[root@nn hadoop]# ssh dn1.hadoop
Last login: Sun May  6 11:18:31 2018 from 47.04.1.2

Welcome to Alibaba Cloud Elastic Compute Service !

[root@dn1 ~]# 

這裡寫圖片描述

步驟五 :下載hadoop 壓縮包

hadoop安裝包

這裡寫圖片描述

注意:當前hadoop官網上已不提供32位的安裝包了,所以你獲得的都是64位的。這也要求你的Linux系統必須是64位。

我下載的是下面這個 :

這裡寫圖片描述

JDK 我得是 1.8 版本。

步驟六 :解壓縮 並 配置 hadoop 環境變數

tar -zxvf hadoop-2.8.3.tart.gz -C /agui/hadoop/
lv -s hadoop-2.8.3 latest 

[root@dn1 hadoop]# ll
total 8
drwx------  3 root root    4096 May  6 12:17 data
drwxr-xr-x 10  502 dialout 4096 May  6 11:31 hadoop-2.8.3
lrwxrwxrwx  1 root root      12 May  6 10:24 latest -> hadoop-2.8.3
[root@dn1 hadoop]# pwd
/agui/hadoop
[root@dn1 hadoop]# 

配置hadoop環境變數 :

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

為hadoop配置JAVA_HOME :

[[email protected] hadoop]# cd /agui/hadoop/latest/etc/hadoop
[[email protected] hadoop]# ls
capacity-scheduler.xml      hadoop-policy.xml        kms-log4j.properties        ssl-client.xml.example
configuration.xsl           hdfs-site.xml            kms-site.xml                ssl-server.xml.example
container-executor.cfg      hdfs-site.xml.back       log4j.properties            yarn-env.cmd
core-site.xml               httpfs-env.sh            mapred-env.cmd              yarn-env.sh
core-site.xml.back          httpfs-log4j.properties  mapred-env.sh               yarn-site.xml
hadoop-env.cmd              httpfs-signature.secret  mapred-queues.xml.template  yarn-site.xml.back
hadoop-env.sh               httpfs-site.xml          mapred-site.xml
hadoop-metrics2.properties  kms-acls.xml             mapred-site.xml.template
hadoop-metrics.properties   kms-env.sh               slaves
[[email protected] hadoop]# 
[[email protected] hadoop]# vim hadoop-env.sh
export JAVA_HOME=/agui/jdk/jdk1.8.0_151

// 如下標識配置沒問題
[[email protected] hadoop]# hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar <jar>            run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp <srcurl> <desturl> copy file or directories recursively
  archive -archiveName NAME -p <parent path> <src>* <dest> create a hadoop archive
  classpath            prints the class path needed to get the
                       Hadoop jar and the required libraries
  credential           interact with credential providers
  daemonlog            get/set the log level for each daemon
  trace                view and modify Hadoop tracing settings

Most commands print help when invoked w/o parameters.

步驟七 : hadoop 叢集的配置

說明:有些配置檔案,在hadoop 解壓縮目錄下並沒有,自己構建即可。

core-site.xml 核心配置檔案

它會被所有的hadoop程序使用。需在該配置檔案中配置hadoop叢集預設檔案系統的訪問uri(必需配置),可以指定IO緩衝區的大小等。
// 配置如下
// 坑一 排查 9000 埠是否被佔用。
// 坑二 namenode 節點,該處ip配置改為 0.0.0.0, 其他三個datanode 該處配置為namenode 的外網ip 。記得去阿里雲安全組開放9000埠
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://192.168.0.11:9000</value>
    </property>
</configuration>

hdfs-site.xml hdfs叢集引數配置檔案

在該檔案配置hdfs叢集的引數,常用的配置引數如下,如果都是使用的預設值,則不需進行配置。

hdfs-site.xml

// 所有節點都要建立,namespace 和 data 資料夾 。具體資料夾路徑照應如下配置
<configuration>
    <property>
        <description>檔案的備份數量</description>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <description>NameNode檔案系統名稱空間存放目錄</description>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/namespace</value>
    </property>
    <property>
        <description>DataNode上檔案資料塊的存放目錄</description>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/data</value>
    </property>
</configuration>

在NameNode的etc/hadoop/slaves 檔案列出所有的DataNode的ip,一個一行。
如 :

[root@dn1 hadoop]# pwd
/agui/hadoop/latest/etc/hadoop
[root@dn1 hadoop]# vim slaves 

10.0.2.20
10.0.2.21
10.0.2.22

YARN叢集配置 :

etc/hadoop/mapred-site.xml 配置

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

etc/hadoop/yarn-site.xml 配置

<configuration>

<!-- Site specific YARN configuration properties -->
// 坑 <value>192.168.0.13</value> 該處,在namenode 節點配置 0.0.0.0 ,其他datanode 節點配置 namenode 的外網ip 即可。
// 坑二,該處預設使用埠為 8031 。所以你需要去namenode 所在的機器,設定 阿里雲安全組開放這個埠。
// 該配置檔案可以配置zk 的叢集,實現高可用。所有datanode 節點都需要配置。

    <property>
        <description>resourceManager節點的主機地址</description>
        <name>yarn.resourcemanager.hostname</name>
        <value>192.168.0.13</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

</configuration>

至此,所有配置完畢。

啟動叢集:

啟動hdfs叢集

阿里雲安全組,namenode 所在的機器,開放 50070 8088 兩個埠

1、格式化檔案系統
$ hdfs namenode -format

2、在NameNode上啟動hdfs叢集
$ start-dfs.sh

hadoop程序的日誌將輸出在目錄 $HADOOP_HOME/logs下

可用jps命令檢視各個節點上執行的java程序

4、在NameNode上關閉hdfs叢集
$ stop-dfs.sh
啟動yarn叢集
1、啟動:在ResourceManager上啟動yarn叢集
$ start-yarn.sh

2、通過瀏覽器瀏覽ResourceManager的web介面,預設的瀏覽地址為:
http:// ResourceManager-ip:8088
http://192.168.0.111:8088

3、關閉:在ResourceManager上關閉yarn叢集
$ stop-yarn.sh

啟動jobHistoryServer
mr-jobhistory-daemon.sh start historyserver

試用一下 : 有坑

檔案分片同步到 datanode 還需要 在三個datanade 節點 開放阿里雲安全組,埠為 :50010 。要麼 檔案沒法 分片到datanode 。

所有的hadoop日誌,都在 hadoop-2.8.3/logs 下。

1、在HDFS上建立執行MapReduce作業所需的目錄
hdfs dfs -mkdir /agui
hdfs dfs -mkdir /agui/hadoop

2、將輸入檔案拷貝到分散式檔案系統上:
hdfs dfs -mkdir input
hdfs dfs -put etc/hadoop/*.xml input

3、執行MapReduce示例作業:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar grep input output ‘dfs[a-z.]+’

4、檢視輸出結果檔案:
方式一:將分散式檔案系統的輸出檔案拷貝到本地檔案系統上,再檢視:
hdfs dfs -get output output
cat output/*

方式二:直接在分散式檔案系統上檢視輸出檔案:
hdfs dfs -cat output/*

樣例截圖 :

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述