1. 程式人生 > >3-2 Hadoop偽分布模式配置部署

3-2 Hadoop偽分布模式配置部署

方法 包括 -name hbase 更多 配置文件 lse pac 小結

Hadoop偽分布模式配置部署

一、實驗介紹

1.1 實驗內容

  • hadoop配置文件介紹及修改
  • hdfs格式化
  • 啟動hadoop進程,驗證安裝

1.2 實驗知識點

  • hadoop核心配置文件
  • 文件系統的格式化
  • 測試WordCount程序

1.3 實驗環境

  • hadoop2.7.6
  • CentOS6終端

1.4 適合人群

本課程難度為一般,屬於初級級別課程,適合具有hadoop基礎的用戶。

1.5 相關文件

https://pan.baidu.com/s/1a_Pjl8uJ2d_-r1hbN05fWA

二、Hadoop偽分布式模式配置

註意:本實驗需要按照上一節單機模式部署後繼續進行操作,因此您必須先完成上一節實驗。

2.1 相關配置文件修改

(若文件中沒有添加的配置項,則系統為默認值,不會對該實驗產生影響)

1).修改.bashrc:

由於平臺環境與該實驗hadoop版本不匹配問題,需要對.bashr文件中末尾處的環境變量做修改

$ vim /home/hadoop/.bashrc

修改為:

export HADOOP_HOME=/home/hadoop/hdfs
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/hadoop/hdfs/bin:/home/hadoop/hdfs/sbin

由於本實驗不會用到hbase和hive,所以相關環境變量刪除。

提醒:修改了配置文件後,如何使變量生效?上一節我們有使用到過,大家自行回顧一下。

2).修改core-site.xml:

$ vim /home/hadoop/hdfs/etc/hadoop/core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/tmp</value>
   </property>
</configuration>

常用配置項說明:

  • fs.defaultFS這是默認的HDFS路徑。當有多個HDFS集群同時工作時,用戶在這裏指定默認HDFS集群,該值來自於hdfs-site.xml中的配置。
  • fs.default.name這是一個描述集群中NameNode結點的URI(包括協議、主機名稱、端口號),集群裏面的每一臺機器都需要知道NameNode的地址。DataNode結點會先在NameNode上註冊,這樣它們的數據才可以被使用。獨立的客戶端程序通過這個URI跟DataNode交互,以取得文件的塊列表。
  • hadoop.tmp.dir 是hadoop文件系統依賴的基礎配置,很多路徑都依賴它。如果hdfs-site.xml中不配置namenode和datanode的存放位置,默認就放在/tmp/hadoop-${user.name}這個路徑中。

更多說明請參考core-default.xml,包含配置文件所有配置項的說明和默認值。

3).修改hdfs-site.xml:

$ vim /home/hadoop/hdfs/etc/hadoop/hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

常用配置項說明:

  • dfs.replication它決定著系統裏面的文件塊的數據備份個數。對於一個實際的應用,它應該被設為3(這個數字並沒有上限,但更多的備份可能並沒有作用,而且會占用更多的空間)。少於三個的備份,可能會影響到數據的可靠性(系統故障時,也許會造成數據丟失)
  • dfs.data.dir這是DataNode結點被指定要存儲數據的本地文件系統路徑。DataNode結點上的這個路徑沒有必要完全相同,因為每臺機器的環境很可能是不一樣的。但如果每臺機器上的這個路徑都是統一配置的話,會使工作變得簡單一些。默認的情況下,它的值為file://${hadoop.tmp.dir}/dfs/data這個路徑只能用於測試的目的,因為它很可能會丟失掉一些數據。所以這個值最好還是被覆蓋。
  • dfs.name.dir這是NameNode結點存儲hadoop文件系統信息的本地系統路徑。這個值只對NameNode有效,DataNode並不需要使用到它。上面對於/temp類型的警告,同樣也適用於這裏。在實際應用中,它最好被覆蓋掉。

更多說明請參考hdfs-default.xml,包含配置文件所有配置項的說明和默認值。

4).修改mapred-site.xml:

$ cp /home/hadoop/hdfs/etc/hadoop/mapred-site.xml.template /home/hadoop/hdfs/etc/hadoop/mapred-site.xml
$ vim /home/hadoop/hdfs/etc/hadoop/mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 
<!-- Put site-specific property overrides in this file. -->
 
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

常用配置項說明:

  • mapred.job.trackerJobTracker的主機(或者IP)和端口。

更多說明請參考mapred-default.xml,包含配置文件所有配置項的說明和默認值

5).修改yarn-site.xml:

$ vim /home/hadoop/hdfs/etc/hadoop/yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
 
</configuration>

常用配置項說明:

  • yarn.nodemanager.aux-services通過該配置,用戶可以自定義一些服務

更多說明請參考yarn-default.xml,包含配置文件所有配置項的說明和默認值

6). 修改 hadoop-env.sh:

$ sudo vim /home/hadoop/hdfs/etc/hadoop/hadoop-env.sh

修改 JAVA_HOME 如下:

export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export HADOOP_CONF_DIR=/home/hadoop/hdfs/etc/hadoop
 

這樣簡單的偽分布式模式就配置好了。

三、格式化HDFS文件系統

