Hadoop(二)CentOS7.5搭建Hadoop2.7.6徹底分佈式集羣

一 徹底分佈式集羣(單點)

Hadoop官方地址:http://hadoop.apache.org/html

1  準備3臺客戶機

1.1防火牆,靜態IP,主機名

關閉防火牆,設置靜態IP,主機名此處略,參考  Linux之CentOS7.5安裝及克隆java

1.2 修改host文件

咱們但願三個主機之間都可以使用主機名稱的方式相互訪問而不是IP,咱們須要在hosts中配置其餘主機的host。所以咱們在主機的/etc/hosts下均進行以下配置:node

[root@node21 ~]# vi /etc/hosts
配置主機host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.21 node21
192.168.100.22 node22
192.168.100.23 node23
將配置發送到其餘主機(同時在其餘主機上配置)
[root@node21 ~]# scp -r /etc/hosts root@node22:/etc/
[root@node21 ~]# scp -r /etc/hosts root@node23:/etc/
測試
[root@node21 ~]# ping node21
[root@node21 ~]# ping node22
[root@node21 ~]# ping node23

1.3 添加用戶帳號

在全部的主機下均創建一個帳號admin用來運行hadoop ,並將其添加至sudoers中
[root@node21 ~]# useradd admin    添加用戶經過手動輸入修改密碼
[root@node21 ~]# passwd  admin  更改用戶 admin 的密碼
123456  passwd: 全部的身份驗證令牌已經成功更新。
設置admin用戶具備root權限  修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,以下所示:
[root@node21 ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
admin   ALL=(ALL)     ALL
修改完畢  :wq! 保存退出,如今能夠用admin賬號登陸,而後用命令 su - ,切換用戶便可得到root權限進行操做。 

1.4 /opt目錄下建立文件夾

1)在root用戶下建立module、software文件夾
[root@node21 opt]# mkdir module
[root@node21 opt]# mkdir software
2)修改module、software文件夾的全部者
[root@node21 opt]# chown admin:admin module
[root@node21 opt]# chown admin:admin software
3)查看module、software文件夾的全部者
[root@node21 opt]# ll
total 0
drwxr-xr-x. 5 admin admin 64 May 27 00:24 module
drwxr-xr-x. 2 admin admin 267 May 26 11:56 software

2   安裝配置jdk1.8

[deng@node21 ~]# rpm -qa|grep java   #查詢是否安裝java軟件:
[deng@node21 ~]# rpm -e –nodeps 軟件包   #若是安裝的版本低於1.7,卸載該jdk
在線安裝   wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
這裏使用本地下載而後 xftp上傳到  /opt/software/ 下 
[root@node21 software]# tar zxvf  jdk-8u171-linux-x64.tar.gz  -C  /opt/module/
[root@node21 module]# mv jdk1.8.0_171 jdk1.8
設置JAVA_HOME  
vi /etc/profile
export  JAVA_HOME=/opt/module/jdk1.8
export  PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin
source  /etc/profile
向其餘節點複製jdk
[root@node21 ~]# scp -r /opt/module/jdk1.8 root@node22:`pwd`
[root@node21 ~]# scp -r /opt/module/jdk1.8 root@node23:`pwd`
配置各個主機下jdk的環境變量,因爲個人電腦上linux都是新安裝的,環境變量相同,所以直接複製到了其餘主機上。若是不一樣的主機的環境變量不一樣,請手動設置
[root@node21 ~]# scp /etc/profile root@node22:/etc/
[root@node21 ~]# scp /etc/profile root@node23:/etc/
在每一個主機上都從新編譯一下/etc/profile
[root@node21]# source /etc/profile
測試  java -version

3   安裝hadoop集羣

3.1 集羣部署規劃

節點名稱  NN1  NN2  DN  RM  NM
node21 NameNode     DataNode   NodeManager
node22   SecondaryNameNode DataNode ResourceManager NodeManager
node23     DataNode   NodeManager

3.2 設置SSH免密鑰

