Hadoop學習(1)Hadoop2.9.1完全分佈式環境搭建和測試

目錄

 

參考:

1. 安裝前節點環境準備

1.1修改主機名(所有節點,以master節點爲例):

1.2關閉防火牆和selinux(所有節點,以master節點爲例):

2. 安裝前系統環境準備

2.1 安裝jdk(所有節點,以master節點爲例)

2.2 創建hadoop用戶(所有節點,以master節點爲例)

2.3 hosts文件設置(所有節點,以master節點爲例)

2.4 配置SSH免密碼登錄(所有節點,以master節點爲例)

3. 安裝Hadoop和配置Hadoop

3.1 下載安裝包hadoop-2.9.1.tar.gz(master節點)

3.2 解壓安裝包hadoop-2.9.1.tar.gz(master節點)

3.3 master節點配置(master節點)

3.3.1 環境變量配置

3.3.2 配置core-site.xml

3.3.3 配置hdfs-site.xml

3.3.4 配置mapred-site.xml

3.3.5 配置yarn-site.xml

3.3.6 配置slaves

3.4 slave節點配置(在所有slave節點,以slave1爲例)

3.5 Hadoop環境變量配置(所有節點,以master節點爲例)

4. 初始化Hadoop(master節點)

5. 啓動Hadoop

5.1 啓動HDFS(HDFS集羣的任何節點都可以)

5.2 啓動YARN(在YARN主節點ResourceManager上執行)

6. 查看4臺服務器的進程

7. 查看HDFS和YARN的Web管理界面

8. Hadoop的簡單測試及使用

8.1 HDFS的簡單使用測試

8.2 運行第一個Map Reduce的例子程序:wordcount

8.3 運行例子程序:求圓周率


參考:

https://www.cnblogs.com/qingyunzong/p/8496127.html#_label3_2

https://www.cnblogs.com/pcxie/p/7747317.html

https://blog.csdn.net/fanxin_i/article/details/80425461

1. 安裝前節點環境準備

4節點均爲virt-manager創建的CentOS7(英文版)的虛擬機,如下將每個節點yum源均更新爲最新:

[root@localhost ~]# yum update -y

[root@localhost ~]# cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

節點IP

主機名

配置

10.10.129.210

master

OS:CentOS Linux release

7.5.1804 (Core)

CPU:3核

內存:4G

磁盤:30G

 

10.10.129.211

slave1

10.10.129.212

slave2

10.10.129.213

slave3

Hadoop集羣中各個角色的名稱:

服務

主節點

從節點

HDFS

NameNode

DataNode

YARN

ResourceManager

NodeManager

HDFS角色分配:

節點IP

主機名

HDFS角色

10.10.129.210

master

 datanode;namenode

10.10.129.211

slave1

 datanode;

10.10.129.212

slave2

datanode;secondarynamenode

10.10.129.213

slave3

 datanode;

YARN角色分配:

節點IP

主機名

YARN角色

10.10.129.210

master

 nodemanager;

10.10.129.211

slave1

 nodemanager;

10.10.129.212

slave2

nodemanager

10.10.129.213

slave3

 nodemanager;resourcemanager

1.1修改主機名(所有節點,以master節點爲例):

在centos7特地添加了hostnamectl命令查看,修改主機名使用hostnamectl set-hostname 命令修改主機名,可永久生效,新連接主機即可看到主機名發生了改變

[root@localhost~]# hostnamectl set-hostname master

斷開重連:

其他節點也分別更名爲:slave1,slave2,slave3

1.2關閉防火牆和selinux(所有節點,以master節點爲例):

[root@master~]# systemctl disable firewalld

[root@master~]# systemctl stop firewalld

關閉selinux,永久生效是修改/etc/sysconfig/selinux或者/etc/selinux/config配置文件然後需要重啓機器:

[root@master~]# vim /etc/sysconfig/selinux

然後重啓機器使其永久生效reboot -h

重啓後檢查selinux狀態是否真的關閉:

[root@master ~]# sestatus

2. 安裝前系統環境準備

