JobTracker HA CDH4.2(完整版)

CDH4 HA搭建手册V1.2

 

一、           机器情况

ocdata17

10.1.253.27

ocdata18

10.1.253.28

ocdata19

10.1.253.29

 

我们有两台NAMENODE机器 分别部署在ocdata19和ocdata18上

我们有两台Jobtracker机器 分别部署在ocdata19和ocdata18上

同时有三台journalnode用来存储namenode元数据

 

有三台zookeeper组成的集群用来管理namenode的状态(active或者standby)

当active的namnode出现问题时,standby节点立刻投入使用

 

有一台datanode节点,部署在ocdata17上

有一台tasktracker节点,部署在ocdata17上

 

 

二、           HDFS部署文档

1.建立用户

   每台机器 登录root 用户 

   adduser cdh4ha;

   passwd cdh4ha;  输入密码

 

2.建立ssh联接 

   登录ocdata17 

   mkdir .ssh

   ssh-keygen -t rsa –f~/.ssh/id_rsa 

   cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys

   将.shh文件分发到ocdata18和ocdata19上

   并将三台机器文件夹授权  

    chmod 711 .ssh
    chmod 644 .ssh/authorized_keys

    保证三台机器无需密码即可切换用户

3.  搭建zookeeper

     上传zookeeper.

     复制conf/zoo_sample.cfg  >>>conf/zoo.cfg

     修改cfg : dataDir=/home/cdh4ha/zoodata         --zookeeper用来存放数据的位置

     添加   :     server.1=ocdata19:2898:3898          --3台zookeeper机器构建一个集群
                   server.2=ocdata17:2898:3898
                   server.3=ocdata18:2898:3898

    修改clientPort=2183

      分发zookeeper到集群。

      在各个机器中建立文件/home/cdh4ha/zoodata/myid        --myid中的数字代表当前机器在集群中的编号

      ocdata17 中输入2                                                                 --要和上面对应

      ocdata18 中输入3

      ocdata19 中输入1 

      启动每台机器的zookeeper服务

      ./bin/zkServer.sh start

      检查各个机器的启动情况 

      echo ruok | nc ocdata192181

      echo ruok | nc ocdata172181

      echo ruok | ncocdata18 2181

      如果都返回imok 则代表zookeeper搭建成功

4. 上传hadoop

a)        修改 core-site.xml 

<configuration>

 

<property>

<name>dfs.replication</name>

<value>1</value>

<description>副本数目,由于只有一个DATANODE设置为1</description>

</property>

 

<property>

<name>dfs.nameservices</name>

<value>mycluster</value>

</property>

 

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2</value>

<description>mycluster下拥有两个namenode节点</description>

</property>

 

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>ocdata19:8020</value>

<description>节点NN1的RPC地址</description>

</property>

 

<property>

<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>ocdata18:8020</value>

<description>节点NN2的RPC地址</description>

</property>

 

<property>

<name>dfs.namenode.http-address.mycluster.nn1</name>

<value>ocdata19:50072</value>

<description>节点NN1的HTTP地址</description>

</property>

 

<property>

<name>dfs.namenode.http-address.mycluster.nn2</name>

<value>ocdata18:50072</value>

<description>节点NN2的HTTP地址</description>

</property>

 

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://ocdata19:8485;ocdata17:8485;ocdata18:8485/mycluster</value>

<description>我们采用3个journalnode节点存储元数据,这是他们的IP与端口</description>

</property>

 

 

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/cdh4ha/journaldata/jn</value>

<description>journaldata的存储路径</description>

</property>

 

<property>

<name>dfs.client.failover.proxy.provider.mycluster</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

<description>该类用来判断哪个namenode处于生效状态</description>

</property>

<property>

<name>dfs.ha.fencing.methods</name>

<value>shell(/bin/true)</value>

</property>

 

<!--

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

 

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/cdh4ha/.ssh/id_rsa</value>

</property>

-->

<property>

<name>dfs.ha.fencing.ssh.connect-timeout</name>

<value>10000</value>

</property>

 

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

<description>打开自动切换namenode的功能</description>

</property>

 

<property>

