CentOS7 安裝Hadoop集群環境


先按照上一篇安裝與配置好CentOS以及zookeeper

http://www.cnblogs.com/dopeter/p/4609276.html

本章介紹在CentOS搭建Hadoop集群環境

 

一、 安裝Hadoop

1. 解壓文件

tar -zxvf hadoop-2.7.0-x64.tar.gz -C /opt #解壓Hadoop

2. 編輯全局變量

vi /etc/profile

增加以下全局變量

export HADOOP_HOME=/opt/hadoop-2.7.0
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export YARN_LOG_DIR=$HADOOP_LOG_DIR

 

source /etc/profile #即時生效

 

二、 配置Hadoop

cd /opt/hadoop-2.7.0/etc/hadoop

 

vi core-site.xml

<configuration>
        <!--HDFS路徑邏輯名稱-->
   <property>
        <name>fs.defaultFS</name>
       <value>hdfs://hcluster</value>
   </property>
        <!--Hadoop存放臨時文件位置-->
   <property>
        <name>hadoop.tmp.dir</name>
       <value>/home/hadoop/tmp</value>
   </property>
        <!--使用的zookeeper集群地址-->
   <property>
       <name>ha.zookeeper.quorum</name>
       <value>HSlave0:2181,HSlave1:2181,HSlave2:2181</value>
   </property>
</configuration>

vi hdfs-site.xml

<configuration>
   <property>
       <name>dfs.nameservices</name>
        <value>hcluster</value>
   </property>
        <!--NameNode地址集群標識(hcluster),最多兩個-->
   <property>
       <name>dfs.ha.namenodes.hcluster</name>
        <value>HMaster0,HMaster1</value>
   </property>
        <!--HDFS文件系統數據存儲位置,可以分別保存到不同硬盤,突破單硬盤性能瓶頸,多個位置以逗號隔開-->
   <property>
        <name>dfs.data.dir</name>
       <value>/home/hadoop/hdfs/data</value>
   </property>
        <!--數據副本數量,根據HDFS台數設置,默認3份-->
   <property>
        <name>dfs.replication</name>
        <value>3</value>
   </property>
   <property>
       <name>dfs.namenode.rpc-address.hcluster.HMaster0</name>
       <value>HMaster0:9000</value>
   </property>
        <!--RPC端口-->
   <property>
       <name>dfs.namenode.rpc-address.hcluster.HMaster1</name>
       <value>HMaster1:9000</value>
   </property>
        <!--NameNode HTTP訪問地址-->
   <property>
       <name>dfs.namenode.http-address.hcluster.HMaster0</name>
        <value>HMaster0:50070</value>
   </property>
   <property>
       <name>dfs.namenode.http-address.hcluster.HMaster1</name>
       <value>HMaster1:50070</value>
   </property>
        <!--NN存放元數據和日志位置-->
   <property>
       <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/name</value>
   </property>
        <!--同時把NameNode元數據和日志存放在JournalNode上(/home/hadoop/journal/hcluster)-->
   <property>
       <name>dfs.namenode.shared.edits.dir</name>
       <value>qjournal://HSlave0:8485;HSlave1:8485;HSlave2:8485/hcluster</value>
   </property>
        <!--JournalNode上元數據和日志存放位置-->
   <property>
       <name>dfs.journalnode.edits.dir</name>
       <value>/home/hadoop/journal</value>
   </property>
        <!--開啟NameNode失敗自動切換-->
   <property>
       <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
   </property>
        <!--NameNode失敗自動切換實現方式-->
   <property>
       <name>dfs.client.failover.proxy.provider.hcluster</name>
       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
   </property>
        <!--隔離機制方法,確保任何時間只有一個NameNode處於活動狀態-->
   <property>
       <name>dfs.ha.fencing.methods</name>
        <value>sshfence(hdfs)
                shell(/bin/true)</value>
   </property>
        <!--使用sshfence隔離機制要SSH免密碼認證-->
   <property>
       <name>dfs.ha.fencing.ssh.private-key-files</name>
       <value>/root/.ssh/id_rsa</value>
   </property>
</configuration>

 

vi yarn-site.xml

<configuration>
        <!--啟用RM高可用-->
   <property>
       <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
   </property>
        <!--RM集群標識符-->
   <property>
       <name>yarn.resourcemanager.cluster-id</name>
        <value>rm-cluster</value>
   </property>
   <property>
        <!--指定兩台RM主機名標識符-->
       <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
   </property>
        <!--RM故障自動切換-->
   <property>
        <name>yarn.resourcemanager.ha.automatic-failover.recover.enabled</name>
        <value>true</value>
   </property>
        <!--RM故障自動恢復
   <property>
       <name>yarn.resourcemanager.recovery.enabled</name> 
        <value>true</value> 
   </property> -->
        <!--RM主機1-->
   <property>
       <name>yarn.resourcemanager.hostname.rm1</name>
        <value>HMaster0</value>
   </property>
        <!--RM主機2-->
   <property>
       <name>yarn.resourcemanager.hostname.rm2</name>
        <value>HMaster1</value>
   </property>
       <!--RM狀態信息存儲方式,一種基於內存(MemStore),另一種基於ZK(ZKStore)-->
    <property>
       <name>yarn.resourcemanager.store.class</name>
       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
        <!--使用ZK集群保存狀態信息-->
    <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>HSlave0:2181,HSlave1:2181,HSlave2:2181</value>
    </property>
        <!--向RM調度資源地址-->
    <property>
       <name>yarn.resourcemanager.scheduler.address.rm1</name>
        <value>HMaster0:8030</value>
    </property>
    <property>
       <name>yarn.resourcemanager.scheduler.address.rm2</name>
       <value>HMaster1:8030</value>
    </property>
        <!--NodeManager通過該地址交換信息-->
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
       <value>HMaster0:8031</value>
    </property>
    <property>
       <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
       <value>HMaster1:8031</value>
    </property>
        <!--客戶端通過該地址向RM提交對應用程序操作-->
    <property>
       <name>yarn.resourcemanager.address.rm1</name>
       <value>HMaster0:8032</value>
    </property>
    <property>
       <name>yarn.resourcemanager.address.rm2</name>
       <value>HMaster1:8032</value>
    </property>
        <!--管理員通過該地址向RM發送管理命令-->
    <property>
       <name>yarn.resourcemanager.admin.address.rm1</name>
       <value>HMaster0:8033</value>
    </property>
    <property>
       <name>yarn.resourcemanager.admin.address.rm2</name>
        <value>HMaster1:8033</value>
    </property>
        <!--RM HTTP訪問地址,查看集群信息-->
    <property>
       <name>yarn.resourcemanager.webapp.address.rm1</name>
       <value>HMaster0:8088</value>
    </property>
    <property>
       <name>yarn.resourcemanager.webapp.address.rm2</name>
       <value>HMaster1:8088</value>
    </property>