關於ssh免密碼的設置,要求每兩臺主機之間設置免密碼,本身的主機與本身的主機之間也要求設置免密碼。 這項操做能夠在admin用戶下執行,執行完畢公鑰在/home/admin/.ssh/id_rsa.publinux

[admin@node21 ~]# ssh-keygen -t rsa
[admin@node21 ~]# ssh-copy-id node21 [admin@node21 ~]# ssh-copy-id node22 [admin@node21 ~]# ssh-copy-id node23

node1與node2爲namenode節點要相互免祕鑰   HDFS的HAweb

[admin@node22 ~]# ssh-keygen -t rsa
[admin@node22 ~]# ssh-copy-id node22 [admin@node22 ~]# ssh-copy-id node21 [admin@node22 ~]# ssh-copy-id node23

node2與node3爲yarn節點要相互免祕鑰  YARN的HAshell

[admin@node23 ~]# ssh-keygen -t rsa
[admin@node23 ~]# ssh-copy-id node23 [admin@node23 ~]# ssh-copy-id node21 [admin@node23 ~]# ssh-copy-id node22 

3.3  解壓安裝hadoop

[admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/

4   配置hadoop集羣

注意:配置文件在hadoop2.7.6/etc/hadoop/下apache

4.1 修改core-site.xml

[admin@node21 hadoop]$ vi core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
     <property>
     <name>fs.defaultFS</name>
         <value>hdfs://node21:9000</value>
     </property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
     <property>
     <name>hadoop.tmp.dir</name>
     <value>/opt/module/hadoop-2.7.6/data/full/tmp</value>
     </property>
</configuration>

4.2 修改hadoop-env.sh

[admin@node21  hadoop]$ vi hadoop-env.sh 
修改 export JAVA_HOME=/opt/module/jdk1.8

4.3 修改hdfs-site.xml

[admin@node21  hadoop]$ vi hdfs-site.xml
<configuration>
<!-- 設置dfs副本數,不設置默認是3個   -->
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
<!-- 設置secondname的端口   -->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>node22:50090</value>
    </property>
</configuration>

4.4 修改slaves

[admin@node21  hadoop]$ vi slaves
node21
node22
node23

4.5 修改mapred-env.sh

[admin@node21 hadoop]$ vi mapred-env.sh
修改 export JAVA_HOME=/opt/module/jdk1.8

4.6 修改mapred-site.xml

[admin@node21 hadoop]# mv mapred-site.xml.template mapred-site.xml
[admin@node21 hadoop]$ vi mapred-site.xml
<configuration>
<!-- 指定mr運行在yarn上 -->
    <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
    </property>
</configuration>

4.7 修改yarn-env.sh

[admin@node21 hadoop]$ vi yarn-env.sh
修改 export JAVA_HOME=/opt/module/jdk1.8

4.8 修改yarn-site.xml

[admin@node21 hadoop]$ vi yarn-site.xml
<configuration>
<!-- reducer獲取數據的方式 -->
     <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
     </property>
<!-- 指定YARN的ResourceManager的地址 -->
     <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node22</value>
     </property>
</configuration>

4.9 分發hadoop到節點

[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:`pwd`
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:`pwd`

4.10 配置環境變量

[admin@node21 ~]$ sudo vi /etc/profile
末尾追加
export  HADOOP_HOME=/opt/module/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
編譯生效  source  /etc/profile

5  啓動驗證集羣

5.1 啓動集羣

 若是集羣是第一次啓動,須要格式化namenodebootstrap

[admin@node21 hadoop-2.7.6]$ hdfs namenode -format 

啓動Hdfs:windows

[admin@node21 ~]# start-dfs.sh
Starting namenodes on [node21]
node21: starting namenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-namenode-node21.out
node21: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node21.out
node22: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node22.out
node23: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node23.out
Starting secondary namenodes [node22]
node22: starting secondarynamenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-secondarynamenode-node22.out

啓動Yarn: 注意:Namenode和ResourceManger若是不是同一臺機器,不能在NameNode上啓動 yarn,應該在ResouceManager所在的機器上啓動yarn。ruby

[admin@node22 ~]# start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-resourcemanager-node22.out
node21: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node21.out
node23: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node23.out
node22: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node22.out

jps查看進程

[admin@node21 ~]# jps
1440 NameNode
1537 DataNode
1811 NodeManager
1912 Jps
[admin@node22 ~]# jps
1730 Jps
1339 ResourceManager
1148 DataNode
1198 SecondaryNameNode
1439 NodeManager
[admin@node23 ~]# jps
1362 Jps
1149 DataNode
1262 NodeManager

web頁面訪問

5.2 Hadoop啓動中止方式

1)各個服務組件逐一啓動
分別啓動hdfs組件: hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode
   啓動yarn:     yarn-daemon.sh    start|stop  resourcemanager|nodemanager

2)各個模塊分開啓動(配置ssh是前提)經常使用
start|stop-dfs.sh     start|stop-yarn.sh

