Hadoop2.7.6HA完全分布式集群搭建

1 集群搭建准备工作

1.1 集群环境

主机名称 主机IP Hadoop账号 NN DN ZK ZKFC

JN

RM

NM

node1 192.168.100.21 deng  √  √  
node2 192.168.100.22 deng  √
node3 192.168.100.23 deng      √

 

 

 

 

1.2 修改host文件

我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。因此我们在三个主机的/etc/hosts下均进行如下配置:
1. 打开hosts文件

[root@node1 ~]# vi /etc/hosts

2. 配置主机host

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.21 node1
192.168.100.22 node2
192.168.100.23 node3

3. 将配置发送到其他主机(同时在其他主机上配置)

[root@node1 ~]# scp /etc/hosts root@node2:/etc/hosts
[root@node1 ~]# scp /etc/hosts root@node3:/etc/hosts

4. 测试

[root@node1 ~]# ping node1
[root@node1 ~]# ping node2
[root@node1 ~]# ping node3

1.3 建立hadoop用户账号

我们在所有的主机下均建立一个grid账号用来运行hadoop ,并将其添加至sudoers中
创建deng账号的命令如下

[root@node1 ~]# useradd deng    添加用户通过手动输入修改密码
[root@node1 ~]# passwd --stdin deng  更改用户 deng 的密码
123456  passwd: 所有的身份验证令牌已经成功更新。

添加deng组到sudo中,在其中添加下面一行:

[root@node1 ~]# visudo
添加   deng   ALL=(ALL)     ALL

改行意思为,组:deng内的用户允许免密码使用sudo命令
测试:

[root@node1 root]$ su deng
[deng@node1 root]$ sudo 

1.4  配置yum源

yum install wget -y   #安装wget  
mv /etc/yum.repos.d /etc/yum.repos.d.backup4comex   #备份当前的yum源
mkdir /etc/yum.repos.d  #新建空的yum源设置目录
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo  #下载阿里云的yum源配置
yum clean all   #重建缓存
yum makecache  

1.5  卸载每台节点原有jdk,安装jdk1.8

[deng@node1 ~]# rpm -qa|grep java   #查询是否安装java软件:
[deng@node1 ~]# rpm -e –nodeps 软件包   #如果安装的版本低于1.7,卸载该jdk
[root@node1 opt]# mkdir module
[root@node1 opt]# mkdir tools
在线安装   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/tools/ 下 
[root@node1 tools]# tar zxvf  jdk-8u144-linux-x64.tar.gz  -C  /opt/module/
[root@node1 module]# mv jdk1.8.0_144 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@node1 ~]# scp -r /opt/module/jdk1.8 root@node2:`pwd`
[root@node1 ~]# scp -r /opt/module/jdk1.8 root@node3:`pwd`
配置各个主机下jdk的环境变量,由于我的电脑上linux都是新安装的,环境变量相同,因此直接复制到了其他主机上。如果不同的主机的环境变量不同,请手动设置
[root@node1 ~]# scp /etc/profile root@node2:/etc/profile
[root@node1 ~]# scp /etc/profile root@node3:/etc/profile
 在每个主机上都重新编译一下/etc/profile
[root@node1]# source /etc/profile
测试  java -version

1.6 设置SSH免密码登陆

关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。 这项操作我们需要在deng用户下执行。

[root@node1 ~]# su deng
[root@node1 ~]# ssh-keygen -t rsa
[root@node1 ~]# ssh-copy-id node1
[root@node1 ~]# ssh-copy-id node2
[root@node1 ~]# ssh-copy-id node3

node1与node2为namenode节点要相互免秘钥   HDFS的HA

[root@node2 ~]# ssh-keygen -t rsa
[root@node2 ~]# ssh-copy-id node2
[root@node2 ~]# ssh-copy-id node1
[root@node2 ~]# ssh-copy-id node3

node2与node3为yarn节点要相互免秘钥  YARN的HA

[root@node3 ~]# ssh-keygen -t rsa
[root@node3 ~]# ssh-copy-id node3
[root@node3 ~]# ssh-copy-id node1
[root@node3 ~]# ssh-copy-id node2 

2  下载解压安装配置hadoop

2.1 配置zookeeper集群

