在 CentOS 7.2 下安裝 Hadoop 2.7.5 並搭建偽分散式環境的方法
資源下載
一、建立 Hadoop 使用者
建立 hadoop 使用者,並分配以使用者名稱為家目錄/home/hadoop,並將其加入到sudo使用者組,建立好使用者之後,以 hadoop 使用者登入:
sudo useradd -m hadoop -s /bin/bash
sudo adduser hadoop sudo
sudo passwd hadoop # 設定hadoop使用者密碼
二、安裝 JDK、Hadoop 及配置環境變數
安裝,解壓 JDK 到/usr/lib/java/路徑下,Hadoop 到/usr/local/etc/hadoop/路徑下:
tar zxf ./hadoop-2.6.*.tar.gz
mv ./hadoop-2.6.* /usr/local/etc/hadoop # 將 /usr/local/etc/hadoop作為Hadoop的安裝路徑
解壓完成之後,可驗證 hadoop 的可用性:
cd /usr/local/etc/hadoop
./bin/hadoop version # 檢視hadoop的版本資訊
配置環境,編輯 “/etc/profile” 檔案,在其後新增如下資訊:
export HADOOP_HOME=/usr/local/etc/hadoop
export JAVA_HOME=/usr/lib/java/jdk1.8.0 _45
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
使配置的變數生效:
source /etc/profile
三、測試一下
在此我們可以執行一個簡單的官方 Demo:
cd `echo $HADOOP_HOME` # 到hadoop安裝路徑
mkdir ./input
cp ./etc/hadoop/*.xml ./input
hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
四、Hadoop 的偽分散式環境搭建
什麼是偽分散式?Hadoop 偽分散式模式是在一臺機器上模擬 Hadoop 分散式,單機上的分散式並不是真正的分散式,而是使用執行緒模擬的分散式。分散式和偽分散式這兩種配置也很相似,唯一不同的地方是偽分散式是在一臺機器上配置,也就是名位元組點(namenode)和資料節點(datanode)均是同一臺機器。
需要配置的檔案有core-site.xml和hdfs-site.xml這兩個檔案他們都位於${HADOOP_HOME}/etc/hadoop/資料夾下。
其中core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
<final>true</final>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/ylf/hadoop_tmp</value>
</property>
</configuration>
修改 hdfs-site.xml:
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/ylf/hadoop/dfs/namenode</value>
<final>true</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/ylf/hadoop/dfs/datanode</value>
<final>true</final>
</property>
<property>
<name>dfs.http.address</name>
<value>localhost:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
修改 mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>hdfs://localhost:9001</value>
</property>
<property>
<name>mapred.system.dir</name>
<value>file:/home/ylf/hadoop/mapred/system</value>
<final>true</final>
</property>
<property>
<name>mapred.local.dir</name>
<value>file:/home/ylf/hadoop/mapred/local</value>
<final>true</final>
</property>
</configuration>
修改 yarn-site.xml:
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>shuffle service that needs to be set for Map Reduce to run</description>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
<description>hostname of Resource Manager</description>
</property>
</configuration>
格式化 hdfs
進入 hadoop home 目錄
bin/hdfs namenode -format
啟動叢集
sbin/start-all.sh
輸入 jps 指令檢視程序
五、啟動 HDFS
啟動 HDFS 的指令碼位於 Hadoop 目錄下的sbin資料夾中,即:
cd `echo $HADOOP_HOME`
./sbin/start-dfs.sh # 啟動HDFS指令碼
在執行start-dfs.sh指令碼啟動 HDFS 時,可能出現類似如下的報錯內容:
localhost: Error: JAVA_HOME is not set and could not be found.
很明顯,是JAVA_HOME沒找到,這是因為在hadoop-env.sh
指令碼中有個
JAVA_HOME=${JAVA_HOME}
,所以只需將${JAVA_HOME}
替換成你的 JDK 的路徑即可解決:
echo $JAVA_HOME # /usr/lib/java/jdk1.*.*_**
vim ./etc/hadoop/hadoop-env.sh # 將‘export JAVA_HOME=${JAVA_HOME}’欄位替換成‘export JAVA_HOME=/usr/lib/java/jdk1.*.*_**’即可
再次執行
`echo $HADOOP_HOME`/sbin/start-all.sh
可以執行以下命令判斷是否啟動:
jps
對應的啟動,自然也有關閉咯:
`echo $HADOOP_HOME`/sbin/stop-dfs.sh
六、執行偽分散式例項
以上的 “四、測試一下” 只是使用的是本機的源生檔案執行的測試 Demo 例項。既然搭建好了偽分散式的環境,那就使用分散式上儲存(HDFS)的資料來進行一次 Demo 測試:
先將資料來源搞定,也就是仿照 “四” 中的 Demo 一樣,新建一個資料夾作為資料來源目錄,並新增一些資料:
hdfs dfs -mkdir /input # 這裡的檔名必須要以‘/’開頭,暫時只瞭解是hdfs是以絕對路徑為基礎,因為沒有 ‘-cd’這樣的命令支援
hdfs dfs -put `echo $HADOOP_HOME`/etc/hadoop/*.xml /input
也可以檢視此時新建的input目錄裡面有什麼:
hdfs dfs -ls /
hdfs dfs -ls /input
再次執行如之前執行的那個 Demo
hadoop jar /usr/local/etc/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep /input /output 'dfs[a-z.]+'
再次檢視 HDFS 中的目錄:
hdfs dfs -ls /
hdfs dfs -cat /output*