3)所有啓動(不建議使用)
start|stop-all.sh

5.3 集羣時間同步

 參考Ntp時間服務器與定時任務Crontab     http://www.javashuo.com/article/p-rfkqlibh-t.html

二 徹底分佈式集羣(HA)

1 環境準備

1.1 修改IP

1.2 修改主機名及主機名和IP地址的映射

1.3 關閉防火牆

1.4 ssh免密登陸

1.5 安裝JDK,配置環境變量

2 集羣規劃

節點名稱 NN JJN DN ZKFC ZK RM NM
node21 NameNode JournalNode DataNode ZKFC Zookeeper   NodeManager
node22 NameNode JournalNode DataNode ZKFC ZooKeeper ResourceManager NodeManager
node23   JournalNode DataNode   ZooKeeper ResourceManager NodeManager

3 安裝Zookeeper集羣

安裝詳解參考 : CentOS7.5搭建Zookeeper集羣與命令行操做

4 安裝配置Hadoop集羣

4.1 解壓安裝Hadoop

解壓 hadoop-2.7.6/opt/module/目錄

[admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/

4.2 配置Hadoop集羣

配置文件都在/opt/module/hadoop-2.7.6/etc/hadoop/下

4.2.1 修改hadoop-env.sh mapred-env.sh ,yarn-env.sh 的JAVA環境變量

export JAVA_HOME=/opt/module/jdk1.8

4.2.2 修改 core-site.xml

[admin@node21 hadoop]$ vi core-site.xml
<configuration>
<!-- 把兩個NameNode的地址組裝成一個集羣mycluster -->
<property>
   <name>fs.defaultFS</name>
   <value>hdfs://mycluster</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
  <name>hadoop.tmp.dir</name>
  <value>/opt/module/hadoop-2.7.6/data/ha/tmp</value>
</property>
<!-- 指定ZKFC故障自動切換轉移 -->
<property>
     <name>ha.zookeeper.quorum</name>
     <value>node21:2181,node22:2181,node23:2181</value>
</property>
</configuration> 

4.2.3 修改hdfs-site.xml

[admin@node21  hadoop]$ vi hdfs-site.xml
<configuration>
<!-- 設置dfs副本數,默認3個 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 徹底分佈式集羣名稱 -->
<property>
  <name>dfs.nameservices</name>
  <value>mycluster</value>
</property>
<!-- 集羣中NameNode節點都有哪些 -->
<property>
   <name>dfs.ha.namenodes.mycluster</name>
   <value>nn1,nn2</value>
</property>
<!-- nn1的RPC通訊地址 -->
<property>
   <name>dfs.namenode.rpc-address.mycluster.nn1</name>
   <value>node21:8020</value>
</property>
<!-- nn2的RPC通訊地址 -->
<property>
   <name>dfs.namenode.rpc-address.mycluster.nn2</name>
   <value>node22:8020</value>
</property>
<!-- nn1的http通訊地址 -->
<property>
   <name>dfs.namenode.http-address.mycluster.nn1</name>
   <value>node21:50070</value>
</property>
<!-- nn2的http通訊地址 -->
<property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>node22:50070</value>
</property>
<!-- 指定NameNode元數據在JournalNode上的存放位置 -->
<property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node21:8485;node22:8485;node23:8485/mycluster</value>
</property>
<!-- 配置隔離機制,即同一時刻只能有一臺服務器對外響應 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
</property>
<!-- 使用隔離機制時須要ssh無祕鑰登陸-->
<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/admin/.ssh/id_rsa</value>
</property>
<!-- 聲明journalnode服務器存儲目錄-->
<property>
   <name>dfs.journalnode.edits.dir</name>
   <value>/opt/module/hadoop-2.7.6/data/ha/jn</value>
</property>
<!-- 關閉權限檢查-->
<property>
   <name>dfs.permissions.enable</name>
   <value>false</value>
</property>
<!-- 訪問代理類:client,mycluster,active配置失敗自動切換實現方式-->
<property>
   <name>dfs.client.failover.proxy.provider.mycluster</name>
   <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置自動故障轉移-->
<property>
   <name>dfs.ha.automatic-failover.enabled</name>
   <value>true</value>
</property> 
<configuration>

4.2.4 修改mapred-site.xml

[admin@node1 hadoop]# mv mapred-site.xml.template mapred-site.xml
[admin@node1 hadoop]# vi  mapred-site.xml
<configuration>
<!-- 指定mr框架爲yarn方式 -->
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
 </property>
<!-- 指定mr歷史服務器主機,端口 -->
  <property>   
    <name>mapreduce.jobhistory.address</name>   
    <value>node21:10020</value>   
  </property>   
<!-- 指定mr歷史服務器WebUI主機,端口 -->
  <property>   
    <name>mapreduce.jobhistory.webapp.address</name>   
    <value>node21:19888</value>   
  </property>
<!-- 歷史服務器的WEB UI上最多顯示20000個歷史的做業記錄信息 -->    
  <property>
    <name>mapreduce.jobhistory.joblist.cache.size</name>
    <value>20000</value>
  </property>
<!--配置做業運行日誌 --> 
  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
  </property>
  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
  </property>
  <property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/tmp/hadoop-yarn/staging</value>
  </property>
</configuration>

4.2.5 修改 slaves

[admin@node21  hadoop]$ vi slaves
node21
node22
node23

4.2.6 修改yarn-site.xml 

[admin@node21 hadoop]$ vi yarn-site.xml
<configuration>
<!-- reducer獲取數據的方式 -->
 <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <!--啓用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <!--聲明兩臺resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>rmCluster</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node22</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node23</value>
    </property>
    <!--指定zookeeper集羣的地址-->
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node21:2181,node22:2181,node23:2181</value>
    </property>
    <!--啓用自動恢復-->
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
    <!--指定resourcemanager的狀態信息存儲在zookeeper集羣-->
    <property>
        <name>yarn.resourcemanager.store.class</name>    
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
</configuration>

4.2.6 拷貝hadoop到其餘節點

[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:/opt/module/
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:/opt/module/

4.2.7 配置Hadoop環境變量

[admin@node21 ~]$ sudo vi /etc/profile
末尾追加
export  HADOOP_HOME=/opt/module/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
編譯生效  source  /etc/profile

5 啓動集羣

1在各個JournalNode節點上,輸入如下命令啓動journalnode服務:(前提zookeeper集羣已啓動)

[admin@node21 ~]$ hadoop-daemon.sh start journalnode
[admin@node22 ~]$ hadoop-daemon.sh start journalnode
[admin@node23 ~]$ hadoop-daemon.sh start journalnode

啓動Journalnde是爲了建立/data/ha/jn,此時jn裏面是空的

 

2)在[nn1],對namenode進行格式化,並啓動:

[admin@node21 ~]$ hdfs namenode -format

格式化namenode,此時jn裏面會產生集羣ID等信息

另外,/data/ha/tmp也會產生以下信息

啓動nn1上namenode

[admin@node21 current]$ hadoop-daemon.sh  start namenode
starting namenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-admin-namenode-node21.out

3)在[nn2],同步nn1的元數據信息:

