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