HBase集群基于HDFS

Posted 健哥说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase集群基于HDFS相关的知识,希望对你有一定的参考价值。

HBase集群安装-HDFS模式

即将hbase的数据保存到hdfs上,只需要指定:hbase.rootdir=hdfs://ip:port/hbase即可。

 

前置条件:

1SSH信任。建议使用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命令,和执行一个mapreducewordcount程序。

 

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查看表的信息和状态:

 

HBase集群基于HDFS


上面的命令中,最后一个命令move是将其中一个分区regin移动到hadoop41服务器上去,移动完成以后查看这个region的状态:

 

移动完成。(上次在file:///下使用)

 

6JavaAPI测试

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上启动一个 standbyhmaster:

[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 在单独的集群上

Hbase/HDFS存储扩容实践

ubuntu18.04 基于Hadoop3.1.2集群的Hbase2.0.6集群搭建

Hadoop集群 Hbase搭建

Hadoop集群搭建 Hbase

hbase集群部署与测试(2017)