[admin@node22 ~]$ hdfs namenode -bootstrapStandby

4)啓動[nn2]

[admin@node22 ~]$ hadoop-daemon.sh start namenode

5)在[nn1]上,啓動全部datanode

[admin@node21 ~]$ hadoop-daemons.sh start datanode

6查看web頁面此時顯示 

 

7)手動切換狀態,在各個NameNode節點上啓動DFSZK Failover Controller,先在哪臺機器啓動,哪一個機器的NameNode就是Active NameNode

[admin@node21 ~]$ hadoop-daemin.sh start zkfc
[admin@node22 ~]$ hadoop-daemin.sh start zkfc

或者強制手動其中一個節點變爲Active

[admin@node21 data]$ hdfs haadmin -transitionToActive nn1 --forcemanual 

Web頁面查看

 

8)自動切換狀態,須要初始化HA在Zookeeper中狀態,先停掉hdfs服務,而後隨便找一臺zookeeper的安裝節點

[admin@node21 current]$  hdfs zkfc -formatZK

查看,此時會產生一個hadoop-ha的目錄

[root@node22 ~]# zkCli.sh  

啓動hdfs服務,查看namenode狀態

[admin@node21 ~]$ start-hdfs.sh

9)驗證

1)將Active NameNode進程kill

kill -9 namenode的進程id

