前驟:
Hadoop Cluster中的Daemon
HDFS:
NameNode,NN
SecondaryNode,SNN
DataNode:DN
/data/hadoop/hdfs/{nn,snn,dn}
nn:fsimage,editlog//鏡像和編輯日志
//hdfs的NN是在記憶體中存放資料,不斷根據檔案狀态改變,修改中繼資料
fsimage存放了:檔案分割後存放在哪些node上
//檔案中繼資料的改變,會寫入到editllog中,最後寫入到fsimage中,是以下次NN重新開機後資料依然存在,從fsimage中讀取資料,擷取到記憶體中
//一旦nn崩潰,資料恢複需要大量的時間
snn:在nn崩潰的時候,及時頂上去,省去修複nn,讓nn重新上線的時間,但是各個data node報告資料狀态,進行修複的時間依然需要。
正常情況下:snn負責copy nn的fsimage和editlog然後在snn上合并
checkpoint:因為nn是在不斷變化的,是以snn要指定合并到那個時間點上。
//官方建議30個以上的node建構hadoop叢集
data是否需要工作于raid//因為hdfs已經有replicate的功能,是以再次提供備援的必要性不大
hadoop-daemon.sh 運作程序
在叢集模式中hadoop-daemon.sh start DataNode時,需要自動的找每一個DataNode節點,然後在每一個DataNode上自動啟動。
如何找到,或者如何保證指令能夠通過主要節點,自動連接配接到各從節點,并且有權限執行指令。
在主節點上:配置
YARN:
ResourceManager
NodeManager:
yarn-daemon.sh start/stop
實際運作程序:
【NN】 【SNN】 【RM】
| | |
---------------------------------
[node1/NN] [nod2/NN] [node3/NN]
在node上啟動:datanode程序和nodemanager程序即可
實驗模型:
【NN/SNN/RM】
|
-----------------------------------------
主要節點上運作:namenode,secondarynamenode,resourcemanager三個程序
其他node上啟動:datanode程序和nodemanager程序
預備:
1.ntpdate 同步
tzselect,
timedatactl //檢視時區設定
timedatectl list-timezones # 列出所有時區
timedatectl set-local-rtc 1 # 将硬體時鐘調整為與本地時鐘一緻, 0 為設定為 UTC 時間
timedatectl set-timezone Asia/Shanghai # 設定系統時區為上海
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //最簡單的方案
2.hosts通信
172.16.100.67 node1.mt.com node1 master
172.16.100.68 node2.mt.com node2
172.16.100.69 node3.mt.com node3
172.16.100.70 node4.mt.com node4
如果需要通過master節點啟動或停止整個叢集,需要在master上配置運作服務的使用者,如hdfs和yarn能夠基于密鑰ssh連結
node1:
一、前奏
(1)配置環境
vim /etc/profile.d/java.sh
JAVA_HOME=/usr
yum install java-1.8.0-openjdk-devel.x86_64
scp /etc/profile.d/java.sh node2:/etc/profile.d/
scp /etc/profile.d/java.sh node3:/etc/profile.d/
scp /etc/profile.d/java.sh node4:/etc/profile.d/
vim /etc/profile.d/hadoop.sh
export HADOOP_PREFIX=/bdapps/hadoop
export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
. /etc/profile.d/hadoop.sh
scp /etc/profile.d/hadoop.sh node2:/etc/profile.d/
scp /etc/profile.d/hadoop.sh node3:/etc/profile.d/
scp /etc/profile.d/hadoop.sh node4:/etc/profile.d/
(2)修改hosts檔案
vim /etc/hosts
scp 到 node2,node3,node4
(3)hadoop 密鑰登入
useradd hadoop //node2,3,4都有一個hadoop使用者
echo "hadoop" | passwd --stdin hadoop
useradd -g hadoop hadoop //這裡都使用一個使用者,也可以分别建立yarn和hdfs使用者
su - hadoop
ssh-keygen
for i in 2 3 4; do ssh-copy-id -i .ssh/id_rsa.pub hadoop@node${i}; done
驗證:
ssh node2 'date'
ssh node3 'date'
ssh node4 'date'
二、安裝部署hadoop
(1)解壓
mkdir -pv /bdapps/ /data/hadoop/hdfs/{nn,snn,dn} //這裡的dn是用不到的,因為主要節點是不存儲資料的,可以不建立
chown -R hadoop:hadoop /data/hadoop/hdfs
tar xvf hadoop-2.6.2.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.6.2 hadoop
cd hadoop
mkdir logs
chown g+w logs
chown -R hadoop:hadoop ./*
(2)配置檔案修改
1.core-site.xml 配置
vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
//hdfs的通路接口,master如果不能解析,用ip位址也可以
<final>true</final>
</property>
</configuration>
//core指向NN
2.yanr-site.xml檔案配置
vim etc/hadoop/yarn-site.xml
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
//%s/localhost/master/g //替換localhost為master
//指向ResourceManager
3.hdfs-site.xml配置
vim etc/hadoop/hdfs-site.xml
<property>
<name>dfs.replication</name> //dfs的副本數量
<value>2</value>
<proporty>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<proporty>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
<name>fs.checkpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
<name>fs.checkpoint.edits.dir</name>
4.
mapred-site.xml 是唯一不需要修改的
預設的就是yarn就可以
5.
vim slaves
node2
node3
node4
//slaves是datanode和nodemanager
(3)
在node2,node3,node4指定到該步驟後:chown -R hadoop:hadoop ./*
scp /bdapps/hadoop/etc/hadoop/* node2:/bdapps/hadoop/etc/hadoop/
scp /bdapps/hadoop/etc/hadoop/* node3:/bdapps/hadoop/etc/hadoop/
scp /bdapps/hadoop/etc/hadoop/* node4:/bdapps/hadoop/etc/hadoop/
三.格式化然後啟動
hdfs namenode -format
顯示/data/hadoop/hdfs/nn hash been successful formatted 表示成功
啟動hadoop方式有兩種:
1.在各節點上分别啟動要啟動的服務
啟動yarn服務要使用yarn使用者身份
master節點:NameNode服務和ResourceManager服務
su - hdfs -c 'hadoop-daemon.sh start namenode'
su - hdfs -c 'yarn-daemon.sh start resourcemanager'
slave節點:DataNode服務和NodeManager服務
su - hdfs -c 'hadoop-daemon.sh start datanode'
su - hdfs -c 'yarn-daemon.sh start nodemanager'
2.在master上啟動整個叢集
su - hdfs -c 'start-dfs.sh'
su - hdfs -c 'start-yarn.sh'
老版本通過start-all.sh和stop-all.sh來控制hdfs和mapreduce
啟動服務:
su - hdfs -c 'start-dfs.sh'
su - hdfs -c 'stop-dfs.sh' //關閉hdfs
會提示在,2,3,4節點上啟動
master啟動resourcemanager
slave上啟動nodemanager
測試:
node3: su - hadoop
jps //檢視DataNode程序和NodeManager程序
node1:su - hadoop
jps //啟動的有secondaryNameNode和NameNode程序
hdfs dfs -mkdir /test
hdfs dfs -put /etc/fstab /test/fstab
hdfs dfs -ls -R /test
hdfs dfs -cat /test/fstab
node3:
ls /data/hadoop/hdfs/dn/current/..../blk,... 存儲在這裡
注意:node2,3,4中有一個是沒有存儲該檔案的,因為定義的slaves 為2個
<name>dfs.replication</name> //dfs的副本數量
<value>2</value>
Web接口檢視:
172.16.100.67:8088
記憶體顯示為24G,因為3G,每個node的實體記憶體代大小為8G
172.16.100.67:50070
datanode: 有三個
單個檔案太小的是不會被切割的,大于64M的檔案會被切片
可以直接上傳壓縮檔案,會被切塊
運作任務測試:
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-example-2.6.jar wordcount /test/fstab /test/functions /test/wc
hdfs dfs cat /test/wc/part-r-0000
四、其他節點
node2:
user hadoop
mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} //隻有dn有用
chown -R hadoop:hadoop /data/hadoop/hdfs/
//可以在修改配置檔案後,直接複制到node3和node4上因為配置都一樣
node3:
node4:
=====================================================
yarn的叢集管理指令
yarn [--config confdir] COMMAND
resourcemanager-format-state-store //删除RMStateStore
resourcemanager //運作ResourceManager
nodemanaer //運作nodemanager on each slave
timelineserver //運作timelineserver,任務編排,時間線
rmadmin //resourcemanager管理
version
jar //運作jar檔案
application //顯示application資訊
report/kill application
applicationattempt //嘗試運作相關報告
container //容器相關資訊
node //顯示node
queue //報告隊列資訊
logs //備份容器日志
classpath //顯示java運作程式時的類加載路徑
daemonlog //擷取守護程序的日志級别
jar,application,node,logs,classpath,version 是常用的使用者指令
resourcemanager,nodemanager,proxyserver,rmadmin,daemon是常用的管理類指令
yarn application [options]
-status ApplicationID 狀态資訊
yarn application -status application_1494685700454_0001
-list 列出yarn上的application清單
-appTypes:MAPREDUCE,YARN
-appStates:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
yarn application -appStates=all
-kill ApplicationID
yarn node
-list //例出node清單
-states: NEW,RUNNING,UNHEALTHY不健康,DECOMMISSION退役的,LOST,REBOOTED
-staus Node-ID //顯示節點資訊
logs:顯示已經完成的YARN程式的日志(及狀态為:FAILED,KILLED,FINISHED)
如果需要在指令行檢視日志需要配置yarn-site.xml
yarn.log-aggregation-enable 屬性值為true
yarn logs -applicationId [applicationID] [options]
-applicationId applicationID必備選項,用于從ResourceManager擷取其詳細資訊。
-appOwner APPOwner預設為目前使用者,可選
-nodeAddress NodeAddress -containerId containerID:擷取目前指定節點上指定容器的相關資訊;其中NodeAddress的格式同NodeId
classpath:
yarn calasspath //加載java程式路徑
管理指令:
rmadmin
nodemanager
timelineserver
rmadmin是ResourceManager的用戶端程式,可用于重新整理通路控制政策、排程器隊列及注冊到RM上的節點等。
重新整理之後,無需重新開機即可生效。
yarn rmadmin [options]
-help
-refreshQueues:重載隊列的acl,狀态及調用器隊列;它會根據配置檔案中的配置資訊重新初始化排程器
-refreshNodes:為RM重新整理主機資訊,它通過讀取RM節點的include和exclude檔案來更新叢集需要包含或排除的節點清單。
-refreshUserToGroupMappings:根據配置的Hadoop安全組映射,通過重新整理組緩存中的資訊來更新使用者群組之間的映射關系。
-refreshSuperUserGroupsConfiguration:重新整理超級使用者代理組映射,以及更新代理主機和core-site.xml配置檔案中的hadoop.proxyuser屬性定義的代理組
-refreshAdminAcls:根據yarn站點配置檔案或預設配置檔案的yarn.admin.acl屬性重新整理RM的管理ACL;
-refreshServiceAcl:重載服務級别授權政策檔案,而後RM将重載授權政策檔案;它會檢查hadoop安全授權是否啟用并為IPC Server,ApplicationMaster,Client及Resource tracker重新整理ACL;
DaemonLog:檢視或更細
http://host:port/logLevel?log=name service?
yarn daemonlog [options] args
-getLevel host:port name:顯示指定守護程序的日志級别
-getLevel host:port level:設定守護程序的日志級别
運作YARN application
yarn application可以是一個shell腳本,MapReduce作業或者其他類型的任意作業。
步驟:
1.Application初始化送出 //client端完成
2.配置設定記憶體并啟動AM //RM完成
3.AM注冊及資源配置設定 //AM在nodemanager上完成
4.啟動并監控容器 //AM向NM報告,NM報告RM完成
5.Application進度報告 //AM完成
6.Application進度完成 //
利用ambari部署hadoop叢集
https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/
https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.5.0
IBM官方技術論壇:https://www.ibm.com/developerworks/cn/opensource/
Ambari 2.2.2 下載下傳資源
OS Format URL
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.2.0
http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.2.2.0/ambari.repo
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.2.0/ambari-2.2.2.0-centos7.tar.gz
HDP 2.4.2 下載下傳資源
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.4.2.0
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.4.2.0/hdp.repo
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.4.2.0/HDP-2.4.2.0-centos7-rpm.tar.gz
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos7
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos7/HDP-UTILS-1.1.0.20-centos7.tar.gz
本文轉自MT_IT51CTO部落格,原文連結:http://blog.51cto.com/hmtk520/1944156,如需轉載請自行聯系原作者