[Hadoop] 在集羣中安裝Hadoop

[Hadoop] 在集羣中安裝Hadoop

類似的教程其實有很多,網上隨便一搜就是一大把。這裏簡單的記錄一下本人的安裝過程,留給本人或者後人參考。

集羣配置

內網互聯的三臺機器,IP分別爲10.0.0.1,10.0.0.2,10.0.0.3

我們的目標配置是讓10.0.0.1做主節點,也就是master;所有節點都是從節點,也就是worker。

這樣的:

10.0.0.1 10.0.0.2 10.0.0.3
Namenode × ×
SecondaryNameNode × ×
Datanode
ResourceManager × ×

目標的Hadoop版本是2.7.7。Java版本是1.8.0。三臺機器都是Ubuntu20.04。

注意:三臺機器需要能相互ssh免密登錄。由於這個我早就配置過,所以就不寫過程了。這個可以參考網上的其他教程。

下載Hadoop

Index of /dist/hadoop/common/hadoop-2.7.7 (apache.org) 下載。將文件放到10.0.0.1上,然後解壓。

tar xvzf hadoop-2.7.7.tar.gz

修改配置文件

接下來需要進入hadoop-2.7.7文件夾,修改裏面的一些配置文件。所有要修改的文件都在hadoop-2.7.7/etc/hadoop/這個文件夾下。

  1. hadoop-env.sh
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/

將其中的JAVA_HOME換成你的Java的安裝路徑即可。

  1. core-site.xml
<configuration>
  <property>
    <!-- 指定 namenode 的 hdfs 協議文件系統的通信地址 -->
    <name>fs.defaultFS</name>
    <value>hdfs://10.0.0.1:8020</value>
  </property>
  <property>
    <!-- 指定 hadoop 集羣存儲臨時文件的目錄 -->
    <name>hadoop.tmp.dir</name>
    <value>/data/hadoop_tmp</value>
  </property>
</configuration>
  • fs.defaultFS規定的是namenode的地址,也就是master的地址。這裏我們規定namenode的地址在主節點10.0.0.1上。

  • hadoop.tmp.dirhadoop運行時生成的臨時文件的存放目錄。這個目錄放到哪都可以。因爲我的/data是一塊很大的磁盤,所以我選擇將文件放在這裏。

  1. hdfs-site.xml
<configuration>
  <property>
    <!-- 指定 HDFS 副本的數量 -->
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <!-- nn web端訪問地址-->
  <property>
    <name>dfs.namenode.http-address</name>
    <value>10.0.0.1:9870</value>
  </property>
	<!-- 2nn web端訪問地址-->
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>10.0.0.2:9868</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/data/hadoop_tmp/dfs/name</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/data/hadoop_tmp/dfs/data</value>
  </property>
</configuration>
  • dfs.replication指hdfs中副本的數量。我不需要副本,所以設爲1就行。
  • dfs.namenode.http-address:在namenode上的web ui界面,其中的IP地址10.0.0.1要和前面namenode的IP地址相同。這個配置不寫也行。
  • dfs.namenode.secondary.http-address:在secondary namenode上的web ui界面,其中的IP地址10.0.0.2規定了哪臺機器是secondary namenode。secondary namenode不能和namenode相同。不過我其實不需要secondary,因此這個配置也可以不寫。
  • dfs.namenode.name.dir:存放namenode信息的目錄,這個只會在namenode上用到。我將其放在了前文hadoop.tmp.dir的裏面。
  • dfs.datanode.data.dir:在datanode上存放data的目錄,這個在每個datanode上都會用到。我也將其放在了hadoop.tmp.dir裏面。
  1. yarn-site.xml
<configuration>
  <!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
  <!-- 指定ResourceManager的地址-->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>10.0.0.1</value>
  </property>
</configuration>
  • yarn.nodemanager.aux-services:這個我不是很懂。看別人都這麼做,我就也這麼做了。
  • yarn.resourcemanager.hostname:這裏規定resource manager也是10.0.0.1
  1. mapred-site.xml

先創建mapred-site.xml

cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml

然後修改:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>
  1. slaves
10.0.0.1
10.0.0.2
10.0.0.3

裏面是所有worker的IP。

部署到集羣上

將配置好的hadoop文件夾拷貝到集羣中的每個服務器上。後續的命令需要在每臺機器上執行:

  • 將hadoop放到系統目錄下:
sudo mv hadoop-2.7.7 /usr/local/hadoop
  • 創建前面dfs需要的文件夾:
sudo mkdir -p /data/hadoop_tmp
sudo mkdir -p /data/hadoop_tmp/dfs
sudo mkdir -p /data/hadoop_tmp/dfs/name
sudo mkdir -p /data/hadoop_tmp/dfs/data
  • 給用戶修改這些文件夾的權限
sudo chown -R zcq /usr/local/hadoop
sudo chown -R zcq /data/hadoop_tmp
  • .bashrc中,將hadoop路徑添加到PATH中。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

至此Hadoop就部署完成了。

測試

用下面的流程測試我們是否成功部署了hadoop。

  • 格式化hdfs namenode。
hdfs namenode -format

注意:如果需要重複運行上面的指令的話,需要將先臨時文件夾(/data/hadoop_tmp)清空。

  • 開啓dfs服務
start-dfs.sh
  • 開啓yarn
start-yarn.sh
  • 最後用這條指令確認運行成功
jps

在主節點10.0.0.1上,命令的輸出如下:

247699 Worker
245616 NameNode
247335 Master
246437 ResourceManager
245877 DataNode
286815 Jps
246671 NodeManager

10.0.0.2上,命令的輸出如下:

397314 Jps
389809 SecondaryNameNode
390305 Worker

10.0.0.3上,命令的輸出如下:

3988099 Worker
3993955 Jps
  • 最後,關閉yarn和dfs
stop-yarn.sh
stop-dfs.sh
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章