[root@node1 tools]# tar zxvf zookeeper-3.4.12.tar.gz -C /opt/module/ 
配置环境变量 vi /etc/profile  
export ZOOKEEPER_HOME=/opt/module/zookeeper-3.4.12
export  PATH=$PATH:$ZOOKEEPER_HOME/bin 
编译生效
source  /etc/profile  
修改配置文件zookeeper-3.4.12/conf/   
[root@node1 conf]# cp zoo_sample.cfg zoo.cfg
修改zk数据目录
[root@node1 conf]# vi  zoo.cfg
dataDir=/opt/module/zookeeper-3.4.12/zkDa
文件尾追加
server.1=192.168.100.21:2888:3888
server.2=192.168.100.22:2888:3888
server.3=192.168.100.23:2888:3888 
创建节点数据目录
[root@node1 ~]# mkdir -p /opt/module/zookeeper-3.4.12/zkDate
[root@node1 ~]#  echo 1 > /opt/module/zookeeper-3.4.12/zkDate/myid
分发zookeeper-3.4.12 到 node2 node3 节点上 配置环境变量 
[root@node1 module]# scp -r zookeeper-3.4.12 node2:`pwd` 
[root@node1 module]# scp -r zookeeper-3.4.12 node3:`pwd` 
修改node2 node3 节点myid的值 
[root@node2 tools]# mkdir -p /opt/module/zookeeper-3.4.12/zkDate
[root@node2 tools]# echo 2 > /opt/module/zookeeper-3.4.12/zkDate/myid
[root@node3 tools]# mkdir -p  /opt/module/zookeeper-3.4.12/zkDate
[root@node3 tools]# echo 3 > /opt/module/zookeeper-3.4.12/zkDate/myid
分别启动 zookeeper 
[root@node1 module]# zkServer.sh start 
[root@node2 module]# zkServer.sh start
[root@node3 module]# zkServer.sh start 
分别查看启动状态 zookeeper [root@node1 module]# zkServer.sh status  

2.2 下载解压hadoop,配置HDFS-HA集群,修改etc下配置文件

[root@node1 tools]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/
vi /etc/profile
export  HADOOP_HOME=/opt/module/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
编译生效  . /etc/profile

注意:在hadoop2.x中配置文件是放在etc下的

1.  修改配置文件   hadooop-env.sh

[root@node1 hadoop]# vi /opt/module/hadoop-2.7.6/etc/hadoop/hadoop-env.sh
修改  export JAVA_HOME=/opt/module/jdk1.8 

2.  修改配置文件   core-site.xml

[root@node1 hadoop]# vi /opt/module/hadoop-2.7.6/etc/hadoop/core-site.xml
<configuration>
<!-- 指定HDFS中NameNode的地址 -->
       <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/tmp</value>
        </property>
<!-- 指定hadoop运行时zookeeper集群节点 -->
      <property>
          <name>ha.zookeeper.quorum</name>
          <value>node1:2181,node2:2181,node3:2181</value>
       </property>
</configuration> 

3.  修改配置文件   hdfs-site.xml

[root@node1 hadoop]# vi /opt/module/hadoop-2.7.6/etc/hadoop/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>node1:8020</value>
	</property>
	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
		<value>node2:8020</value>
	</property>
	<!-- nn1的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.mycluster.nn1</name>
		<value>node1:50070</value>
	</property>
	<!-- nn2的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.mycluster.nn2</name>
		<value>node2:50070</value>
	</property>
	<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://node1:8485;node2:8485;node3: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>/root/.ssh/id_rsa</value>
	</property>
	<!-- 声明journalnode服务器存储目录-->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/opt/module/hadoop-2.7.6/data/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.  修改配置文件   slaves  这个配置文件是datanode所在的节点

[root@node1 hadoop]# vi slaves
node1
node2
node3  

5.  修改配置文件   mapred-env.sh

#export JAVA_HOME=/home/y/libexec/jdk1.6.0/
export   JAVA_HOME=/opt/module/jdk1.8 

6.  修改配置文件   mapred-site.xml

root@node1 hadoop]# mv mapred-site.xml.template mapred-site.xml
root@node1 hadoop]# vi  mapred-site.xml 
<configuration>
 <!-- 指定mr运行在yarn上 -->
    <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
    </property>
</configuration>

7.  修改配置文件   yarn-env.sh  

修改JAVA_HOME的路径  默认注释掉了  打开注释大概在第20行左右
export JAVA_HOME=/opt/module/jdk1.8 

8.  修改配置文件   yarn-site.xml

[root@node1 ~]# vi /opt/module/hadoop-2.7.6/etc/hadoop/yarn-site.xml
<configuration>
    <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>cluster1</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node3</value>
    </property> 
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node1:2181,node2:2181,node3: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>  

2.3  向各节点复制分发hadoop安装包,配置hadoop环境变量

[root@node1 module]# scp -r hadoop-2.7.6/ root@node2:`pwd`
[root@node1 module]# scp -r hadoop-2.7.6/ root@node3:`pwd`
配置node2,node3节点hadoop的环境变量

2.4  格式化namenode

[root@node1 ~]# hdfs namenode -format 

3   启动hadoop

3.1   启动命令

[root@node1 ~]# start-dfs.sh

3.2  测试jps查看进程

4   集群简单操作

 

 

 

猜你喜欢

转载自www.cnblogs.com/frankdeng/p/8996277.html