1. 程式人生 > 實用技巧 >Hadoop完整搭建過程(二):偽分佈模式

Hadoop完整搭建過程(二):偽分佈模式

1 偽分佈模式

偽分佈模式是執行在單個節點以及多個Java程序上的模式。相比起本地模式,需要進行更多配置檔案的設定以及sshYARN相關設定。

2 Hadoop配置檔案

修改Hadoop安裝目錄下的三個配置檔案:

  • etc/hadoop/core-site.xml
  • etc/hadoop/hdfs-site.xml
  • etc/hadoop/hadoop-env.sh

2.1 core-site.xml

首先修改core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
    <property>
    	<name>hadoop.tmp.dir</name>
    	<value>/usr/local/hadoop/tmp</value>
    </property>
</configuration>
  • fs.defaultFS設定的是HDFS的地址,設定執行在本地的9000埠上
  • hadoop.tmp.dir設定的是臨時目錄,如果沒有設定的話預設在/tmp/hadoop-${user.name}中,系統重啟後會導致資料丟失,因此修改這個臨時目錄的路徑

接著建立該臨時目錄:

mkdir -p /usr/local/hadoop/tmp

2.2 hdfs-site.xml

接著修改hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

dfs.replication設定的是HDFS儲存的臨時備份數量,因為偽分佈模式中只有一個節點,所以設定為1

2.3 hadoop-env.sh

修改該檔案新增JAVA_HOME環境變數,就算JAVA_HOME

  • ~/.bashrc
  • ~/.bash_profile
  • /etc/profile

等中設定了,執行時也是會提示找不到JAVA_HOME,因此需要手動在hadoop-env.sh中設定JAVA_HOME

3 本地無密碼ssh連線

下一步需要設定本地無密碼ssh連線,首先先檢查確保開啟sshd服務:

systemctl status sshd

開啟後可以直接localhost連線:

ssh localhost

輸入自己的使用者密碼後就可以訪問了,但是這裡需要的是無密碼連線,因此配置金鑰認證連線的方式:

ssh-keygen -t ed25519 -a 100 
cat ~/.ssh/id_25519.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

這裡生成公私鑰後把公鑰新增到authorized_keys中,並且修改許可權,需要注意600許可權,只能本使用者有寫許可權。

然後直接ssh localhost就可以連線本地主機了。

4 執行

4.1 格式化HDFS

這裡以單一節點的模式執行,首先格式化HDFS

# HADOOP為Hadoop安裝目錄
HADOOP/bin/hdfs namenode -format

格式化是對HDFS中的DataNode進行分塊,統計所有分塊後的初始元資料,儲存在NameNode中。

格式化成功後會在上面配置檔案中設定的臨時目錄中生成dfs目錄,如下所示:

裡面只有一個目錄:dfs/name/current,其中tmp/dfs/name/current的檔案如下:

檔案說明如下:

  • fsimageNameNode元資料在記憶體滿後,持久化儲存到的檔案
  • fsimage*.md5:校驗檔案,用於校驗fsimage的完整性
  • seen_txid:存放transactionID檔案,format之後為0,表示NameNode裡面的edits_*檔案的尾數
  • VERSION:儲存建立時間,namespaceIDblockpoolIDstorageTypecTimeclusterIDlayoutVersion

關於VERSION的說明:

  • namespaceIDHDFS唯一識別符號,在HDFS首次格式化後生成
  • blockpoolID:標識一個block pool,跨叢集全域性唯一
  • storageType:儲存什麼程序的資料結構資訊
  • cTime:建立時間
  • clusterID:系統生成或指定的叢集ID,可以使用-clusterid指定
  • layoutVersion:表示HDFS永久性資料結構版本的資訊

4.2 啟動NameNode

HADOOP/sbin/start-dfs.sh

然後可以通過

localhost:9870

訪問NameNode

4.3 測試

生成輸入目錄,並使用配置檔案作為輸入:

bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/USER_NAME # USER_NAME為您的使用者名稱
bin/hdfs dfs -mkdir input
bin/hdfs dfs -put etc/hadoop/*.xml input

測試:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar grep input output 'dfs[a-z.]+'

獲取輸出:

bin/hdfs dfs -get output output # 複製輸出到output目錄
cat output/*

停止:

sbin/stop-hdfs.sh

5 使用YARN配置

除了可以將單個節點以偽分佈模式啟動,還可以通過YARN統一排程,只需要適當修改配置檔案。

5.1 配置檔案

修改以下檔案:

  • HADOOP/etc/hadoop/mapred-site.xml
  • HADOOP/etc/hadoop/yarn-site.xml

5.1.1 mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
  • mapreduce.framework.name指定了MapReduce執行在YARN
  • mapreduce.application.classpath指定了類路徑

5.1.2 yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>
  • yarn.nodemanager.aux-services:執行在NodeManager上執行的附屬服務
  • yarn.nodemanager.env-whitelist:環境變數通過從NodeManagers的容器繼承的環境屬性

5.2 執行

sbin/start-yarn.sh

執行後就可以通過

localhost:8088

訪問:

停止:

sbin/stop-yarn.sh

6 參考