2-0三台PC集群的搭建(HA+backupmaster)

说明:

本文档实现hdfs的HA功能,其中zookeeper的配置不变,hbase的配置略作修改,同时启用backup master

主要是修改hadoop的配置,相关内容:

参见:1-0三台PC集群的搭建(noHA)。

 

1.HADOOP 修改

实现HDFS的HA的搭建,

部署目录:/opt/hadoop-2.2.0

(1)创建目录(变化)

Namenode节点(master1,slave1):

mkdir –p /data/hdfs/nn

Journal节点(master1,slave1,slave2)

mkdir –p/data/journal

所有hadoop(master1,slave1-2)节点:

mkdir –p/data/tmp_hadoop   /data/hdfs/dn  /data/log/hadoop-hdfs   /data/log/hadoop-yarn  /data/log/hadoop-mapred  /data/yarn/local  /data/yarn/logs

(2)环境变量

vi/etc/profile.d/hadoop.sh 

添加

#set hadoop environment

export HADOOP_HOME=/opt/hadoop-2.2.0 

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

(3)配置文件修改

1)配置masters(变化)

#标识secondarynamendoe,这里采用了HA方案,这个配置缺省。

2) 配置slaves  

#标识集群的datanode

master1

slave1

slave2

3) 配置hadoop-env.sh

export JAVA_HOME=/opt/jdk1.7.0_45

export HADOOP_LOG_DIR=/data/log/hadoop-hdfs

export YARN_LOG_DIR=/data/log/hadoop-yarn

export HADOOP_MAPRED_LOG_DIR=/data/log/hadoop-mapred

4) 配置yarn-env.sh

export JAVA_HOME=/opt/jdk1.7.0_45

5)编辑core-site.xml(变化)

<!--- global properties -->

<property>

       <name>hadoop.tmp.dir</name>

       <value>/data/tmp_hadoop</value>

         <!-- /tmp/hadoop-${user.name} -->

         <!--A base for other temporarydirectories-->

</property>

<!-- file system properties -->

<property>                                            

       <name>fs.defaultFS</name>                          

       <value>hdfs://mycluster</value>

          <!--默认的文件服务的协议和NS逻辑名称-->

</property>

<property>

      <name>fs.trash.interval</name>

      <value>1440</value>

        <!--24h,0代表关闭-->

</property>

<property>

      <name>fs.trash.checkpoint.interval</name>

      <value>1440</value>

         <!--一般小于等于fs.trash.interval-->

</property>

 

<!-- i/o properties -->

<property>

         <name>io.file.buffer.size</name>

         <value>131072</value>

         <!--读写序列化文件缓冲区大小-->

</property>

<!-- Local file system -->

<property>

        <name>dfs.blocksize</name>

        <value>67108864</value>

        <!--268435456256M-->

</property>

<!--HTTP web-consoles Authentication -->

<property>

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

      <value>sshfence</value>

      <!--sshfence,brainsplit-->

</property>

<property>

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

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

         <!--启用kerberos后,应该是用户hdfs-->

</property> 

<!--Static Web User Filter properties. -->

<property>

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

       <value>master1:2181,slave1:2181,slave2:2181</value>

</property>

6)编辑hdfs-site.xml(变化)

<!---默认的文件服务的协议和NS逻辑名称-- >

<!--需要配置本地目录的地方-->

<property>                                           

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

        <value>/data/hdfs/nn</value>

              <!--file://${hadoop.tmp.dir}/dfs/name-->

              <!--命名空间和事务处理日志-->

</property>

<property>                                         

        <name>dfs.datanode.data.dir</name>                   

        <value>/data/hdfs/dn</value>

              <!--file://${hadoop.tmp.dir}/dfs/data-->

              <!--DataNode本地文件存储的路径-->

</property>

<property>

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

       <value>/data/journal</value>

       <!--JournalNode 所在节点上的一个目录,用于存放 editlog和其他状态信息-->  

</property>

<!--security -->

<property>

 <name>dfs.permissions.superusergroup</name>

 <value>hadoop</value>

