您的位置:首页 > 产品设计 > 产品经理

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

2014-04-09 12:59 232 查看
说明:
本文档实现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
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息