2.1 安裝jdk(所有節點,以master點爲例

一般linux自帶的jdk或者是通過yum安裝的jdk都是openjdk,但是最好是使用oracle/sun jdk,前者是開源的,缺失部分功能,後者是官方的。但是如果直接安裝oracle的jdk,第三方的依賴包不會安裝,所以最有效的額方式是通過yum安裝openjdk,並同時安裝了第三方依賴包,然後卸載openjdk,通過自己來安裝oracle的jdk,就能解決依賴問題。 

[root@master~]# yum install -y java

[root@master~]# rpm -qa|grep java

[root@master ~]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64

[root@master ~]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-3.b13.el7_5.x86_64

安裝解壓版JDK,先到oracle sun官網下載jdk-8u181-linux-x64.rpm ,再執行下面命令安裝:

[root@master ~]# rpm -ivh jdk-8u181-linux-x64.rpm

檢查是否安裝成功:

[root@master ~]# java -version

java默認安裝目錄爲:/usr/java/jdk1.8.0_181-amd64(後面配置JAVA_HOME用得着)

2.2 創建hadoop用戶(所有節點,以master節點爲例

[root@master ~]# useradd -m hadoop

爲hadoop用戶添加密碼:

[root@master ~]# passwd hadoop

Changing password for user hadoop.

New password:

BAD PASSWORD: The password is shorter than 8 characters

Retype new password:

passwd: all authentication tokens updated successfully.

爲hadoop用戶添加root權限:

[root@master ~]# vim /etc/sudoers

在root ALL=(ALL) ALL行下面添加:

hadoop ALL=(ALL) ALL,保存退出

2.3 hosts文件設置(所有節點,以master節點爲例

[root@master~]# vim /etc/hosts

檢查是否識別域名:

 

2.4 配置SSH免密碼登錄所有節點,以master點爲例

master節點爲例:

使用hadoop用戶

[root@master ~]# su hadoop

[hadoop@master root]$ cd ~

[hadoop@master ~]$ pwd

/home/hadoop

[hadoop@master~]# ssh-keygen(執行以下命令然後一路回車):

[hadoop@master~]# ssh-keygen

複製key到各節點,注意不要漏掉自身節點:

[hadoop@master ~]# ssh-copy-id 10.10.129.200

[hadoop@master ~]# ssh-copy-id 10.10.129.201

[hadoop@master ~]# ssh-copy-id 10.10.129.202

[hadoop@master ~]# ssh-copy-id 10.10.129.203

檢查是否實現了無密碼登錄(此步驟不要省略,否則後面在執行start-dfs.sh和start-yarn.sh腳本時會出現無法認證的錯誤,因爲正常免密登陸後所有的ssh第一次都需要密碼,此後都不需要密碼):

[hadoop@master ~]$ ssh master
按提示輸入yes
[hadoop@master ~]$ exit
logout
Connection to master closed.

[hadoop@master ~]$ ssh slave1
按提示輸入yes
[hadoop@slave1 ~]$ exit
logout
Connection to slave1 closed.

[hadoop@master ~]$ ssh slave2
按提示輸入yes
[hadoop@slave2 ~]$ exit
logout
Connection to slave2 closed.

[hadoop@master ~]$ ssh slave3
按提示輸入yes
[hadoop@slave3 ~]$ exit
logout
Connection to slave3 closed.

[hadoop@master ~]$

slave1節點爲例:

使用hadoop用戶

[root@slave1~]# su hadoop

[hadoop@slave1root]$ cd ~

[hadoop@slave1~]$ pwd

/home/hadoop

[hadoop@slave1~]# ssh-keygen(執行以下命令然後一路回車):

[hadoop@slave1~]# ssh-keygen

複製key到各節點,注意不要漏掉自身節點:

[hadoop@slave1 ~]# ssh-copy-id 10.10.129.200

[hadoop@slave1 ~]# ssh-copy-id 10.10.129.201

[hadoop@slave1 ~]# ssh-copy-id 10.10.129.202

[hadoop@slave1 ~]# ssh-copy-id 10.10.129.203

檢查是否實現了無密碼登錄(此步驟不要省略,否則後面在執行start-dfs.sh和start-yarn.sh腳本時會出現無法認證的錯誤,因爲正常免密登陸後所有的ssh第一次都需要密碼,此後都不需要密碼):

[hadoop@slave1 ~]$ ssh master
按提示輸入yes
[hadoop@master ~]$ exit
logout
Connection to master closed.

[hadoop@slave1 ~]$ ssh slave1
按提示輸入yes
[hadoop@slave1 ~]$ exit
logout
Connection to slave1 closed.

[hadoop@slave1 ~]$ ssh slave2
按提示輸入yes
[hadoop@slave2 ~]$ exit
logout
Connection to slave2 closed.

[hadoop@slave1 ~]$ ssh slave3
按提示輸入yes
[hadoop@slave3 ~]$ exit
logout
Connection to slave3 closed.

[hadoop@slave1 ~]$

slave2和slave3節點同slave1節點操作

3. 安裝Hadoop和配置Hadoop

最好從這裏開始就以hadoop用戶操作,我實驗時沒有這樣做,但發現後來反正都要把安裝包改爲hadoop權限(使用chown命令),因爲我是以hadoop用戶進行安裝的

3.1 下載安裝包hadoop-2.9.1.tar.gz(master節點

在官網https://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.9.1/hadoop-2.9.1.tar.gz處下載:

這個鏈接下載起來會更快:http://www-us.apache.org/dist/hadoop/common/hadoop-2.9.1/hadoop-2.9.1.tar.gz

[hadoop@master ~]$ ll
total 352892
-rw-r--r-- 1 hadoop hadoop 361355307 Sep 25 00:55 hadoop-2.9.1.tar.gz

注意這裏安裝包所屬用戶:-rw-r--r-- 1 hadoop hadoop

3.2 解壓安裝包hadoop-2.9.1.tar.gz(master節點

使用hadoop用戶,創建安裝目錄:/home/hadoop/apps,創建數據目錄:/home/hadoop/data:

[hadoop@master ~]$ pwd

/home/hadoop

[hadoop@master hadoop]# mkdir apps

[hadoop@master hadoop]# mkdir data

[hadoop@master ~]$ ls

apps  data  hadoop-2.9.1.tar.gz

 

在apps文件夾下解壓安裝包:

[hadoop@master ~]$ cd apps/

[hadoop@master apps]$ tar -zxvf ../hadoop-2.9.1.tar.gz
[hadoop@master apps]$ ls

hadoop-2.9.1

3.3 master節點配置(master節點

進入配置文件目錄:/home/hadoop/apps/hadoop-2.9.1/etc/hadoop

3.3.1 環境變量配置

[hadoop@master hadoop]$ vim hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_181-amd64

3.3.2 配置core-site.xml

fs.defaultFS : 這個屬性用來指定namenode的hdfs協議的文件系統通信地址,可以指定一個主機+端口,也可以指定爲一個namenode服務(這個服務內部可以有多臺namenode實現ha的namenode服務。

hadoop.tmp.dir : hadoop集羣在工作的時候存儲的一些臨時文件的目錄。

[hadoop@master hadoop]$ vim core-site.xml
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/data/hadoopdata</value>
    </property>
</configuration>

3.3.3 配置hdfs-site.xml

dfs.namenode.name.dir:namenode數據的存放地點。也就是namenode元數據存放的地方,記錄了hdfs系統中文件的元數據。

dfs.datanode.data.dir: datanode數據的存放地點。也就是block塊存放的目錄了。

dfs.replication:hdfs的副本數設置。也就是上傳一個文件,其分割爲block塊後,每個block的冗餘副本個數,默認配置是3。

dfs.secondary.http.address:secondarynamenode 運行節點的信息,和 namenode 不同節點

HDFS角色分配:

節點IP

主機名

HDFS角色

10.10.129.210

master

 datanode;namenode

10.10.129.211

slave1

 datanode;

10.10.129.212

slave2

datanode;secondarynamenode

10.10.129.213

slave3

 datanode;

[hadoop@master hadoop]$ vim hdfs-site.xml
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/hadoop/data/hadoopdata/name</value>
        <description>爲了保證元數據的安全一般配置多個不同目錄</description>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/hadoop/data/hadoopdata/data</value>
        <description>datanode 的數據存儲目錄</description>
    </property>

    <property>  
        <name>dfs.replication</name>
        <value>2</value>
        <description>HDFS 的數據塊的副本存儲個數, 默認是3</description>
    </property>

    <property>
        <name>dfs.secondary.http.address</name>
        <value>slave2:50090</value>
        <description>secondarynamenode 運行節點的信息,和 namenode 不同節點</description>
    </property>
</configuration>

3.3.4 配置mapred-site.xml

mapreduce.framework.name:指定mr框架爲yarn方式,Hadoop二代MP也基於資源管理系統Yarn來運行 。

[hadoop@master hadoop]$ cp mapred-site.xml.template mapred-site.xml

[hadoop@master hadoop]$ vim mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>   
    </property>
</configuration>

3.3.5 配置yarn-site.xml

yarn.resourcemanager.hostname:yarn總管理器的IPC通訊地址

yarn.nodemanager.aux-services:YARN 集羣爲 MapReduce 程序提供的服務(常指定爲 shuffle )

YARN角色分配:

節點IP

主機名

YARN角色

10.10.129.210

master

 nodemanager;

10.10.129.211

slave1

 nodemanager;

10.10.129.212

slave2

nodemanager

10.10.129.213

slave3

 nodemanager;resourcemanager

[hadoop@master hadoop]$ vim yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>slave3</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        <description>YARN 集羣爲 MapReduce 程序提供的 shuffle 服務</description>
    </property>
</configuration>

3.3.6 配置slaves

[hadoop@master hadoop]$ vim slaves

把原本的localhost刪掉,增加如下內容:

master
slave1
slave2
slave3

3.4 slave節點配置(在所有slave節點,以slave1爲例

重點強調: 每臺服務器中的hadoop安裝包的目錄必須一致, 安裝包的配置信息還必須保持一致

在slave1節點上,同樣使用hadoop用戶:

[root@slave1 ~]# su hadoop

[hadoop@slave1 root]$ cd ~

[hadoop@slave1 ~]$ pwd

/home/hadoop

[hadoop@slave1 ~]$ mkdir apps

在master節點上:

[hadoop@master hadoop]$ scp -r ~/apps/hadoop-2.9.1/ hadoop@slave1:~/apps/hadoop-2.9.1/

slave2和slave3節點同slave1節點操作

3.5 Hadoop環境變量配置(所有節點,以master節點爲例

千萬注意:

1、如果你使用root用戶進行安裝。 vi /etc/profile 即可 系統變量

2、如果你使用普通用戶進行安裝。 vi ~/.bashrc 用戶變量(我是使用hadoop用戶安裝的)

[hadoop@master ~]$ pwd

/home/hadoop

[hadoop@master ~]$ vim .bashrc
# User specific aliases and functions

export HADOOP_HOME=/home/hadoop/apps/hadoop-2.9.1

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

使環境變量生效:

[hadoop@master ~]$ source ~/.bashrc
[hadoop@master ~]$ echo $HADOOP_HOME

/home/hadoop/apps/hadoop-2.9.1

驗證環境變量是否生效,查看hadoop版本:

[hadoop@master ~]$ hadoop version

注意:slave節點要以hadoop用戶去執行以上操作

[hadoop@slave1 ~]$ vim .bashrc
# User specific aliases and functions

export HADOOP_HOME=/home/hadoop/apps/hadoop-2.9.1

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:

使環境變量生效:

[hadoop@slave1 ~]$ source ~/.bashrc
[hadoop@slave1 ~]$ echo $HADOOP_HOME

/home/hadoop/apps/hadoop-2.9.1

驗證環境變量是否生效,查看hadoop版本:

[hadoop@slave1 ~]$ hadoop version

slave2和slave3節點同slave1節點操作

4. 初始化Hadoop(master節點

注意:HDFS初始化只能在HDFS集羣的主節點namenode上進行,本實驗中即爲master節點

[hadoop@master ~]$ hadoop namenode -format

5. 啓動Hadoop

5.1 啓動HDFS(HDFS集羣的任何節點都可以

注意:不管在集羣中的哪個節點都可以。

[hadoop@master ~]$ start-dfs.sh

 

5.2 啓動YARN(在YARN主節點ResourceManager上執行

注意:只能在YARN的主節點resourcemanager中進行啓動,也就是本集羣的slave3。

[hadoop@slave3 ~]$ start-yarn.sh

(補充:啓動方式2:直接在master上執行start-all.sh而不是像前面這樣分開執行HDFS和YARN(未驗證過))

6. 查看4臺服務器的進程

master節點

slave1節點

slave2節點

slave3節點

7. 查看HDFS和YARN的Web管理界面

7.1 查看HDFS的Web管理界面

瀏覽器輸入:http://10.10.129.200:50070

點擊Datanodes可查看集羣4個節點

從上圖中的Http Address中可以看到訪問其他節點的URL鏈接(圖中是用的域名,我試了不行,要用IP,至於爲什麼域名不行以後再解決)

http://10.10.129.201:50075

http://10.10.129.202:50075

http://10.10.129.203:50075

7.2 查看YARN的Web管理界面

瀏覽器輸入http://10.10.129.203:8088

點擊Nodes可以查看集羣4個節點

8. Hadoop的簡單測試及使用

8.1 HDFS的簡單使用測試

  • 創建文件夾

在HDFS上創建一個文件夾/test/input

[hadoop@master ~]$ hadoop fs -mkdir -p /test/input
  • 查看創建的文件夾
[hadoop@master ~]$ hadoop fs -ls /

Found 1 items

drwxr-xr-x - hadoop supergroup 0 2018-09-25 06:21 /test
[hadoop@master ~]$ hadoop fs -ls /test

Found 1 items

drwxr-xr-x - hadoop supergroup 0 2018-09-25 06:21 /test/input
  • 向HDFS上傳文件

創建一個文本文件words.txt

[hadoop@master ~]$ vim words.txt
hello zhangsan
hello lisi
hello wangwu

將words.txt文件上傳至HDFS:

[hadoop@master ~]$ hadoop fs -put ~/words.txt /test/input

查看是否上傳成功

[hadoop@master ~]$ hadoop fs -ls /test/input

Found 1 items

-rw-r--r-- 2 hadoop supergroup 39 2018-09-25 06:24 /test/input/words.txt
  • 從HDFS下載文件

將剛剛上傳的文件下載到~/data文件夾中

[hadoop@master ~]$ hadoop fs -get /test/input/words.txt ~/data

查看是否下載成功

[hadoop@master ~]$ ls data/

hadoopdata  words.txt

8.2 運行第一個Map Reduce的例子程序:wordcount

用自帶的demo--wordcount來測試hadoop集羣能不能正常跑任務:

執行wordcount程序,並將結果放入/test/output/文件夾:

[hadoop@master ~]$ hadoop jar ~/apps/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /test/input /test/output

(注意事項:/output文件夾必須是沒有創建過的文件夾?(沒驗證過))

在YARN Web管理界面查看:

查看執行結果:

[hadoop@master ~]$ hadoop fs -ls /test/output

Found 2 items

-rw-r--r-- 2 hadoop supergroup 0 2018-09-25 06:32 /test/output/_SUCCESS

-rw-r--r-- 2 hadoop supergroup 35 2018-09-25 06:32 /test/output/part-r-00000

在output/part-r-00000可以看到程序執行結果:

[hadoop@master ~]$ hadoop fs -cat /test/output/part-r-00000

hello 3

lisi 1

wangwu 1

zhangsan 1

8.3 運行例子程序:求圓周率

用自帶的demo--pi來測試hadoop集羣能不能正常跑任務:

執行pi程序:

[hadoop@master ~]$ hadoop jar ~/apps/hadoop-2.9.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar pi 10 10

用來求圓周率,pi是類名,第一個10表示Map次數,第二個10表示隨機生成點的次數(與計算原理有關) (參考:https://blog.csdn.net/fanxin_i/article/details/80425461

在YARN Web管理界面查看:

最後出現結果:

至此,hadoop集羣搭建成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章