部署安裝包
wget http://mirrors.shu.edu.cn/apache/hadoop/common/hadoop-2.9.1/hadoop-2.9.1.tar.gz
tar xzvf hadoop-2.9.1.tar.gz
mv hadoop-2.9.1.tar.gz /usr/local/hadoop
配置環境變量
vi /etc/profile
添加如下內容:
# hadoop
export HADOOP_HOME=/usr/local/hadoop
export $HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
source /etc/profile
配置JAVA_HOME
需要配置的文件包括 /usr/local/hadoop/etc/hadoop
目錄下的 hadoop-env.sh
、mapred-env.sh
、yarn-env.sh
三個文件。
vi hadoop-env.sh
# 輸入/修改以下內容
export JAVA_HOME=/usr/local/jdk
該步驟不能省,也不能使用 export JAVA_HOME=${JAVA_HOME}
,否則後面會報找不到JAVA_HOME的錯誤。
配置core-site.xml
cd /usr/local/hadoop/etc/hadoop
vi core-site.xml
<configuration>
# 配置HDFS的地址
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:8020</value>
</property>
# 配置臨時目錄,比如HDFS的NameNode數據默認都存放這個目錄下
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
</property>
</configuration>
配置、格式化、啓動HDFS
配置hdfs-site.xml
cd /usr/local/hadoop/etc/hadoop
vi hdfs-site.xml
<configuration>
# 配置的是HDFS存儲時的備份數量,因爲這裏是僞分佈式環境只有一個節點,所以這裏設置爲1
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
格式化HDFS
格式化是對HDFS這個分佈式文件系統中的DataNode進行分塊,統計所有分塊後的初始元數據的存儲在NameNode中。
格式化後,查看core-site.xml裏hadoop.tmp.dir(本例是/opt/data目錄)指定的目錄下是否有了dfs目錄,如果有,說明格式化成功。
hdfs namenode –format
啓動namenode\datanode\secondarynamenode
cd /usr/local/hadoop/sbin/
./hadoop-daemon.sh start namenode
./hadoop-daemon.sh start datanode
./hadoop-daemon.sh start secondarynamenode
通過jps
確認是否啓動成功
jps
3840 DataNode
2465 QuorumPeerMain
2769 Kafka
3978 Jps
3724 NameNode
3933 SecondaryNameNode
創建HDFS軟連接
爲了便於使用命令行操作hdfs,可以創建軟連接,從而可以在系統任意位置直接使用 hdfs
操作。
cd /usr/bin/
ln -s /usr/local/hadoop/bin/hdfs hdfs
測試上傳下載
測試創建目錄
[root@localhost bin]# hdfs dfs -mkdir /demo
測試本地文件上傳
hdfs dfs -put /home/install/zookeeper-3.5.4-beta.tar.gz /demo
hdfs dfs -put a.txt /demo
讀取HDFS上的文件內容
hdfs dfs -cat /demo/a.txt
測試從HDFS上下載文件到本地
hdfs dfs -get /demo/zookeeper-3.5.4-beta.tar.gz
配置、啓動YARN
配置mapred-site.xml
默認沒有mapred-site.xml文件,但是有個mapred-site.xml.template配置模板文件。複製模板生成mapred-site.xml
cd /usr/local/hadoop/etc/hadoop/
cp mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<configuration>
# 指定mapreduce運行在yarn框架上
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
配置yarn-site.xml
vi yarn-site.xml
<configuration>
# 配置了yarn的默認混洗方式,選擇爲mapreduce的默認混洗算法
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
# 指定了Resourcemanager運行在哪個節點上,注意不能寫localhost,否則瀏覽器訪問不到管理界面
<property>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.128.128</value>
</property>
</configuration>
啓動Resourcemanager \nodemanager
cd /usr/local/hadoop/sbin
./yarn-daemon.sh start resourcemanager
./yarn-daemon.sh start nodemanager
通過瀏覽器訪問yarn管理界面
http://192.168.128.128:8088
創建yarn命令軟連接
cd /usr/bin
ln -s /usr/local/hadoop/bin/yarn yarn
測試MR實例
在Hadoop的share目錄裏,自帶了一些jar包,裏面帶有一些mapreduce實例小例子,位置在/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar
,可以運行這些例子體驗剛搭建好的Hadoop平臺,我們這裏來運行最經典的WordCount實例。
創建測試用的input文件
創建目錄
hdfs dfs -mkdir -p /wordcountdemo/input
創建測試用文件
touch wc.input
vi wc.input
## 輸入一些文字
將文件上傳到目錄
hdfs dfs -put wc.input /wordcountdemo/input
運行WordCount MapReduce Job
yarn jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.1.jar wordcount /wordcountdemo/input /wordcountdemo/output
查看輸出的文件
hdfs dfs -ls /wordcountdemo/output
可以看到如下文件
Found 2 items
-rw-r--r-- 1 root supergroup 0 2018-07-26 23:32 /wordcountdemo/output/_SUCCESS
-rw-r--r-- 1 root supergroup 61 2018-07-26 23:32 /wordcountdemo/output/part-r-00000
- _SUCCESS:是一個空文件,代表執行成功
- part-r-00000:結果文件,其中
-r-
說明這個文件是Reduce階段產生的結果。mapreduce程序執行時,可以沒有reduce階段,但是肯定會有map階段,如果沒有reduce階段這個地方有是-m-
。
查看輸出結果
hdfs dfs -cat /wordcountdemo/output/part-r-00000
america 1
china 1
hadoop 1
hive 1
mapreduce 1
test 1
wtian 1
停止hadoop
cd /usr/local/hadoop/sbin
./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh stop datanode
./hadoop-daemon.sh stop resourcemanager
./hadoop-daemon.sh stop nodemanager
開啓歷史服務
Hadoop開啓歷史服務可以在web頁面上查看Yarn上執行job情況的詳細信息。可以通過歷史服務器查看已經運行完的Mapreduce作業記錄,比如用了多少個Map、用了多少個Reduce、作業提交時間、作業啓動時間、作業完成時間等信息。
./mr-jobhistory-daemon.sh start historyserver
開啓後,可以通過web頁面查看歷史信息
http://192.168.128.128:19888
開啓日誌聚集
MapReduce是在各個機器上運行的,在運行過程中產生的日誌存在於各個機器上,爲了能夠統一查看各個機器的運行日誌,將日誌集中存放在HDFS上,這個過程就是日誌聚集。
配置日誌聚集
配置的文件是yarn-site.xml
。
cd /usr/local/hadoop/etc/hadoop
vi yarn-site.xml
# 是否啓用日誌聚集功能
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
# 設置日誌保留時間,單位是秒。
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
重啓yarn進程
cd /usr/local/hadoop/sbin
./stop-yarn.sh
./start-yarn.sh