老师的联邦机制的hadoop集群的分布 :
master1 : namenode zkfc
master1ha : namenode zkfc zookeeper journalnode
master2: namenode zkfc zookeeper journalnode
master2ha: namenode zkfc zookeeper journalnode
h2slave1: nodemanager datanode
h2slave2: nodemanager datanode
h2slave3: nodemanager datanode
HBase的安装文档:
1.1 上传
1.2 解压
1.3 重命名
1.4 修改环境变量(每台机器都要执行)
1.5 修改配置文件
1.6 分发
1.7 启动
先在一台机器上安装,配置好了之后,再发送到其他的从机器上。
配置文件 conf:
一般情况下,软件有这么三类配置文件:1,xxxx-site.xml : 核心配置 2,xxx-env.sh : 配置环境变量的 3. xxxs :: 没有后缀名的文件 : 用来配置从节点的。
为什么要配置环境变量?
如何没配置环境变量,jdk照样能用如果没有配置环境变量的话,那么就需要告诉软件jdk在哪,所以最好指定环境变量。
export JAVA_HOME=/usr/jdk/
export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HBASE_OPTS="-XX:+UseConcMarkSweepGC" -- JVM参数
export HBASE_MANAGES_ZK=false -- 如果是false,那么就需要使用自己配置的zookeeper集群,如果是true,那么就是使用HBase内置的单机版本的zoookeeper
- 配置从节点: regionservers
h2slave1
h2slave2
h2slave3
- hbase-site.xml : 核心配置
- Master的位置:
<property>
<name>hbase.master</name>
<value>master1:60000</value>
</property>
- 间隔时间 : 主和备NameNode需要检查心跳。
运行主备的间隔时间
<property>
<name>hbase.master.maxclockskew</name>
<value>180000</value>
</property>
如果间隔时间出现问题报错了,那么就让主备的时间同步,或者把这个间隔时间改大一点。
- HBase是依赖hdfs存储的,需要制定存储的位置
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop-cluster1/hbase</value>
</property>
<property>
hadoop-cluster1 是逻辑名字,如果是配置ip : port的话,那么就只能指定一台机器连接hdfs,但是主跟备会切换的。所以这里指定的是主备的那套映射,这个映射是搭建hadoop联邦机制机器的时候,hadoop的配置文件里面定义好了的。所以应该把hadoop的配置文件 hdfs-site.xml 复制到这个HBase这个配置文件下。
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.nameservices</name>
<value>hadoop-cluster1,hadoop-cluster2</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoop-cluster1</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster1.nn1</name>
<value>master1:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster1.nn2</name>
<value>master1ha:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster1.nn1</name>
<value>master1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster1.nn2</name>
<value>master1ha:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.hadoop-cluster1.nn1</name>
<value>master1:9001</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.hadoop-cluster1.nn2</name>
<value>master1ha:9001</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hadoop-cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.namenodes.hadoop-cluster2</name>
<value>nn3,nn4</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster2.nn3</name>
<value>master2:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hadoop-cluster2.nn4</name>
<value>master2ha:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster2.nn3</name>
<value>master2:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.hadoop-cluster2.nn4</name>
<value>master2ha:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.hadoop-cluster2.nn3</name>
<value>master2:9001</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address.hadoop-cluster2.nn4</name>
<value>master2ha:9001</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.hadoop-cluster2</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/hadoop/namedir</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.hadoop-cluster1.nn1</name>
<value>qjournal://master1ha:8485;master2:8485;master2ha:8485/cluster1</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.hadoop-cluster1.nn2</name>
<value>qjournal://master1ha:8485;master2:8485;master2ha:8485/cluster1</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.hadoop-cluster2.nn3</name>
<value>qjournal://master1ha:8485;master2:8485;master2ha:8485/cluster2</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir.hadoop-cluster2.nn4</name>
<value>qjournal://master1ha:8485;master2:8485;master2ha:8485/cluster2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/hadoop/datadir</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master2ha:2181,master1ha:2181,master2:2181</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>ha.zookeeper.session-timeout.ms</name>
<value>5000</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/hadoop/jndir</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.permission</name>
<value>false</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
</configuration>
HBase只认识主机名字跟ip,因此需要hdfs-site.xml,还需要hadoop联邦机制下的core-site.xml
- 指定是否是集群模式
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
- 指定zookeeper
<property>
<name>hbase.zookeeper.quorum</name>
<value>master1ha,master2,master2ha</value>
</property>
6.指定zookeeper的工作的数据目录
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/hbase/tmp/zookeeper</value>
</property>
其他的配置都不需要配置,使用的都是默认的。
搞完了配置文件,我们从配置文件中,可以看出来,实际上HBase的从节点和主节点没有一个太大的区别,不想zookeeper有一个myid,配置都是一样的,主知道从是哪个,从也知道主是谁。
发送:
scp -r hbase/ hadoop@h2slave1:/home/hadoop/apps
scp -r hbase/ hadoop@h2slave2:/home/hadoop/apps
scp -r hbase/ hadoop@h2slave3:/home/hadoop/apps
接下来就是启动了。
现在HBase启动了一个主了,还需要启动另外的三个从
h2slave1,h2slave2,h2slave3
在启动一个主: 适合版本一
hbase-daemon.sh start master
启动失败,可以使用这个命令:
local-master-backup.sh start 2
如果想添加HBase从节点,复制一台从节点信息到另一台,然后直接启动就行。
hbase-daemon.sh start regionserver
所以加双主和动态增删节点是很简单就可以实现的。是有zookeeper来控制的。
zookeeper上有三个节点信息。
还有backup-master