職場知識思維導圖
0. 搭建前準備
(1) Linux環境,本文以Ubuntu16.04為例(VMware中虛擬出的環境),並且以及做了ssh免密登入、主機名-ip對映以及固定ip操作
(2) Hadoop 2.9.2程式包
(3) JDK1.8+(Linux版)
1. 搭建前相關約束
(1) 所有的安裝包以及第三方軟體包都置於/opt/softwares
(2) 所有的軟體的軟連結都置於/opt/links
(3) 當前使用者對/opt下的所有目錄都有最高的許可權,以防止出現許可權不足的問題
(4) hostname為hadoop
2. 叢集的搭建
(1) 解壓jdk以及hadoop
tar -zxvfjdk-8u201-linux-x64.tar.gz -C /opt/softwares/
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/softwares/
(2) 建立軟連結
ln -sf /opt/softwares/jdk1.8.0_201 /opt/links/jdk
ln -sf /opt/softwares/hadoop-2.9.2 /opt/links/hadoop
(3) 配置環境變數 vi ~/.bashrc或者其他的三個配置檔案,此步驟亦可不做,只是為了在任意路徑下都可以執行環境變數中的可執行指令碼,不過在執行時需要加上指令碼的路徑
###_JDK_CONF_###
export JAVA_HOME=/opt/links/jdk
export JRE_HOME=$JAVA_HOME/jre
export CLASS_PATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
###_HADOOP_CONF_###
export HADOOP_HOME=/opt/links/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 用於提交mr任務時以及訪問hdfs叢集時所用身份
export HADOOP_USER_NAME=yu
(4) 生效~/.bashrc檔案
source ~/.bashrc
(5) 測試是否安裝成功,若顯示版本號則表示成功
java -version
hadoop version
(6) 配置hadoop環境
0) 建立存放hadoop hdfs資料目錄
a. 存放hadoop hdfs資料目錄
mkdir -p ~/bigdata/hadoop/data
b. 存放hadoop、yarn的pid(程序號)目錄
mkdir -p ~/bigdata/hadoop/pid/hadoop
mkdir -p ~/bigdata/hadoop/pid/yarn
1) 單機(不做任何hadoop環境配置)
2) 偽分佈
a. 修改$HADOOP_HOME/etc/hadoop/hadoop-env.sh
第25行:export JAVA_HOME=/opt/links/jdk
第113行:exportHADOOP_PID_DIR=/home/yu/bigdata/hadoop/pids/hadoop
(113行影響namenode、datanode以及secondarynamenode的pid檔案儲存位置)
b. 修改$HADOOP_HOME/etc/hadoop/core-site.xml(hostname為自己主節點的主機名,需修改)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hostname:9000</value>
</property>
<!-- 新增加的配置 可以按需配置 -->
<!-- 設定hadoop預設臨時目錄-建議配置 -->
<property>
<name>hadoop.tmp.dir</name>
<value>file:///home/yu/bigdata/hadoop/temp</value>
</property>
<!-- 流檔案緩衝區大小,預設4096,可選 -->
<property>
<name>io.file.buffer.size</name>
<value>4096</value>
</property>
<!-- 如出現許可權問題,則需要配置,以下三個中的yu需配置成自己的使用者名稱 -->
<property>
<name>hadoop.proxyuser.yu.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.yu.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>yu</value>
</property>
</configuration>
c. 修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml,新增配置可以不配
<configuration>
<!-- 為namenode叢集定義一個services name -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- 配置hdfs中副本個數 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 配置hdfs中塊大小 2.x版本後預設128M -->
<property>
<name>dfs.blocksize</name>
<value>64M</value>
</property>
<!-- 配置namenode的資料存放目錄 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///home/使用者名稱/bigdata/hadoop/data/nn</value>
</property>
<!-- 配置datanode的資料存放目錄 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///home/使用者名稱/bigdata/hadoop/data/dn</value>
</property>
<!-- 配置checkpoint的資料存放目錄 -->
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file:///home/使用者名稱/bigdata/hadoop/data/snn</value>
</property>
<!-- 配置edits的資料存放目錄 -->
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>file:///home/使用者名稱/bigdata/hadoop/data/snn</value>
</property>
<!--新增的配置-->
<!-- WebHDFS Namenodes和Datanodes(REST API),可在web頁對HDFS檔案系統進行操作 -->
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<!-- NN,JT等所使用的web tracker頁面伺服器所使用的使用者和組 -->
<property>
<name>dfs.web.ugi</name>
<value>yu,yu</value>
</property>
<!-- 建立檔案和目錄使用umask值 預設為022,不建議修改為000-->
<property>
<name>fs.permissions.umask-mode</name>
<value>000</value>
</property>
<!-- 在HDFS中啟用許可權檢查 TRUE|FALSE 預設為true,若出現許可權問題可設定成false -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!-- 許可權superusergroup組 -->
<property>
<name>dfs.permissions.superusergroup</name>
<value>yu</value>
</property>
<!-- 叢集中滿足正常配置的資料塊比例 -->
<property>
<name>dfs.namenode.safemode.threshold-pct</name>
<value>0f</value>
</property>
<!-- NN嘗試恢復之前失敗的dfs.namenode.name.dir目錄。在建立checkpoint是做此嘗試。如果設定多個磁碟,建議允許 -->
<property>
<name>dfs.namenode.name.dir.restore</name>
<value>true</value>
</property>
<!-- 設定hdfs叢集的超級管理員 -->
<property>
<name>dfs.cluster.administrators</name>
<value>*</value>
</property>
<!-- 設定secondary name node web 監聽埠 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hostname:9001</value>
</property>
</configuration>
d.複製$HADOOP_HOME/etc/hadoop/mapred-site.xml.template並改檔名為mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
e. 修改$HADOOP_HOME/etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定執行mapreduce程式為yarn -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 新增加的配置 -->
<!-- 配置jobhistory伺服器的地址 ip:埠 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hostname:10020</value>
</property>
<!-- 配置jobhistory伺服器的weiui地址 ip:埠 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hostname:19888</value>
</property>
<!-- 配置在jobhistory伺服器WebUI中最多顯示多少條 -->
<property>
<name>mapreduce.jobhistory.joblist.cache.size</name>
<value>20000</value>
</property>
<!-- 配置jobhistory資料存放目錄 -->
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/jobhistory/hadoop-yarn/staging</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>
<!-- 設定是否開啟小作業優化 -->
<property>
<name>mapreduce.job.ubertask.enable</name>
<value>true</value>
</property>
</configuration>
f.修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
<configuration>
<!-- 配置resourcemanager的hostname -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hostname</value>
</property>
<!-- 配置resourcemanager的adress -->
<property>
<name>yarn.resourcemanager.address</name>
<value>hostname:18040</value>
</property>
<!-- 配置resourcemanager對AM暴露的地址 -->
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hostname:18030</value>
</property>
<!-- RM對NM暴露地址,NM通過該地址向RM彙報心跳,領取任務 -->
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hostname:18025</value>
</property>
<!-- 管理員可以通過該地址向RM傳送管理命令等 -->
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hostname:18141</value>
</property>
<!-- NodeManager上執行的附屬服務。需配置成mapreduce_shuffle,才可執行MapReduce程式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定shuffle的類 -->
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- 中間結果存放位置,可配置多目錄 -->
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>file:///home/使用者名稱/bigdata/hadoop/data/nm</value>
</property>
<!-- 新增加的配置 -->
<!-- 日誌聚合伺服器URL -->
<property>
<name>yarn.log.server.url</name>
<value>http://hostname:19888/jobhistory/logs/</value>
</property>
<!-- 是否啟用日誌聚合。 日誌收集聚合 每個容器的日誌,這些日誌移動到檔案系統 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- Web應用程式代理伺服器 需單獨啟動 yarn-daemon.sh -->
<property>
<name>yarn.web-proxy.address</name>
<value>hostname:20000</value>
</property>
<!-- 日誌儲存時間 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>-1</value>
</property>
<!-- 日誌存放目錄 -->
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/logs</value>
</property>
<!-- 是否啟動一個執行緒檢查每個任務正使用的實體記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否啟動一個執行緒檢查每個任務正使用的虛擬記憶體量,如果任務超出分配值,則直接將其殺掉,預設是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
</configuration>
g. 修改$HADOOP_HOME/etc/hadoop/yarn-env.sh,新增如下配置
# 設定yarn PID檔案儲存位置,影響NodeManager、ResourceManager PID檔案儲存
export YARN_PID_DIR=/home/yu/bigdata/hadoop/pids/yarn
h. 修改$HADOOP_HOME/etc/hadoop/mapred-env.sh
# 設定mapred PID PID檔案儲存位置,影響JobHistoryServer PID檔案儲存
第28行:export HADOOP_MAPRED_PID_DIR=/home/yu/bigdata/hadoop/pids/mr
3) 全分佈
a. 將一個節點上的java、hadoop環境以及配置檔案傳送至其他機器
scp 原始檔目錄 使用者名稱@hostname:目標目錄
b. 步驟同偽分佈
c. 修改$HADOOP_HOME/etc/hadoop/slaves檔案,加入從節點的hostname,注意需要一行一個ip或者是hostname
hadoop02
hadoop03
hadoop04
(6) 格式化HDFS檔案系統,若出現has been successfully formatted字樣則說明格式化成功
hdfs namenode -format
(7) 啟動叢集
1) 啟動/停止hdfs叢集 (8/9一起啟動命令:start-all.sh/stop-all.sh)
start-dfs.sh/stop-dfs.sh
2) 啟動/停止snn(secondarynamenode)
hadoop-daemon.sh start/stop secondarynamenode
3) 啟動/停止yarn叢集
start-yarn.sh/stop-yarn.sh
4) 啟動/停止jobhistory伺服器
mr-jobhistory-daemon.sh start/stop historyserver
yarn-daemon.sh start/stop historyserver
5) 啟動/停止WEB代理伺服器
a. 作為守護程序啟動(一般使用這種)
yarn-daemon.sh start proxyserver
b. 獨立啟動
yarn proxyserver
(8) 測試MR(計算圓周率pi)
hadoop jar /opt/hadoop-2.3.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0.jar pi 20 10
(9) WEB訪問
1) hdfs叢集訪問埠 50070
2) yarn叢集訪問埠 8088
(10) 所遇到的問題
1) namenode可以正常啟動,datanode無法啟動
a. 重新格式化
刪除所有節點~/bigdata/hadoop/data目錄下的所有檔案
-> 重新執行 hadoop namenode -format
原因:namenode的VERSION中的clusterID與datanode中中的VERSION的clusterID不一致導致