<name>ha.zookeeper.quorum</name>

<value>ocdata19:2183,ocdata17:2183,ocdata18:2183</value>

<description>3个zookeeper节点</description>

</property>

 

</configuration>

 

b)        修改slaves

 

添加一行 ocdata17
    

 

    分发hadoop到各个机器

 

5. 启动JournalNode服务

    下面的所有hadoop命令都必须以./xxx的形式执行。否则会报错。(应该和shell解释器有关)。

    进入bin目录  ./hdfs journalnode               --启动journalnode服务

    每台机器都如此执行。

    访问web页面 ocdata19:8480,ocdata17:8480,ocdata18:8480

    检查服务是否正常     --启动后可能会抛异常,没关系,格式化namenode后就好了

 

6.  启动hadoop

a)        进入ocdata19 hadoop/bin目录

          执行 ./hdfs namenode -format                  

          执行 ./hdfs zkfc -formatZK                     --在zookeeper集群中建立znode节点

          执行  ./hdfsnamenode                                     --启动namenode

 

b)        进入ocdata18 hadoop/bin目录

          执行  ./hdfsnamenode -bootstrapStandby   --主要是同步namenode元数据,最好在选举服务启动之前同步

          执行  ./hdfs namenode

    

 

c)        进入 ocdata17 hadoop/bin目录

          执行 ./hdfs datanode                                        --启动datanode

 

d)        每台NAMENODE节点都要执行以下命令启动自动选举服务

        执行  ./hdfs zkfc                                              --启动自动选举服务

 

 

     查看页面 ocdata19:50070    ocdata18:50070  应该一个处于standby状态 一个处于active状态 。并有一个datanode节点。 

 

 

 

 

 

三、           MR1部署文档

1.     上传hadoop-mr1

a)        将HDFS的core-site copy过来

b)        将HDFS的hdfs-site copy过来

c)        修改mapred-site.xml

<configuration>

 

<property>

<name>mapred.job.tracker</name>

<value>logicaljt</value>

</property>

 

<property>

<name>mapred.jobtrackers.logicaljt</name>

<value>jt1,jt2</value>

<description>Comma-separatedlist of JobTracker IDs.</description>

</property>

 

<property>

<name>mapred.jobtracker.rpc-address.logicaljt.jt1</name>

<value>ocdata19:8021</value>

</property>

 

<property>

<name>mapred.jobtracker.rpc-address.logicaljt.jt2</name>

<value>ocdata18:8022</value>

</property>

 

<property>

<name>mapred.job.tracker.http.address.logicaljt.jt1</name>

<value>ocdata19:50010</value>

</property>

 

<property>

<name>mapred.job.tracker.http.address.logicaljt.jt2</name>

<value>ocdata18:50012</value>

</property>

 

<property>

<name>mapred.ha.jobtracker.rpc-address.logicaljt.jt1</name>

<value>ocdata19:8023</value>

</property>

 

<property>

<name>mapred.ha.jobtracker.rpc-address.logicaljt.jt2</name>

<!-- RPCaddress for jt2 HA daemon -->

<value>ocdata18:8024</value>

</property>

<property>

<name>mapred.ha.jobtracker.http-redirect-address.logicaljt.jt1</name>

<!-- HTTPredirect address for jt1 -->

<value>ocdata19:50010</value>

</property>

<property>

<name>mapred.ha.jobtracker.http-redirect-address.logicaljt.jt2</name>

<!-- HTTPredirect address for jt2 -->

<value>ocdata18:50012</value>

</property>

 

<property>

 <name>mapred.task.tracker.http.address</name>

    <value>0.0.0.0:50033</value>

    </property>

<property>

 

 

<name>mapred.local.dir</name>

<value>/home/cdh4ha/mr1data</value>

</property>

 

<property>

<name>mapred.jobtracker.restart.recover</name>

<value>true</value>

</property>

<property>

<name>mapred.job.tracker.persist.jobstatus.active</name>

<value>true</value>

</property>

<property>

<name>mapred.job.tracker.persist.jobstatus.hours</name>

<value>1</value>

</property>

<property>

<name>mapred.job.tracker.persist.jobstatus.dir</name>