2)將Active NameNode機器斷開網絡

service network stop

若是測試不成功,則多是配置錯誤。檢查zkfc守護進程以及NameNode守護進程的日誌,以便進一步診斷問題。

10)啓動yarn

1)在node22中執行:

[admin@node22 ~]$ start-yarn.sh

2)在node23中執行:

[admin@node23 ~]$ yarn-daemon.sh start resourcemanager 

3)查看服務狀態

[admin@node22 ~]$ yarn rmadmin -getServiceState rm1
active
[admin@node22 ~]$ yarn rmadmin -getServiceState rm2
standby

4) 驗證高可用(略)

6 測試集羣

1)查看進程

[admin@node21 ~]$ start-dfs.sh 
[admin@node22 ~]$ start-yarn.sh 
[admin@node23 ~]$ yarn-daemon.sh start resourcemanager
[admin@node21 ~]$ jps
11298 NodeManager
10868 DataNode
11065 JournalNode
11210 DFSZKFailoverController
1276 QuorumPeerMain
11470 NameNode
11436 Jps

[admin@node22 ~]$ jps
7168 DataNode
7476 ResourceManager
7941 Jps
7271 JournalNode
1080 QuorumPeerMain
7352 DFSZKFailoverController
7594 NodeManager
7099 NameNode

[admin@node23 ~]$ jps
3554 ResourceManager
3204 DataNode
3301 JournalNode
3606 Jps
3384 NodeManager
1097 QuorumPeerMain

2)任務提交

 2.1 上傳文件到集羣

[admin@node21 ~]$ hadoop fs -mkdir -p /user/admin/input
[admin@node21 ~]$ mkdir -p  /opt/wcinput/
[admin@node21 ~]$ vi  /opt/wcinput/wc.txt 
[admin@node21 ~]$ hadoop fs -put  /opt/wcinput/wc.txt /user/admin/input

wc.txt 文本內容爲

hadoop spark   storm
hbase hive sqoop
hadoop flink flume
spark hadoop  
wc.txt

2.2 上傳文件後查看文件存放在什麼位置

文件存儲路徑
[admin@node21 subdir0]$ pwd
/opt/module/hadoop-2.7.6/data/ha/tmp/dfs/data/current/BP-1244373306-192.168.100.21-1527653416622/current/finalized/subdir0/subdir0
查看文件內容
[admin@node21 subdir0]$ cat blk_1073741825
hadoop spark   storm
hbase hive sqoop
hadoop flink flume
spark hadoop   

2.3 下載文件

[admin@node21 opt]$ hadoop fs -get /user/admin/input/wc.txt

2.4 執行wordcount程序

[admin@node21 ~]$ hadoop jar /opt/module/hadoop-2.7.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /user/admin/input /user/admin/output

