上一章我給大家介紹了Hadoop的單節點叢集本地模式的搭建,在這一章中,我們來了解一下Hadoop偽分散式叢集的搭建與用途。

一、Hadoop偽分散式叢集(pseudo distributed cluster)

1、簡介

hadoop的pseudo distributed cluster(偽分散式叢集),就是在一臺主機上模擬多個主機。即hadoop的守護程式在本地計算機(這個指的是Linux虛擬機器)上執行,模擬叢集環境,並且是相互獨立的Java程序。

在這種模式下,Hadoop使用的是分散式檔案系統,各個作業也是由ResourceManager服務來管理的獨立程序。

比local mode 多了程式碼除錯功能,允許檢查記憶體使用情況,HDFS輸入輸出,以及其他的守護程序互動。

2、用途

類似於完全分散式模式下的叢集。因此,這種模式常用來開發測試Hadoop程式的執行是否正確。

二、搭建偽分散式

安裝前說明:

1、普通使用者:hyxy
2、建立~/apps目錄,用於管理軟體包
3、將jdk-7u80-linux-x64.tar.gz   和  hadoop-2.7.3.tar.gz  上傳到/home/hyxy/apps/目錄下

第一步、安裝JDK,配置環境變數

使用tar指令將jdk的軟體包解壓到apps目錄下,後刪除軟體包,然後建立一個軟連結jdk.soft

[[email protected] apps ]$  tar -zxv -f  jdk-7u80-linux-x64.tar.gz。
[[email protected] apps]$ rm jdk-7u80-linux-x64.tar.gz    #解壓後刪除軟體包,節省空間
[[email protected] apps]$ ln -s jdk1.7.0_80/ jdk.soft    #軟連結叫jdk.soft

我們在~/.bash_profile配置檔案內,配置jdk的環境變數,然後重新載入配置檔案,並檢測java和javac兩個命令

[[email protected] apps]$ vim ~/.bash_profile
............ 
PATH=$PATH:$HOME/bin                                  #可要可不要
 
# jdk environment
JAVA_HOME=/home/hyxy/apps/jdk.soft                    #配置環境變數JAVA_HOME
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH          #千萬別忘記拼接$PATH
export PATH JAVA_HOME

[[email protected] apps]$ source ~/.bash_profile           #重新載入配置檔案
[[email protected] apps]$ java -version                    #檢測jdk版本
java version "1.7.0_80"
............
[[email protected] apps]$ javac                            #測試javac命令

第二步、解壓hadoop,配置環境變數

使用tar指令解壓hadoop軟體包,然後刪除軟體包,再建立軟連結hadoop.soft

[[email protected] apps]$ tar -zxv -f hadoop-2.7.3.tar.gz       #1.解壓軟體包
[[email protected] apps]$ rm hadoop-2.7.3.tar.gz                #2.刪除軟體包
[[email protected] apps]$ ln -s hadoop-2.7.3/ hadoop.soft       #3.建立軟連結hadoop.soft
[[email protected] apps]$ ll
drwxr-xr-x. 9 hyxy hyxy 4096 8月  18 2016 hadoop-2.7.3
lrwxrwxrwx. 1 hyxy hyxy   13 1月   8 11:04 hadoop.soft -> hadoop-2.7.3/
drwxr-xr-x. 8 hyxy hyxy 4096 4月  11 2015 jdk1.7.0_80
lrwxrwxrwx. 1 hyxy hyxy   12 1月   8 10:45 jdk.soft -> jdk1.7.0_80/

在~/.bash_profile配置檔案內,配置hadoop的環境變數,然後重新載入配置檔案,並檢測hadoop命令

[[email protected] apps]$ vim ~/.bash_profile
...............                                 #前面的內容省略了
...............
# hadoop environment                            #追加hadoop環境變數
HADOOP_HOME=/home/hyxy/apps/hadoop.soft         #配置HADOOP_HOME
PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH   #配置path,千萬別忘記拼接$PATH
export PATH HADOOP_HOME

[[email protected] apps]$ source ~/.bash_profile         #重新載入配置檔案
[[email protected] apps]$ hadoop version                 #測試hadoop命令
Hadoop 2.7.3

第三步、修改hadoop偽分散式叢集的配置資訊

首先我們進入hadoop的etc/hadoop目錄下:

[[email protected] apps]$ cd hadoop.soft/etc/hadoop/      #檢查你自己的路徑,不要盲目的抄寫
[[email protected] hadoop]$ ls                            #檢視一下目錄下的配置檔案
capacity-scheduler.xml  hadoop-env.cmd              hadoop-policy.xml        httpfs-signature.secret  kms-log4j.properties  mapred-env.sh               ssl-client.xml.example  yarn-site.xml
configuration.xsl       hadoop-env.sh               hdfs-site.xml            httpfs-site.xml          kms-site.xml          mapred-queues.xml.template  ssl-server.xml.example
container-executor.cfg  hadoop-metrics2.properties  httpfs-env.sh            kms-acls.xml             log4j.properties      mapred-site.xml.template    yarn-env.cmd
core-site.xml           hadoop-metrics.properties   httpfs-log4j.properties  kms-env.sh               mapred-env.cmd        slaves                      yarn-env.sh

修改core-site.xml

[[email protected] hadoop]$ vim core-site.xml      
<configuration>
        <property>
                <name>fs.defaultFS</name>                #屬性: 預設的分散式檔案系統              
                <value>hdfs://localhost:9000</value>     #配置本地地址,port:9000
        </property>
