簡介
這個學期上完了虛擬化與雲計算這門課程,涉及到了大數據的一些實驗,由於Hadoop的單機偽分布式配置在網上還是非常的雜碎,所以我自己寫了個方便自己理解的安裝教程。
環境介紹
OS: Ubuntu 20.04
JDK: OpenJdk 8
Hadoop: 3.13
過程
配置Hadoop用戶
hadoop用戶的創建,並且賦予root權限
useradd -m hadoop -s /bin/bash
passwd hadoop
adduser hadoop sudo
su hadoop
注意我們這里要先進行用戶的登錄產生配置文件才能進行以下的步驟,否則會失敗。
啟用SSH免密登錄
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
輸入指令后,我們可以測試是否成功配置免密登錄。輸入SSH localhost
便知道。
安裝JDK
鑒於目前JDK的版本號更改,本次安裝基於OpenJDK,首先我們可以在清華大學的鏡像站中下載JDK包,我們這里選擇OpenJDK8.
解壓到/usr/lib/jdk/目錄下,並且更名為jdk8,方便辨識。
然后我們需要進行環境變量的修改。
輸入sudo vim /etc/profile
進入vim界面。
鍵入以下內容:
JAVA_HOME=/usr/lib/jdk/jdk8
CLASSPATH=$JAVA_HOME/lib/
PATH=.:$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
相信vim怎么用玩過linux的人都知道。
保存退出后我們需要輸入source /etc/profile
來使環境變量即時生效。
測試安裝配置結果
我們在終端中輸入java -version
可以查看版本號等配置信息
安裝配置Hadoop
首先下載Hadoop,解壓縮到 /usr/local/ 目錄下, 本次試驗中下載的版本是hadoop-3.1.3,更改目錄名稱為/hadoop。修改與hadoop相關的配置文件,分別是core-site.xml, hadoop-env.sh, hdsf-site.xml, mapred-site.xml, yarn-site.xml。
首先我們先把Hadoop的目錄配置到環境變量中。
然后輸入source /etc/profile
來使環境變量即時生效。
我們先切換到/usr/local/hadoop目錄下進行以下操作。
- core-site.xml配置
cd etc/Hadoop
vim core-site.xml
進入編輯界面,輸入以下內容並且保存退出。
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
2. hadoop-env.sh配置
vim etc/hadoop/hadoop-env.sh
找到下面兩條指令改成自己對應的目錄,然后保存退出。
3. hdfs-site.xml配置
vim etc/Hadoop/hdfs-site.xml
,插入以下內容並且退出。
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
然后需要創建tmp, dfs, name, data目錄,這里我把指令直接放出來,按照自己機器的不同進行修改即可。
cd ../../
sudo mkdir tmp
cd tmp
mkdir dfs
cd dfs
mkdir name, data
- mapred-site.xml
輸入vim etc/Hadoop/mapred-site.xml
進入編輯界面,插入以下內容。
<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>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
</property>
保存退出。
5. yarn-site.xml
如果我們不配置這個,我們會無法正常啟動機器自帶的wordcount等jar包。
我們輸入vim etc/Hadoop/yarn-site.xml
進入編輯界面,輸入以下內容並保存退出即可。
<!-- Site specific YARN configuration properties -->
<!-- reducer取數據的方式是mapreduce_shuffle -->
<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><property>
<name>yarn.application.classpath</name>
<value>/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/lib/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*
</value>
</property>
格式化節點
我們首次運行的時候,需要格式化存儲節點,否則無法正常啟動。
./bin/hdfs namenode -format
測試Hadoop配置情況
我們進入Hadoop的根目錄,輸入 ./sbin/start-all.sh
,機器會提示正在啟動,當啟動結束后我們可以輸入jps
查看是否啟動成功。
結語
至此,我們完成了Hadoop的單機偽分布式配置,雖然這只是一門普通的課程,但是是我感覺到在大學里學到最接近目前主流技術的一門課了。
參考文獻
記錄Ubuntu19.04安裝hadoop3.2.1
在 Ubuntu16.04 上搭建 Hadoop-2.8.0 偽分布式環境