執行過程

18/05/30 02:51:39 INFO input.FileInputFormat: Total input paths to process : 1
18/05/30 02:51:40 INFO mapreduce.JobSubmitter: number of splits:1
18/05/30 02:51:40 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1527660052824_0001
18/05/30 02:51:42 INFO impl.YarnClientImpl: Submitted application application_1527660052824_0001
18/05/30 02:51:43 INFO mapreduce.Job: The url to track the job: http://node22:8088/proxy/application_1527660052824_0001/
18/05/30 02:51:43 INFO mapreduce.Job: Running job: job_1527660052824_0001
18/05/30 02:52:33 INFO mapreduce.Job: Job job_1527660052824_0001 running in uber mode : false
18/05/30 02:52:33 INFO mapreduce.Job:  map 0% reduce 0%
18/05/30 02:53:04 INFO mapreduce.Job:  map 100% reduce 0%
18/05/30 02:53:17 INFO mapreduce.Job:  map 100% reduce 100%
18/05/30 02:53:19 INFO mapreduce.Job: Job job_1527660052824_0001 completed successfully
18/05/30 02:53:19 INFO mapreduce.Job: Counters: 49
    File System Counters
        FILE: Number of bytes read=102
        FILE: Number of bytes written=250513
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=188
        HDFS: Number of bytes written=64
        HDFS: Number of read operations=6
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=2
    Job Counters 
        Launched map tasks=1
        Launched reduce tasks=1
        Data-local map tasks=1
        Total time spent by all maps in occupied slots (ms)=25438
        Total time spent by all reduces in occupied slots (ms)=10815
        Total time spent by all map tasks (ms)=25438
        Total time spent by all reduce tasks (ms)=10815
        Total vcore-milliseconds taken by all map tasks=25438
        Total vcore-milliseconds taken by all reduce tasks=10815
        Total megabyte-milliseconds taken by all map tasks=26048512
        Total megabyte-milliseconds taken by all reduce tasks=11074560
    Map-Reduce Framework
        Map input records=4
        Map output records=11
        Map output bytes=112
        Map output materialized bytes=102
        Input split bytes=105
        Combine input records=11
        Combine output records=8
        Reduce input groups=8
        Reduce shuffle bytes=102
        Reduce input records=8
        Reduce output records=8
        Spilled Records=16
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=558
        CPU time spent (ms)=8320
        Physical memory (bytes) snapshot=308072448
        Virtual memory (bytes) snapshot=4159348736
        Total committed heap usage (bytes)=165810176
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters 
        Bytes Read=83
    File Output Format Counters 
        Bytes Written=64
View Code

下載查看

[admin@node21 wcoutput]$ hadoop fs -get /user/admin/output/part-r-00000
[admin@node21 wcoutput]$ ll
total 4
-rw-r--r-- 1 admin admin 64 May 30 02:58 part-r-00000
[admin@node21 wcoutput]$ cat part-r-00000 
flink    1
flume    1
hadoop    3
hbase    1
hive    1
spark    2
sqoop    1
storm    1

三 配置集羣常見錯誤

1 自動故障轉移錯誤

1.1 兩臺namenode之間不能通訊,kill掉一臺Active的namenode節點,另一臺standby不能切換Active

查看namenode日誌 或者zkfc日誌,nn1 鏈接 nn2 8020失敗

 緣由分析:若服務器是最小化安裝CentOS時,有可能系統沒有fuster程序,那麼跳過這個安裝步驟直接進行後面的操做時,將有可能出現如下問題:

node21做爲主節點時,kill掉node21上的NameNode和ResourceManager進程時,能夠實現故障轉移,node22將從stanby狀態自動變成active狀態;可是當node22做爲主節點時,若kill掉node22上的進程,node21上的進程狀態卻仍是stanby,並不能實現故障自動轉移。緣由是咱們在 hdfs-site.xml中配置了當集羣須要故障自動轉移時採用SSH方式進行,而由於缺乏fuster程序,將在zkfc的日誌文件中發現以下錯誤

PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令
Unable to fence service by any configured method
java.lang.RuntimeException: Unable to fence NameNode at node22/192.168.100.22:8020

提示未找到fuster程序,致使沒法進行fence,因此能夠經過以下命令來安裝,Psmisc軟件包中包含了fuster程序:

//分別在node2一、node2二、node23上執行
sudo yum install psmisc

重啓Hadoop服務驗證成功。

2HDFS啓動警告信息

Hadoop2.7.6在安裝成功後,start-dfs.sh啓動後出現警告提示:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在Hadoop2.7之後的版本中,$HADOOP_HOME/lib/native 包下的文件都改成了64位,不存在版本差別化的問題,這裏解決方案是在文件hadoop-env.sh中增長以下一行信息

export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"  

再次啓動就沒有警告提示了。

四 Hadoop集羣羣啓腳本

1啓動服務

zookeeper   hadoop 

2腳本

1 編寫啓動集羣腳本  vi start-cluster.sh

#!/bin/bash
echo  "******************  開始啓動集羣全部節點服務 ****************"
echo  "******************  正在啓動zookeeper   *********************"
for i in admin@node21 admin@node22 admin@node23
do
     ssh $i '/opt/module/zookeeper-3.4.12/bin/zkServer.sh start'
done
echo  "********************     正在啓動HDFS     *******************"
ssh   admin@node21 '/opt/module/hadoop-2.7.6/sbin/start-dfs.sh'
echo  "*********************    正在啓動YARN   ******************"
ssh   admin@node22 '/opt/module/hadoop-2.7.6/sbin/start-yarn.sh'
echo  "***************  正在node21上啓動JobHistoryServer   *********"
ssh   admin@node21 '/opt/module/hadoop-2.7.6/sbin/mr-jobhistory-daemon.sh start historyserver'
echo  "******************      集羣啓動成功      *******************"*

2 編寫關閉集羣腳本 vi stop-cluster.sh

#!/bin/bash
echo  "*************      開在關閉集羣全部節點服務      *************"
echo  "*************  正在node21上關閉JobHistoryServer  *************"
ssh   admin@node21 '/opt/module/hadoop-2.7.6/sbin/mr-jobhistory-daemon.sh stop historyserver'
echo  "*************         正在關閉YARN               *************"
ssh   admin@node22 '/opt/module/hadoop-2.7.6/sbin/stop-yarn.sh'
echo  "*************         正在關閉HDFS               *************"
ssh   admin@node21 '/opt/module/hadoop-2.7.6/sbin/stop-dfs.sh'
echo  "*************         正在關閉zookeeper          *************"
for i in admin@node21 admin@node22 admin@node23
do
     ssh $i '/opt/module/zookeeper-3.4.12/bin/zkServer.sh stop'
done

3 編寫查看集羣jps進程腳本utils.sh

#!/bin/bash 
echo  "************* 開始啓動JPS  **********"
echo  "************* node21的jps **********"
ssh   admin@node21  'jps'
echo  "************* node22的jps **********"
ssh   admin@node22  'jps'
echo  "************* node23的jps **********"
ssh   admin@node23  'jps'

3賦權限給腳本

chmod +x 腳本名稱

4其餘問題

Linux執行.sh文件,提示No such file or directory的問題的解決方法:

緣由:在windows中寫好shell腳本測試正常,可是上傳到 Linux 上以腳本方式運行命令時提示No such file or directory錯誤,那麼通常是文件格式是dos格式的緣故,改爲unix 格式便可。通常有以下幾種修改辦法。

 1)在Windows下轉換: 
利用一些編輯器如UltraEdit或EditPlus等工具先將腳本編碼轉換,再放到Linux中執行。轉換方式以下(UltraEdit):File-->Conversions-->DOS->UNIX便可。 
2)方法 
用vi打開該sh文件,輸入:
:set ff 
回車,顯示fileformat=dos,從新設置下文件格式:
:set ff=unix 
保存退出: 
:wq 再執行,就能夠了

相關文章
相關標籤/搜索