</configuration>

修改hdfs-site.xml

[[email protected] hadoop]$ vim hdfs-site.xml

<configuration>
        <property>
                <name>dfs.replication</name>       #屬性:副本數量
                <value>1</value>                   #給個值 1
        </property>
</configuration>

修改hadoop-env.sh,設定JAVA_HOME=/home/hyxy/apps/jdk.soft

[[email protected] hadoop]$ vim hadoop-env.sh
...............................          #省略了
# The java implementation to use.
export JAVA_HOME=/home/hyxy/apps/jdk.soft      #修改成jdk的安裝路徑

第四步:配置SSH無密登陸

首先檢視一下是否安裝了ssh軟體:rpm -qa | grep ssh。如果沒安裝,就先安裝此軟體。安裝了,就直接進行下面操作。

首先,驗證一下ssh localhost,是否需要密碼:

[[email protected] hadoop]$ ssh localhost
............
[email protected]'s password:              #是需要密碼的

然後配置無密登入。(再次強調,使用普通使用者,不要使用root使用者)

1、生成私鑰和公鑰一對金鑰。輸入命令: ssh-keygen -t rsa 。然後一路回車即可。

[[email protected] ~]$ cd
[[email protected] ~]$ ssh-keygen -t rsa              #執行這個指令串 生成金鑰
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hyxy/.ssh/id_rsa):       #回車
Enter passphrase (empty for no passphrase):                         #回車
Enter same passphrase again:                                        #回車
Your identification has been saved in /home/hyxy/.ssh/id_rsa.       #私鑰檔案
Your public key has been saved in /home/hyxy/.ssh/id_rsa.pub.       #公鑰檔案
The key fingerprint is:
85:b7:6b:04:fe:cd:da:85:47:72:5e:ff:1f:6b:92:74 [email protected]
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|         .       |
|        o o      |
|       . + .     |
|        S o . o .|
|         o + B E.|
|          + = *..|
|         . o = .+|
|          . . o.+|
+-----------------+
[[email protected] ~]$

2、進入.ssh目錄,將公鑰檔案更名為authorized_keys檔案,即可實現ssh連線自己不再需要密碼。確保authorized_keys的許可權為600。

[[email protected] ~]$ cd ~/.ssh                     #進入.ssh目錄
[[email protected] .ssh]$ ll
-rw-------. 1 hyxy hyxy 1675 1月   8 14:54 id_rsa
-rw-r--r--. 1 hyxy hyxy  393 1月   8 14:54 id_rsa.pub
[[email protected] .ssh]$ mv id_rsa.pub authorized_keys   #更名操作
[[email protected] .ssh]$ chmod 600 authorized_keys       #更改許可權

3、結果驗證:

[[email protected] ~]$ ssh localhost            #驗證localhost
Last login: Tue Jan  8 14:57:02 2019 from localhost

[[email protected] ~]$ ssh master              #驗證主機名登入,前提得在/etc/hosts繫結主機名和ip
Last login: Tue Jan  8 14:57:16 2019 from localhost

第五步:格式化分散式檔案系統

使用hdfs namenode -format 來格式化分散式檔案系統

[[email protected] ~]$ hdfs namenode -format

第六步:啟動HDFS

開啟namenode執行緒和datanode執行緒等

[[email protected] ~]$ start-dfs.sh

第七步:檢視執行緒

正常應該至少有四個執行緒,就對了

[[email protected] ~]$ jps
30591 Jps
30194 NameNode
30481 SecondaryNameNode
30288 DataNode

第八步:使用瀏覽器進行訪問hadoop偽分佈叢集

使用linux虛擬機器上的火狐瀏覽器,訪問地址:http://localhost:50070

能看到上述資訊,1個Live Nodes,就保沒錯了。偽分佈搭建完畢。如果還想配置YARN環境的,可以參考官網:https://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-common/SingleCluster.html,這個連結的最下面就是YARN no a Single node的配置了。

三、程式測試

偽分散式叢集搭建好了,我們來執行一個mapreduce程式試試。

第一步:在分散式檔案系統上建立多級目錄/hyxy/input

[[email protected] ~]$ hdfs dfs -mkdir -p /hyxy/input

第二步:在本地建立一個檔案file,內容如下:

[[email protected] ~]$ echo hello world hello kitty you are good >> file

第三步:將file 上傳到分散式檔案系統/hyxy/input目錄下,然後檢視一下

[[email protected] ~]$ hdfs dfs -put file /hyxy/input
[[email protected] ~]$ hdfs dfs -ls  /hyxy/input/
Found 1 items
-rw-r--r--   1 hyxy supergroup         37 2019-01-08 15:46 /hyxy/input/file

第四步:在分散式檔案系統上建立目錄output。用於儲存輸出資料。

[[email protected] ~]$ hdfs dfs -mkdir /hyxy/output

第五步:使用hadoop自帶的單詞統計mapreduce程式,統計file檔案的單詞

[[email protected] ~]$ hadoop jar ./apps/hadoop.soft/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /hyxy/input /hyxy/output/count

第六步:檢視統計結果

[[email protected] ~]$ hdfs dfs -cat /hyxy/output/count/*
are     1
good    1
hello   2
kitty   1
world   1
you     1

可以在瀏覽器上檢視分散式檔案系統

ok。到此為止,偽分散式搭建和案例測試,都完美收官,吼吼吼

-------------------------------如有疑問,敬請留言吧--------------------------------------------------------------------