[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/
這個文件夾下。
hadoop-env.sh
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64/
將其中的JAVA_HOME
換成你的Java的安裝路徑即可。
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.dir
是hadoop
運行時生成的臨時文件的存放目錄。這個目錄放到哪都可以。因爲我的/data
是一塊很大的磁盤,所以我選擇將文件放在這裏。
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
裏面。
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
。
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>
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