<value>/home/cdh4ha/mr1data/jobtracker/jobsInfo</value>

</property>

 

<property>

<name>mapred.client.failover.proxy.provider.logicaljt</name>

<value>org.apache.hadoop.mapred.ConfiguredFailoverProxyProvider</value>

</property>

 

<property>

<name>mapred.client.failover.max.attempts</name>

<value>15</value>

</property>

 

<property>

<name>mapred.client.failover.sleep.base.millis</name>

<value>500</value>

</property>

 

<property>

<name>mapred.client.failover.sleep.max.millis</name>

<value>1500</value>

</property>

 

<property>

<name>mapred.client.failover.connection.retries</name>

<value>0</value>

</property>

 

<property>

<name>mapred.client.failover.connection.retries.on.timeouts</name>

<value>0</value>

</property>

 

<property>

<name>mapred.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

 

<property>

<name>mapred.ha.zkfc.port</name>

<value>8018</value>

</property>

 

<property>

<name>ha.zookeeper.quorum</name>

<value>ocdata19:2183,ocdata17:2183,ocdata18:2183</value>

<!-- ZKensemble addresses -->

</property>

 

<property>

<name>mapred.ha.fencing.methods</name>

<value>shell(/bin/true)</value>

</property>

 

</configuration>

2.     启动hadoop

a)        ./hadoop mrzkfc –formatZK  --在zookeeper节点上建立znode

b)        在每台jobtracker节点上执行以下命令

./hadoop jobtrackerha

./hadoop mrzkfc

c)        在ocdata17上执行

./hadooptasktracker

四、           HIVE部署

a)        将HADOOP_HOME指向mr1的文件夹。

b)        ./hiveserver2 启动hiveserver即可。

五、           测试流程

a)        进入ocdata16的bin目录下

创建文件test.py

logfile = open("org","w")

for i in range(9999999) :

for i in range(10) :

logfile.write("abc");

logfile.close();

运行python test.py

该脚本用来创建一个名为org的文件,大小在300MB左右。

 

 

b)        创建文件a.sh

for i in 1 2 3 4 5 6 7 8 9 10

do

./hadoop fs -copyFromLocal org /org${i} &

Done

用来并发上传文件10次。

运用上面两个脚本可执行如下测试用例,主要用来测试集群的稳定性

 

机器情况如下:

ocdata19 namenode(active)    jobtracker(active)   

ocdata18 namenode(standby)  jobtracker(standby)   hiveserver

ocdata17 datanode           tasktracker

 

1.      ocdata16上传文件org>>>  kill ocdata16 namenode>>>上传成功 ocdata17 变为active 后台日志开始报错提醒ocdata16 down掉>> 启动ocdata16 namenode >>ocdata16 变为standby

 

2.      ocdata16上并发上传文件10个 >>kill ocdata17 namenode >>ocdata16 namenode 变为acitve >>文件上传成功>> 启动ocdata17  namenode>>ocdata17 变为standby

 

 

3.        ocdata16上并发上传文件10个 >>kill ocdata17 journalnode >>文件上传成功>>日志开始报错提醒journalnodedown掉 >> 重启journalnode

 

4.        集成测试:

 

ocdata18 上分别部署了一台hiveserver.

 

我们创建了6 张表格,分别为table1-6

其中table1和table2 各自有1亿条数据,接下来我们通过JDBC执行下列语句

insert overwrite table table3 select t1.* from table1 t1join table2 t2 on t1.userid=t2.userid

insert overwrite table table4 select t1.* from table1 t1join table2 t2 on t1.userid=t2.userid

insert overwrite table table5 select t1.* from table1 t1 jointable2 t2 on t1.userid=t2.userid

insert overwrite table table6 select t1.* from table1 t1join table2 t2 on t1.userid=t2.userid

 

在执行的过程中 ,重启ocdata19机器。

这个操作相当于 :

a)        Kill掉当前active的namnode

b)        Kill掉当前active的jobtracker

c)        Kill掉一个journalnode节点

d)        Kill掉一个zookeeper节点

结果:  语句顺利执行完毕。表明我们的HA集群已经可以投入基本的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值