超詳細的Hadoop3.1.2架構單機僞分佈式安裝和配置

Hadoop是大數據處理主流框架,如果要學習大數據處理與存儲,hadoop是必須掌握的一種框架技術。動手安裝是最基礎的實踐,下面介紹一下僞分佈式安裝與配置、測試過程,供有需要的參考。

(1)軟件準備

       包括:VMWare Workstation虛擬機

                 Centos7 64位操作系統

                 JDK1.8.0 64位

                 Hadoop3.1.2 (可以在http://mirror.bit.edu.cn/apache/hadoop/common/下載)

(2)Centos安裝及網絡配置

第一步,虛擬機上安裝Centos64位操作系統,安裝過程比較簡單,許多地方都是默認設置,包括網絡設置採用nat方式默認設置。

需要提示的是:在安裝過程中有設置用戶和root密碼的地方,建議設置用戶時就設置hadoop用戶,密碼可以自行設置。後面再登錄時默認當前用戶就是hadoop。這樣避免再去使用useradd添加hadoop用戶。

第二步. 查看IP地址: 與ubuntu不一樣,輸入ifconfig會出現錯誤,這裏最簡單方法就是使用ping命令,如ping 192.168.58.130,雖然無法ping通,但可以發現在彈出的信息中有from 192.168.58.138字樣,這192.168.58.138就是本機的ip地址。

第三步,在centos系統上安裝SSH服務,便於上傳JDK和HADOOP包。centos最簡安裝只有命令窗口,沒有桌面環境,在使用過程中需要用戶比較熟悉linux相關命令。本步驟主要用到如下命令:

  1. root賬號登錄安裝SSH : yum install -y openssl openssh-server

         yum install rsync (rsync是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件)

  2. root賬戶修改配置文件: 用vim打開配置文件/etc/ssh/sshd_config, 找到permitrootlogin將其前面的註釋去掉

  3. 啓動SSH服務: systemctl start sshd.service

   設置SSH開機自啓動:systemctl enable sshd.service

第四步,修改機器hostname、設置host與ip映射

   1. 修改hostname: root賬戶登錄後輸入: vi /etc/sysconfig/network, 然後修改如下:

2. 配置host與IP映射:root賬戶登錄後輸入: vi /etc/hosts,然後修改如下:

如上將本機IP地址192.168.58.138 映射爲master機器名,其他兩個節點也類似設置對應的機器名。可以在命令行輸入:ping master,如果ping成功,說明機器名修改生效:

第五步,測試SSH,可連接。在windows上安裝XSHELL或者SSH SECURE SHELL等軟件,測試是否能正常登錄連接。

 第六步,設置SSH免密登錄。

  爲了便於主節點與其他從節點之間的順暢通信,需要設置免密登錄。在主節點機器上當前用戶登錄,命令行輸入:ssh-keygen -t rsa,如下窗口。

由此生成一個私鑰和一個公鑰,存儲在/home/hadoop/.ssh/目錄下:

[hadoop@localhost ~]# cd ~/.ssh
[hadoop@localhost .ssh]# ll
total 8
-rw-------. 1 hadoop hadoop 1679 Aug 11 18:37 id_rsa
-rw-r--r--. 1 hadoop hadoop  408 Aug 11 18:37 id_rsa.pub
然後執行如下命令,cp id_rsa.pub authorized_keys,產生 authorized_keys文件

[hadoop@localhost .ssh]# cp id_rsa.pub authorized_keys
[hadoop@localhost .ssh]# ll
total 12
-rw-r--r--. 1 hadoop hadoop  408 Aug 11 19:34 authorized_keys
-rw-------. 1 hadoop hadoop 1679 Aug 11 18:37 id_rsa
-rw-r--r--. 1 hadoop hadoop  408 Aug 11 18:37 id_rsa.pub

然後修改權限ssh文件夾及authorized_keys文件:

[hadoop@localhost ~]$ chmod -R 700 .ssh

[hadoop@localhost ~]$ cd .ssh
[hadoop@localhost .ssh]$ chmod 600 authorized_keys 
這裏的權限700和600功能參考如下:

-rw------- (600)      只有擁有者有讀寫權限。
-rw-r--r-- (644)      只有擁有者有讀寫權限;而屬組用戶和其他用戶只有讀權限。
-rwx------ (700)     只有擁有者有讀、寫、執行權限。
-rwxr-xr-x (755)    擁有者有讀、寫、執行權限;而屬組用戶和其他用戶只有讀、執行權限。
-rwx--x--x (711)    擁有者有讀、寫、執行權限;而屬組用戶和其他用戶只有執行權限。
-rw-rw-rw- (666)   所有用戶都有文件讀、寫權限。
-rwxrwxrwx (777)  所有用戶都有讀、寫、執行權限。

如下進行免密登錄測試:ssh hadoop@master,或者直接使用ssh master,不需要輸入密碼時就表示配置成功。

第7步,關閉防火牆

  centos默認防火牆不是iptables,而是firewall。使用systemctl命令來開啓和關閉防火牆。

關閉: [root@master ~]# systemctl stop firewalld

查看狀態:[root@master ~]# service firewalld status
Redirecting to /bin/systemctl status firewalld.service
?firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Mon 2019-08-12 09:40:50 CST; 27s ago
     Docs: man:firewalld(1)
  Process: 6574 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 6574 (code=exited, status=0/SUCCESS)

(3)JDK安裝配置

JDK安裝配置比較簡單,將JDK安裝包上傳到當前目錄下,如新建一個java文件夾,然後使用tar命令將壓縮包解壓,然後配置環境變量即可:

第一步,在當前用戶目錄下新建java文件夾: [hadoop@localhost ~]$ mkdir java

第二步,在新建的java文件夾中解壓jdk包: [hadoop@localhost java]$ tar -xvf jdk-8u11-linux-x64.tar.gz

第三步,查看內容,其中jdk1.8.0_11就是jdk包所在的文件夾

[hadoop@localhost java]$ ll
total 155296
drwxr-xr-x. 8 hadoop hadoop       255 Jun 17  2014 jdk1.8.0_11
-rw-r--r--. 1 hadoop hadoop 159019376 Aug 10 21:13 jdk-8u11-linux-x64.tar.gz

 [hadoop@localhost java]$ cd jdk1.8.0_11/
[hadoop@localhost jdk1.8.0_11]$ ll
total 25428
drwxr-xr-x. 2 hadoop hadoop     4096 Jun 17  2014 bin
-r--r--r--. 1 hadoop hadoop     3244 Jun 17  2014 COPYRIGHT
drwxr-xr-x. 4 hadoop hadoop      122 Jun 17  2014 db
drwxr-xr-x. 3 hadoop hadoop      132 Jun 17  2014 include
-rw-r--r--. 1 hadoop hadoop  4673670 Jun 17  2014 javafx-src.zip
drwxr-xr-x. 5 hadoop hadoop      185 Jun 17  2014 jre
drwxr-xr-x. 5 hadoop hadoop      225 Jun 17  2014 lib
-r--r--r--. 1 hadoop hadoop       40 Jun 17  2014 LICENSE
drwxr-xr-x. 4 hadoop hadoop       47 Jun 17  2014 man
-r--r--r--. 1 hadoop hadoop      159 Jun 17  2014 README.html
-rw-r--r--. 1 hadoop hadoop      525 Jun 17  2014 release
-rw-r--r--. 1 hadoop hadoop 21047086 Jun 17  2014 src.zip
-rw-r--r--. 1 hadoop hadoop   110114 Jun 17  2014 THIRDPARTYLICENSEREADME-JAVAFX.txt
-r--r--r--. 1 hadoop hadoop   178445 Jun 17  2014 THIRDPARTYLICENSEREADME.txt
其中的bin文件夾、lib文件夾、jre文件夾都是熟悉的JAVA環境變量指向路徑

第四步,配置java環境變量

使用root賬戶登錄,然後命令行輸入: vi /etc/profile,在文件的最下端加入java環境變量設置:

export JAVA_HOME=/home/hadoop/java/jdk1.8.0_11   
export JRE_HOME=$JAVA_HOME/jre 
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib 
export PATH=$JAVA_HOME/bin:$PATH
第五步,保存上述文件並使環境變量生效:source /etc/profile. 

第六步,測試java,在當前用戶命令行輸入: java -version,可以看到安裝成功。

也可以編輯一個HelloWorldjava程序測試:

然後在命令行:

[hadoop@localhost ~]$ javac HelloWorld.java 

[hadoop@localhost ~]$ java HelloWorld

測試打印出程序中的hello結果。

(4)Hadoop單機安裝及配置

hadoop安裝也比較簡單,主要是配置比較麻煩。

將官網上下載的hadoop包上傳到當前目錄,然後tar解壓縮即完成安裝。然後麻煩的就是去配置相應的文件,包括core-site.xml、hadoop-env.sh、hdfs-site.xml、mapred-site.xml、yarn-site.xml等。

第一步,安裝hadoop,直接解壓就可以。如圖:

第二步,修改系統環境變量配置文件,將HADOOP的路徑加入profile,

即在root賬戶登錄後命令行輸入:

vi /etc/profile

然後在之前添加的JAVA環境變量文件下方添加HADOOP相關環境變量:

#JAVA環境變量設置

export JAVA_HOME=/home/hadoop/java/jdk1.8.0_11
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

#HADOOP環境變量設置

export HADOOP_HOME=/home/hadoop/hadoop-3.1.2
export PATH=$PATH:$HADOOP_HOME/bin
修改完成後保存該文件,然後使用:source /etc/profile使環境設置生效。

第三步,可以測試hadoop是否安裝成功。在當前用戶目錄下命令行輸入: hadoop version,如下:

[hadoop@master ~]$ hadoop version
Hadoop 3.1.2
Source code repository https://github.com/apache/hadoop.git -r 1019dde65bcf12e05ef48ac71e84550d589e5d9a
Compiled by sunilg on 2019-01-29T01:39Z
Compiled with protoc 2.5.0
From source with checksum 64b8bdd4ca6e77cce75a93eb09ab2a9
This command was run using /home/hadoop/hadoop-3.1.2/share/hadoop/common/hadoop-common-3.1.2.jar

第四步,單機非分佈式測試hadoop。如下圖,命令執行後將會列出MapReduce一系列程序類名及其意義。如wordcount程序、pi程序、sort排序程序等。

在當前home目錄下新建一個input文件夾,使用vi命令編輯三個文件,

[hadoop@master ~]$ cd input
[hadoop@master input]$ ll
total 12
-rw-rw-r--. 1 hadoop hadoop 12 Aug 12 08:12 f1.txt
-rw-rw-r--. 1 hadoop hadoop 28 Aug 12 08:12 f2.txt
-rw-rw-r--. 1 hadoop hadoop 19 Aug 12 08:12 f3.txt
[hadoop@master input]$ more f1.txt
hello world
[hadoop@master input]$ more f2.txt 
hello caojianhua my brother
[hadoop@master input]$ more f3.txt 
hello dear brother
可以看到三個文件中分別有幾個單詞,其中hello重複出現了3次,brother重複出現了2次,其餘的出現了1次。接下來我們用hadoop提供的樣例調用其wordcount程序來執行單詞統計測試。

[hadoop@master ~]$ hadoop jar hadoop-3.1.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount input output  //解釋:input爲輸入的文件夾,將處理input中的三個文件,output爲輸出結果文件夾。

回車執行後如果出現:2019-08-12 08:17:08,241 INFO mapreduce.Job:  map 100% reduce 100%
也就是map任務和reduce任務均完成,說明程序執行正常。

然後可以使用more或者cat命令查看輸出結果:

[hadoop@master ~]$ ll
total 324652
drwxr-xr-x. 9 hadoop hadoop       149 Jan 29  2019 hadoop-3.1.2
-rw-r--r--. 1 hadoop hadoop 332433589 Aug  9 12:52 hadoop-3.1.2.tar.gz
-rw-rw-r--. 1 hadoop hadoop       460 Aug 11 21:24 HelloWorld.class
-rw-rw-r--. 1 hadoop hadoop       151 Aug 11 21:24 HelloWorld.java
drwxrwxr-x. 2 hadoop hadoop        48 Aug 12 08:12 input
drwxrwxr-x. 3 hadoop hadoop        58 Aug 11 18:01 java
drwxr-xr-x. 2 hadoop hadoop        88 Aug 12 08:17 output
[hadoop@master ~]$ cd output
[hadoop@master output]$ ll
total 4
-rw-r--r--. 1 hadoop hadoop 61 Aug 12 08:17 part-r-00000
-rw-r--r--. 1 hadoop hadoop  0 Aug 12 08:17 _SUCCESS
[hadoop@master output]$ more part-r-00000 
brother 2
caojianhua      1
dear    1
hello   3
my      1
world   1
在output文件夾中使用more命令查看part-r-00000文件,結果顯示如上。

(5)Hadoop僞分佈配置

上面第4步安裝及配置表明本機可以當做hadoop服務器處理程序,也即是單機運行,不是分佈式的,map和reduce使用同一進程不同階段來執行。Hadoop 可以在單節點上以僞分佈式的方式運行,Hadoop 進程以分離的 Java 進程來運行,節點既作爲 NameNode 也作爲 DataNode,同時,讀取的是 HDFS 中的文件。

下面介紹僞分佈式配置。主要需要修改配置文件然後啓動相應的集羣服務。包括如下5個配置文件修改:

 1. 修改hadoop-env.sh,設置JAVA_HOME路徑

  export JAVA_HOME=/home/hadoop/java/jdk1.8.0_11

2. 修改core-site.xml,配置文件系統和公共目錄

<configuration>
  <property>
       <name>hadoop.tmp.dir</name>
       <value>file:/home/hadoop/hadoop-3.1.2/tmp</value>
       <description>a base for other tempory directories.</description>
  </property>
  <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
   </property>
</configuration>
3. 修改配置文件 hdfs-site.xml:

<configuration>
 <property>
        <name>dfs.replication</name>
        <value>1</value>
 </property>
 <property>  
       <name>dfs.name.dir</name>
         <value>/home/hadoop/hadoop-3.1.2/tmp/dfs/name</value>
    </property>
     <property>
        <name>dfs.data.dir</name>
         <value>/home/hadoop/hadoop-3.1.2/tmp/dfs/data</value>
     </property>
</configuration>

4. 修改配置文件 mapred-site.xml

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

<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
   <name>mapreduce.map.memory.mb</name>
   <value>2048</value>
</property>

</configuration>
5.修改配置文件yarn-site.xml

<configuration>
 <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
</property>
<property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
</property>

<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>
<property>
   <name>yarn.nodemanager.vmem-pmem-ratio</name>
    <value>5</value>
</property>
</configuration>
配置文件修改並保存後,就可以開始啓動Hadoop了。

(6)啓動HADOOP及僞分佈式測試

 第一步,首先進行hadoop的初始化,在命令行輸入:

[hadoop@master ~]$hadoop namenode -format

在執行結果最後出現:

2019-08-12 09:14:42,139 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/192.168.58.138
************************************************************/
表明初始化成功。

第二步,啓動所有進程,在命令行輸入

[hadoop@master ~]$cd /hadoop-3.1.2/sbin

執行sbin目錄中的start-all.sh腳本文件:

[hadoop@master sbin]$ ./start-all.sh
WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
WARNING: This is not a recommended production deployment configuration.
WARNING: Use CTRL-C to abort.
Starting namenodes on [localhost]
localhost: Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Starting datanodes
Starting secondary namenodes [master]
Starting resourcemanager
Starting nodemanagers
第三步,查看進程狀態,在命令行輸入:jps

[hadoop@master sbin]$ jps
17905 NameNode
18883 Jps
18198 SecondaryNameNode
18438 ResourceManager
18541 NodeManager
18015 DataNode

至此,單機上僞分佈式Hadoop環境配置好了,一臺機器上配置Hadoop集羣:NameNode、DataNode、SecondaryNameNode,YARN集羣:ResourceManager、NodeManager。Hadoop集羣負責分佈式存儲和預算,YARN集羣負責任務資源管理和調度。

第四步,可以在外部瀏覽器登錄hadoop,由於本處使用的centos最簡安裝,沒有圖形界面,因此無法從服務器本機測試,需要外部瀏覽器測試。首先要確定防火牆關閉,然後hadoop3.0開始採用端口爲:9870。因此在外部瀏覽器地址欄輸入:

http://192.168.58.138:9870, 這裏192.168.58.138是centos服務器的ip地址,9870爲hadoop所用端口。

通過上述web界面瀏覽整個集羣的狀態。

第五步,實例測試,還是選用系統自帶的MapReduce案例,進行wordcount測試。

(1)在hdfs系統裏新建一個test文件夾,這裏要理解不是真的在本地磁盤上建立文件夾,而是在虛擬的datanode上建立文件夾,實際存儲路徑在hdfs-site.xml設定了,即:/home/hadoop/hadoop-3.1.2/tmp/dfs/data,可以去這個目錄下查看。

[hadoop@master ~]$ hdfs dfs -mkdir /test

新建成功後,可以在web界面上查看browse directory:有新建的test文件夾。

(2)將之前本地單機測試時input文件夾中的三個文件上傳到test目錄中:

         [hadoop@master ~]$ hdfs dfs -put input/* /test
     

(3)開始測試,如下命令行:

[hadoop@master hadoop-3.1.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.2.jar wordcount /test /output2

2019-08-12 11:45:40,303 INFO mapreduce.Job: Running job: job_1565581394614_0001
2019-08-12 11:46:03,644 INFO mapreduce.Job: Job job_1565581394614_0001 running in uber mode : false
2019-08-12 11:46:03,714 INFO mapreduce.Job:  map 0% reduce 0%
2019-08-12 11:47:56,955 INFO mapreduce.Job:  map 100% reduce 0%
2019-08-12 11:48:44,873 INFO mapreduce.Job:  map 100% reduce 100%
2019-08-12 11:48:48,055 INFO mapreduce.Job: Job job_1565581394614_0001 completed successfully
2019-08-12 11:48:53,548 INFO mapreduce.Job: Counters: 53
當測試結束後,可以在命令行輸入:

[hadoop@master hadoop-3.1.2]$ hdfs dfs -cat /output2/*
brother 2
caojianhua      1
dear    1
hello   3
my      1
world   1

結果與單機版hadoop處理是一樣的。

也可以在web界面查看

至此,整個單臺機器安裝Hadoop以及配置Hadoo僞分佈式集羣就結束了。

總體過程還比較順利,都是邊實踐邊記錄,有幾個地方需要注意的是:

(1)本次使用的是Hadoop3.1.2版本,在配置和使用時與hadoop2.0版本稍微有所差別,尤其是mapred-site配置和後面的yarn-site配置,增加了內存分配比例設置。

(2)在使用web訪問hadoop時,端口號爲9870,而不是之前的50070.如果要查看YARN集羣狀況,在web瀏覽器地址欄輸入:

http://192.168.58.138:8088/cluster/,端口號爲8088.

 

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