Hadoop完整搭建過程(二):偽分佈模式
1 偽分佈模式
偽分佈模式是執行在單個節點以及多個Java程序上的模式。相比起本地模式,需要進行更多配置檔案的設定以及ssh
、YARN
相關設定。
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
的檔案如下:
檔案說明如下:
fsimage
:NameNode
元資料在記憶體滿後,持久化儲存到的檔案fsimage*.md5
:校驗檔案,用於校驗fsimage
的完整性seen_txid
:存放transactionID
檔案,format
之後為0,表示NameNode
裡面的edits_*
檔案的尾數VERSION
:儲存建立時間,namespaceID
、blockpoolID
、storageType
、cTime
、clusterID
、layoutVersion
關於VERSION
的說明:
namespaceID
:HDFS
唯一識別符號,在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