</property>

<!--HDFS_HA-->

<property>

        <name>dfs.nameservices</name>

        <value>mycluster</value>

        <!-- HDFS命名服务的逻辑名称mycluster-->

</property>

<property>

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

       <value>nn1,nn2</value>

       <!--mycluster下有两个NameNode,为 nn1(master1)和nn2(master2)-->

</property>

<property>

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

        <value>master1:8020</value>

       <!--每个NameNode 设置RPC 地址-->

</property>

<property>

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

        <value>slave1:8020</value>

</property>

<property>

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

       <value>master1:50070</value>

      <!--每个NameNode 对外的 HTTP地址-->

</property>

<property>

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

       <value>slave1:50070</value>

</property>

<property>

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

       <value>qjournal://master1:8485;slave1:8485;slave2:8485/mycluster</value>

       <!--设置一组journalNode 的 URI 地址-->

</property> 

<property>

      <name>dfs.client.failover.proxy.provider.mycluster</name>     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

      <!--客户端与active NameNode 进行交互的 Java实现类(默认) -->

</property>

<property>

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

       <value>true</value>

       <!--autofailover,ZKFC-->

</property>

 

<property>

        <name>dfs.namenode.handler.count</name>

        <value>100</value>

              <!--namenode服务线程数-->

</property>

<property> 

        <name>dfs.replication</name> 

        <value>3</value> 

              <!--冗余备份数目,一般为3-->

</property> 

7)编辑yarn-site.xml

<!--ForResourceManager-->

<property>

       <name>yarn.nodemanager.local-dirs</name>

       <value>/data/yarn/local</value>

       <!--${hadoop.tmp.dir}/nm-local-dir-->

       <!—NM存放临时文件的本地目录-->

</property>

<property>

       <name>yarn.nodemanager.log-dirs</name>

       <value>/data/yarn/logs</value>

       <!--${yarn.log.dir}/userlogs-->

       <!—NM存放container日志的本地目录-->

</property>

<property>

       <name>yarn.nodemanager.remote-app-log-dir</name>

       <value>/tmp/logs</value>

       <!--开启日志聚合后,container日志在HDFS目录-->

</property>

<property>

       <name>yarn.nodemanager.remote-app-log-dir-suffix</name>

       <value>logs</value>

       <!—日志目录后缀{yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam}-->

</property>

<property>

        <name>dfs.datanode.max.xcievers</name>

        <value>4096</value>

      <!--Datanode 有一个同时处理文件的上限, Hbase中要求修改的-->

</property>

<property>

        <name>yarn.log-aggregation-enable</name>

         <value>true</value>

               <!--是否启用日志聚合-->

</property>

 

 <!-- ResourceManager Configs -->

<property>

       <name>yarn.resourcemanager.webapp.address</name>

        <value>slave2:8088</value>

              <!--RMweb-->

</property>

<property>

       <name>yarn.resourcemanager.admin.address</name>

       <value>slave2:8033</value>

          <!--RM admin interface.-->

</property>

<property>

        <name>yarn.resourcemanager.address</name>

        <value>slave2:8032</value>

              <!--RM设置客户端提交job-->

</property>

<property>

        <name>yarn.resourcemanager.scheduler.address</name>

        <value>slave2:8030</value>

              <!--schedulerinterface -->

</property>

<property>

       <name>yarn.resourcemanager.resource-tracker.address</name>

      <value>slave2:8031</value>

</property>

<property>

      <name>yarn.resourcemanager.scheduler.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>

         <!--resource scheduler class-->

</property>

<property>

     <name>yarn.scheduler.minimum-allocation-mb</name>

     <value>512</value>

        <!--RM分配给每个container的最小内存-->

</property>

<property>

     <name>yarn.scheduler.maximum-allocation-mb</name>

     <value>4096</value>

        <!--RM分配给每个container的最大内存-->

</property>

<!--NodeManager-->

<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>

<property>

       <name>yarn.nodemanager.resource.memory-mb</name>

       <value>8192</value>

       <!--定义NM上可以分配给container的物理内存总量-->

