1. 程式人生 > 實用技巧 >職場知識思維導圖

職場知識思維導圖

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不一致導致