在使用hadoop前,必須格式化一個全新的HDFS安裝,通過創建存儲目錄和NameNode持久化數據結構的初始版本,格式化過程創建了一個空的文件系統。由於NameNode管理文件系統的元數據,而DataNode可以動態的加入或離開集群,因此這個格式化過程並不涉及DataNode。同理,用戶也無需關註文件系統的規模。集群中DataNode的數量決定著文件系統的規模。DataNode可以在文件系統格式化之後的很長一段時間內按需增加。

3.1 格式化HDFS文件系統

$ hadoop namenode -format

會輸出如下信息,則表格式化HDFS成功:

DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
 
INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = [你的主機名]/[你的ip]
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.7.6
...
...
INFO util.GSet: Computing capacity for map NameNodeRetryCache
INFO util.GSet: VM type       = 64-bit
INFO util.GSet: 0.029999999329447746% max memory 889 MB = 273.1 KB
INFO util.GSet: capacity      = 2^15 = 32768 entries
INFO namenode.NNConf: ACLs enabled? false
INFO namenode.NNConf: XAttrs enabled? true
INFO namenode.NNConf: Maximum size of an xattr: 16384
INFO namenode.FSImage: Allocated new BlockPoolId: BP-549895748-192.168.42.3-1489569976471
INFO common.Storage: Storage directory /home/hadoop/hadop2.6-tmp/dfs/name has been successfully formatted.
INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
NFO util.ExitUtil: Exiting with status 0
INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at [你的主機名]//[你的ip]
************************************************************/
hadoop@c81af9a07ade:/opt/hadoop-2.7.6/bin$ jps

四、Hadoop集群啟動

4.1 啟動hdfs守護進程,分別啟動NameNode和DataNode

$ start-dfs.sh

輸出如下(可以看出分別啟動了namenode, datanode, secondarynamenode,因為我們沒有配置secondarynamenode,所以地址為0.0.0.0):

Starting namenodes on []
hadoop@localhost‘s password:
localhost: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-G470.out
hadoop@localhost‘s password:
localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-hadoop-datanode-G470.out
localhost: OpenJDK 64-Bit Server VM warning: You have loaded library /usr/local/hadoop/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
localhost: It‘s highly recommended that you fix the library with ‘execstack -c <libfile>‘, or link it with ‘-z noexecstack‘.
Starting secondary namenodes [0.0.0.0]
hadoop@0.0.0.0‘s password:
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-secondarynamenode-G470.out
 

4.2 啟動yarn,使用如下命令啟ResourceManager和NodeManager:

$ start-yarn.sh

4.3 檢查是否運行成功

打開瀏覽器

  • 輸入:http://localhost:8088進入ResourceManager管理頁面
  • 輸入:http://localhost:50070進入HDFS頁面

可能出現的問題及調試方法:

啟動偽分布後,如果活躍節點顯示為零,說明偽分布沒有真正的啟動。原因是有的時候數據結構出現問題會造成無法啟動datanode。如果使用hadoop namenode -format重新格式化仍然無法正常啟動,原因是/tmp中的文件沒有清除,則需要先清除/tmp/hadoop/*再執行格式化,即可解決hadoop datanode無法啟動的問題。具體步驟如下所示:

# 刪除hadoop:/tmp
$ hadoop fs -rmr /tmp
# 停止hadoop
$ stop-all.sh
# 刪除/tmp/hadoop*
$ rm -rf /tmp/hadoop*
# 格式化
$ hadoop namenode -format
# 啟動hadoop
$ start-all.sh

五、測試驗證

測試驗證還是使用上一節的 WordCount。

不同的是,這次是偽分布模式,使用到了 hdfs,因此我們需要把文件拷貝到 hdfs 上去。

首先創建相關文件夾(要一步一步的創建):

$ hadoop dfs -mkdir /user
$ hadoop dfs -mkdir /user/hadoop
$ hadoop dfs -mkdir /user/hadoop/input

創建多層目錄的簡便方法:

$ hadoop dfs -mkdir -p /user/hadoop/input

5.1 創建輸入的數據,采用/etc/protocols文件作為測試

先將文件拷貝到 hdfs 上:

$ hadoop dfs -put /etc/protocols /user/hadoop/input

技術分享圖片

5.2 執行Hadoop WordCount應用(詞頻統計)

# 如果存在上一次測試生成的output,由於hadoop的安全機制,直接運行可能會報錯,所以請手動刪除上一次生成的output文件夾
$ hadoop jar /home/hadoop/hdfs/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.7.6-sources.jar wordcount /user/hadoop/input output

執行過程截圖(部分):

技術分享圖片

5.3 查看生成的單詞統計數據

$ hadoop dfs -cat /user/hadoop/output/*

技術分享圖片

六、關閉服務

$ stop-dfs.sh
$ stop-yarn.sh

七、小結

本實驗講解如何在單機模式下繼續部署Hadoop為偽分布模式。

八、思考題

偽分布模式和單機模式配置上的區別主要是哪些?是否可以推論出如何部署真實的分布式Hadoop環境?

九、參考文檔

本實驗參考下列文檔內容制作:

  • http://www.cnblogs.com/kinglau/p/3796164.html

實驗樓練習平臺:http://www.shiyanlou.com/register?inviter=NTY0MzE5NjA1NjM3

3-2 Hadoop偽分布模式配置部署