</property>

<property>

       <name>yarn.nodemanager.vmem-pmem-ratio</name>

       <value>2.1</value>

       <!--最大虚拟内存比例for each container,-->

</property>

<property>

       <name>yarn.nodemanager.log.retain-seconds</name>

       <value>10800</value>

       <!--container日志在NM本地保存的默认时间,日志聚合关闭时有效-->

</property>

<!--JobHistoryServer-->

<property>

       <name>yarn.log-aggregation.retain-seconds</name>

       <value>-1</value>

       <!--设置聚合日志保留时间-->

</property>

<property>

       <name>yarn.log-aggregation.retain-check-interval-seconds</name>

       <value>-1</value>

       <!--参照聚合日志保留时间-->

</property>

8)编辑mapred-site.xml

<!-- MapReduce -->

<property>

         <name>mapreduce.framework.name</name>   

         <value>yarn</value>

               <!--运行框架设置为 HadoopYARN-->

</property>

<property>

       <name>mapreduce.map.memory.mb</name>

       <value>1536</value>

       <!--Maps最大资源-->

</property>

<property>

       <name>mapreduce.map.java.opts</name>

       <value>-Xmx1024M</value>

       <!--Maps Child JVM的heap-size堆大小-->

</property>

<property>

       <name>mapreduce.reduce.memory.mb</name>

       <value>3072</value>

       <!--Reduces最大资源-->

</property>

<property>

       <name>mapreduce.reduce.java.opts</name>

       <value>-Xmx2560M</value>

       <!--Reduces Child JVM的heap-size堆大小-->

</property>

<property>

       <name>mapreduce.task.io.sort.mb</name>

       <value>512</value>

       <!--sort整理数据最大使用内存设置-->

</property>

<property>

       <name>mapreduce.task.io.sort.factor</name>

       <value>100</value>

       <!--整理数据时一次合并的流数量-->

</property>

<property>

       <name>mapreduce.reduce.shuffle.parallelcopies</name>

       <value>50</value>

       <!--Reduce运行的最大并行复制数量,用来获取大量maps的输出-->

</property>   

 

<!--JobHistoryServer,另一部分配置在yarn-site.xml-->

<property>

        <name>mapreduce.jobhistory.address</name>   

         <value>slave1:10020</value>                       

</property>

<property>

        <name>mapreduce.jobhistory.webapp.address</name>

        <value>slave1:19888</value> 

        <!--MRJobHistory服务的web界面-->       

</property>

<property>

        <name>mapreduce.jobhistory.intermediate-done-dir</name>

        <value>/mr-history/tmp</value>  

       <!--MRjobs写入history files的目录-->                                   

</property>

<property>

        <name>mapreduce.jobhistory.done-dir</name>

        <value>/mr-history/done</value>

        <!--JHS管理的history files目录-->           

</property>

 

<property>

        <name>mapreduce.shuffle.port</name>

        <value>13562</value>

</property>

D)分发软件包到所有hadoop节点上

E)测试:

Step1:初始化:(all代表master1,slave1,slave2)

1)首先必须启动三台机子上的zookeeper

(all)zkServer.sh start

2)初始化zoookeeper(格式化znode)(在nn1,nn2中任意一台上进行都可以)

(nn1)bin /hdfs zkfc-formatZK

3)启动三台机子上的journalnode,

(all)hadoop-daemon.shstart journalnode

 4)(在其中一个namenode上,这里选择nn1)

格式化 NameNode

(nn1)bin/ hadoopnamenode –format

然后在master1上启动namenode

(nn2)sbin/ hadoop-daemon.sh start namenode

5)然后复制该 NameNode的dfs.namenode.name.dir 目录的数据到另外一个 NameNode的同一目录中(可以scp)。(让 NN2 从 NN1 上拉取最新的 FSimage:)

(nn2)  bin/hdfsnamenode -bootstrapStandby [-force | -nonInteractive]  

启动nn2上的namenode

(nn2)sbin/hadoop-daemon.sh startnamenode