</configuration>

 

vi mapred-site.xml

<configuration>
        <!--指定MR框架為YARN-->
   <property>
       <name>mapreduce.framework.name</name>
        <value>yarn</value>
   </property>
        <!-- 配置 MapReduce JobHistory Server地址 ,默認端口10020 -->
   <property>
        <name>mapreduce.jobhistory.address</name>
       <value>0.0.0.0:10020</value>
   </property>
        <!-- 配置 MapReduce JobHistory Server HTTP地址, 默認端口19888 -->
   <property>
       <name>mapreduce.jobhistory.webapp.address</name>
        <value>0.0.0.0:19888</value>
   </property>
</configuration>

 

vi hadoop-env.sh

export JAVA_HOME=${JAVA_HOME}修改為安裝的JDK路徑 export JAVA_HOME=/usr/java/jdk1.8.0_45

 

vi slaves

HSlave0
HSlave1
HSlave2
 
三、拷貝至每個節點
 
scp -r /opt/hadoop-2.7.0 hmaster1:/opt
...
直到slave2
 
四、 啟動Hadoop集群
 
1. 對NameNode(HMaster0)節點進行格式化
hadoop namenode -format
 
如果有錯誤發生可以在/opt/hadoop/logs下的hadoop-root-namenode-localhost.localdomain.log文件中查看日志
說明2種常見錯誤:
1. 在hadoop的hdfs-site.xml配置中,有這個屬性dfs.namenode.shared.edits.dir,值為qjournal://HSlave0:8485;HSlave1:8485;HSlave2:8485/hcluster
錯誤會報連接HSlave0:8485被積極拒絕,在每個Slave節點機器上運行命令
 
hadoop-daemon.sh start journalnode
 
該命令運行后,在Slave節點機器上會開啟監聽8485端口的Socket,再次格式化NameNode,就不會報這個錯了
 
2. 有時DataNode會無法啟動,查看錯誤日志是NameNode機器(Master機器)和DataNode機器(Slave機器)namespaceID或者clusterID不一致,有2種解決方案
第一種解決方案是修改VERSION文件中不一致,VERSION文件在hdfs-site,xml配置中該屬性dfs.namenode.name.dir定義的路徑下的current文件夾中
第二種解決方案即是刪除current文件夾以及DataNode機器的tmp文件夾,有可能文件夾在NameNode機器和DataNode機器下相對路徑不一樣,但根路徑都一樣,在第一種解決方案中有說明,再次格式化NameNode就OK了
 
 
2. 啟動HMaster0(active)節點NameNode
 
hadoop-daemon.sh start namenode
 
3. HMaster1節點上同步(HMaster0)元數據
 
hdfs namenode -bootstrapStandby #實際上是將HMaster0機器上的current文件夾同步過來
 
4. 啟動HMaster1(standby)節點NameNode
 
hadoop-daemon.sh start namenode
 
5. 在HMaster0格式化ZKFC
 
hdfs zkfc -formatZK
 
6. 在HMaster0節點啟動HDFS集群
 
start-dfs.sh
 
7. 啟動ResourceManager(HMaster0機器)
 
start-yarn.sh
 
8. 在standby節點啟動ResourceManager(HMaster1機器)
 
yarn-daemon.sh start resourcemanager
 
 
 
 
驗證集群是否成功
 
 
 
 
 
 
 
 
2015-7-7
 
運行wordcount示例時,遇到的錯誤問題
org.apache.hadoop.yarn.exceptions.InvalidAuxServiceException: The auxService:mapreduce_shuffle does not exist
 
cd /opt/hadoop-2.7.0/ect/hadoop
vim yarn-site.xml
增加2個配置
<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
</property>
<property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
 
2015-7-23
1. 如果是在Windows上Eclipse連接Hadoop集群,Windows的用戶名最好和Linux上運行Hadoop的用戶名一樣,不然Eclipse上會報很多莫名其妙的錯誤,應該是權限的問題
2. Liunx的主機名,如果用虛擬機,Copy虛擬機的文件至另外機器時,虛擬機的系統主機名可能會改變,使用hostnamectl status 查看,如果和Hadoop中配置的主機名不再一樣,hostnamectl set-hostname xxx來改變主機名
 
2015-8-28
如果節點機器從其他虛擬機Clone而來,最好修改網卡的MAC地址,否則局域網內是通的,但有可能不能上外網。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM