HBase集群基于HDFS
Posted 健哥说编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase集群基于HDFS相关的知识,希望对你有一定的参考价值。
HBase集群安装-HDFS模式
即将hbase的数据保存到hdfs上,只需要指定:hbase.rootdir=hdfs://ip:port/hbase即可。
前置条件:
1:SSH信任。建议使用ssh-agent。
2:配置好JDK及环境变量。
3:关闭防火墙。
4:配置/etc/hosts文件主机影射。
5:在配置好hadoop以后,配置hadoop的环境变量。
步1、配置表
服务器 |
软件 |
进程 |
|
Hadoop进程 |
HBase进程 |
||
hadoop41 192.168.56.41 |
JDK1.8 Hadoop2.7.6
HBase2.0 |
NameNode
NodeManager DataNode |
HMaster
HRegionServer HQuorumPeer |
hadoop42 192.168.56.42
|
JDK1.8 Hadoop2.7.6
HBase2.0 |
ResourceManager
NodeManager DataNode |
HRegionServer
HQuorumPeer |
hadoop43 192.168.56.43 |
JDK1.8 Hadoop2.7.6
HBase2.0 |
SecondaryNameNode
NodeManager DataNode |
HRegionServer
HQuorumPeer |
步2、配置hadoop完全分布式
hadoop的配置文件
hadoop-env.sh
export JAVA_HOME=/usr/jdk1.8_171
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop41:8020</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/app/hadoop/dfs/name,/app/hadoop/dfs2/name</value>
</property>
<property>
<name>dfs.namenode.edits.dir</name>
<value>/app/hadoop/edits,/app/hadoop/edits2</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/app/hadoop/dfs/datas,/app/hadoop/dfs2/datas</value>
</property>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop41:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.https-address</name>
<value>hadoop43:50091</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop43:50090</value>
</property>
<property>
<name>dfs.stream-buffer-size</name>
<value>131072</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.task.io.sort.mb</name>
<value>50</value>
<description>默认为100M</description>
</property>
<property>
<name>mapreduce.cluster.local.dir</name>
<value>/app/hadoop/mapreduce-cluster-local-dir</value>
<description>溢出目录,可以使用逗号分开设置多个目录</description>
</property>
<property>
<name>mapreduce.jobtracker.system.dir</name>
<value>/app/hadoop/mapreduce-jobtracker-system-dir</value>
<description>保存mapreduce的控制文件</description>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>512</value>
<description>mapred运行所需要的内存,默认为1024M</description>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>512</value>
<description>reduce运行时所需要的内存,默认为1024M</description>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop42</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/app/hadoop/nm-local-dir</value>
<description>nodemanager计算数据保存的目录,可以使用逗号分开多个目录</description>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
</configuration>
slaves
hadoop41
hadoop42
hadoop43
配置好以后,启动hadoop并进行基本的测试,如执行hdfs命令,和执行一个mapreduce的wordcount程序。
步3、配置hbase
1、解压hbase
[wangjian@hadoop41 /app]$ tar -zxvf ~/hbase-2.0.1-bin.tar.gz -C .
2、配置hbase
hbase-env.sh
export JAVA_HOME=/usr/jdk1.8.0_171
hbase-site.xml
<configuration>
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop41:8020/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.local.dir</name>
<value>/app/hbase/local</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/app/hbase/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop41:2181,hadoop42:2181,hadoop43:2181</value>
</property>
</configuration>
regionservers
hadoop41
hadoop42
hadoop43
3、配置hbase的环境变量
export HBASE_HOME=/app/hbase-2.0.1
export PATH=$PATH:$HBASE_HOME/bin
配置好以后,查看版本:
[wangjian@hadoop41 app]$ hbase version
HBase 2.0.1
4、分发hbase安装文件和环境变量配置文件
[wangjian@hadoop41 app]$ scp -r hbase-2.0.1/ hadoop42:/app/
[wangjian@hadoop41 app]$ scp -r hbase-2.0.1/ hadoop43:/app/
环境变量配置文件:
$ scp /etc/profile.d/hbase.sh root@hadoop42:/etc/profile.d/
$ scp /etc/profile.d/hbase.sh root@hadoop43:/etc/profile.d/
步4、启动hbase
启动hbase之前,先确定已经启动了Hadoop集群。
[wangjian@hadoop41 app]$ start-hbase.sh
hadoop42: running zookeeper, logging to /app/hbase-2.0.1/logs/hbase-wangjian-zookeeper-hadoop42.out
hadoop43: running zookeeper, logging to /app/hbase-2.0.1/logs/hbase-wangjian-zookeeper-hadoop43.out
hadoop41: running zookeeper, logging to /app/hbase-2.0.1/logs/hbase-wangjian-zookeeper-hadoop41.out
running master, logging to /app/hbase-2.0.1/logs/hbase-wangjian-master-hadoop41.out
hadoop43: running regionserver, logging to /app/hbase-2.0.1/logs/hbase-wangjian-regionserver-hadoop43.out
hadoop42: running regionserver, logging to /app/hbase-2.0.1/logs/hbase-wangjian-regionserver-hadoop42.out
hadoop41: running regionserver, logging to /app/hbase-2.0.1/logs/hbase-wangjian-regionserver-hadoop41.out
[wangjian@hadoop41 app]$ jps
2673 HRegionServer
2770 Jps
1780 DataNode
2550 HMaster
1399 NodeManager
1671 NameNode
2460 HQuorumPeer
启动以后检查每一个节点上的进程是否与配置表的进程相同。如果有不同,请查找问题。
第二台服务器:
[wangjian@hadoop42 app]$ jps
12289 HQuorumPeer
12547 Jps
11740 NodeManager
12092 DataNode
11631 ResourceManager
12399 HRegionServer
第三台服务器:
[wangjian@hadoop43 app]$ jps
2307 NodeManager
3047 Jps
2473 DataNode
2601 SecondaryNameNode
2890 HRegionServer
2783 HQuorumPeer
现在观察16010端口的webui:
查看hdfs上的文件:
[wangjian@hadoop41 app]$ hdfs dfs -ls /
Found 4 items
drwxr-xr-x - wangjian supergroup 0 2018-06-26 11:08 /hbase
...
步5、操作表测试
创建一个表:
hbase(main):002:0> create "t01","info"
Created table t01
Took 2.5490 seconds
=> Hbase::Table - t01
再创建一个表,并指定预分区:
hbase(main):003:0> create "t02","info",{SPLITS=>['100','200']}
Created table t02
Took 1.3505 seconds
=> Hbase::Table - t02
使用命令,将一个region移动到另一个regionserver上去:
hbase(main):004:0> move 'c6a83c9d712cde5f076c72d8eac3e007','hadoop41,16020,1529982477434'
Took 1.2674 seconds
现在通过16010查看表的信息和状态:
上面的命令中,最后一个命令move是将其中一个分区regin移动到hadoop41服务器上去,移动完成以后查看这个region的状态:
移动完成。(上次在file:///下使用)
步6、JavaAPI测试
public class Demo03_Cluster {
Configuration config;
Connection con;
HBaseAdmin admin;
@Before
public void before() throws Exception {
config = HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum", "hadoop41:2181,hadoop42:2181,hadoop43:2181");
con = ConnectionFactory.createConnection(config);
admin = (HBaseAdmin) con.getAdmin();
}
@After
public void after() throws Exception {
admin.close();
con.close();
}
@Test
public void test1() throws Exception {
TableName[] tns = admin.listTableNames();
for (TableName n : tns) {
System.out.println(n.getNameAsString());
}
}
以上测试都成功,现在就可以愉快的玩耍了!!!
其他:
也能显示表的详细信息了:
登录zkcli的测试:
[wangjian@hadoop43 app]$ hbase zkcli
[zk: hadoop41:2181,hadoop42:2181,hadoop43:2181(CONNECTED) 0] ls /
[zookeeper, hbase]
在hadoop42上启动一个 standby的hmaster:
[wangjian@hadoop42 app]$ hbase-daemon.sh start master
running master, logging to /app/hbase-2.0.1/logs/hbase-wangjian-master-hadoop42.out
查看webui:
以上是关于HBase集群基于HDFS的主要内容,如果未能解决你的问题,请参考以下文章
POC:Cloudera Impala + HDFS + HBase 在单独的集群上