6)此刻nn1,nn2都是standby,可以去查看

master1:50070,和slave1:50070,

启动zkfc服务

  (nn1)sbin/hadoop-daemon.shstart zkfc

(nn2)sbin/hadoop-daemon.shstart zkfc

7)人工切换(在nn1和nn2任意一台上进行)

bin /hdfshaadmin -failover  nn1   nn2

                   (standby)  (active)

8)在avtive上kill 掉namenode

刷新原先standbynamenode的网页,standby—active。

Step2:正常启动HA

(all)zkServer.sh start

(nn1或nn2):sbin/start-dfs.sh

启动YARN:(单独配置到master3上)

启动yarn(RM所在机器上,master3)

start-yarn.sh

访问slave2:8088查看RM

 启动JobHistoryServer(JHS所在机器上,master4)

mr-jobhistory-daemon.sh start historyserver

访问slave1:19888查看JHS

6.hbase集群修改

a)       前提:Hadoop集群,zookeeper集群已搭建好。

下载hbase-0.96.0-hadoop2-bin.tar.gz

部署目录:/opt/hbase-0.96.0-hadoop2

b)       Hbase节点上创建目录:

mkdir –p/data/hbase/logs

mkdir –p/data/hbase/tmp_hbase

c)        环境变量:

vi/etc/profile.d/java.sh  (编辑文件)

#set HBase environment

export HBASE_HOME=/opt/hbase-0.96.0-hadoop2

export PATH=$PATH:$HBASE_HOME/bin

export HBASE_HEAPSIZE=4096

d)       修改最大文件句柄限制

HBase是数据库,会在同一时间使用很多的文件句柄。大多数linux系统使用的默认值1024是不能满足的,

(ubuntu为例)

gedit  /etc/security/limits.conf

hadoop  -nofile  32768

 hadoop  soft/hard nproc 32000

gedit  /etc/pam.d/ common-session

session required  pam_limits.so

e)        替换包

在分布式模式下,Hadoop版本必须和HBase下的版本一致。用你运行的分布式Hadoop版本jar文件替换HBaselib目录下的Hadoop jar文件,以避免版本不匹配问题。确认替换了集群中所有HBase下的jar文件。Hadoop版本不匹配问题有不同表现,但看起来都像挂掉了。(habse-0.96.0+hadoop-2.2.0,其中替换17个jar包

1)启用backupHMaster

在conf下新建文件backup-masters,写入作为backupmaster的主机名,这里设定master1为主master,slave1为backup

slave1

2)修改/conf/regionservers文件,增加regionserver

master1

slave1

slave2

3)修改 /conf/hbase-env.sh

export  JAVA_HOME=/opt/jdk1.7.0_45

export HBASE_CLASSPATH=/opt/hadoop-2.2.0/etc/hadoop

export HBASE_MANAGES_ZK=false 

export HBASE_LOG_DIR=/data/hbase/logs

4)修改./conf/hbase-site.xml文件

<property>

<name>hbase.master</name>

<value>master1:60000</value>

</property>

<!--region server的共享目录,用来持久化Hbase-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://mycluster/hbase</value>

</property>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.zookeeper.property.clientPort</name>

<value>2181</value>

</property>

<property>

<name>hbase.zookeeper.quorum</name>

<value>master1,slave1,slave2</value>

<description>The directory shared by regionservers. </description>

</property>

<property> 

    <name>zookeeper.session.timeout</name> 

    <value>60000</value> 

</property> 

<property>

<name>hbase.tmp.dir</name>

<value>/data/hbase/tmp_hbase</value>

</property>

<property>

<name>hbase.regionserver.restart.on.zk.expire</name>

<value>true</value>

</property>

<property>

<name>hbase.regionserver.handler.count</name>

<value>10</value>

<description> 处理用户请求的线程数量,默认10</description>

</property>

 

5)分发软件包到所有hbase节点上

6)启动hbase

master1

  bin/start-hbase.sh

  访问  http://master1:60010

       slave1:60010

测试:bin/hbase shell

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值