2-0三台PC集群的搭建(HA+backupmaster)
2014-04-09 12:59
232 查看
说明:
本文档实现hdfs的HA功能,其中zookeeper的配置不变,hbase的配置略作修改,同时启用backup master
主要是修改hadoop的配置,相关内容:
参见:1-0三台PC集群的搭建(noHA)。
部署目录:/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
下载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
本文档实现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
相关文章推荐
- hadoop2.2+HA 集群搭建
- Spark集群基于Zookeeper的HA搭建部署
- Hadoop-2.8.0之分布式集群(HA架构)搭建
- 【HDFS篇】基于HA的hadoop集群分析及搭建(ZK+zkfc)
- 【YARN篇】基于HA的YARN集群搭建
- 【HDFS篇】完全分布式基于HA搭建HDFS集群(ZK+ZKFC+JN)
- hadoop集群搭建HDFS、HA、 YARN
- 7台机器的hadoop2.4.1高可用(HA)集群搭建
- Hadoop HA (高可用)集群搭建
- Redis Cluster高可用(HA)集群环境搭建详细步骤
- HDFS HA【QJM】集群搭建以及使用Zookeeper集群进行故障转移
- PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)
- Hadoop2.x通过Zookeeper实现NameNode HA方案集群搭建-实践版
- 搭建hadoop的高可用性(HA)集群
- 大数据 hadoop2.6.0 高可用集群搭建(HA集群搭建)--亲测可用,入门必备
- 11.重新搭建一套主从复制+高可用+多master的redis cluster集群
- 基于docker的hadoop HA 集群搭建
- hadoop2.6.4的HA集群搭建超详细步骤
- 在VMware上搭建ha集群