大数据Hadoop集群之超级详细的HBase搭建

HBase

1、Hadoop和HBase

  • Hbase是基于Hadoop集群之上来搭建的
  • Hadoop有一些局限性:
    • 做一些批量的数据处理,吞吐量比较高,但是它对随机查询、实时操作性能是不行的
  • HBase是NoSQL数据库的一种,它跟传统的RDBMS有很大的差别
  • 不支持JOIN的,摒弃了关系型模型,而且在HBase中只有一种数据类型:byte[]
  • HBase可以用来存储非常大的表,上亿行的数据,有超过百万列,而且它常用在实时数据处理中。因为它的读写是很快的。

2、Hbase的应用场景

  • HBase只要有海量的数据存储,而且需要快速的写入以及快速的读取场景,就很适合HBase
  • 但NoSQL的特点:对事务的支持性较弱
  • 可以用来存储爬虫的数据,点赞/转发、银行的转账订单…

3、Hbase对于RDBMS对比Hive

Hive
  • 数据仓库工具

Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询

  • 用于数据分析、清洗

Hive适用于离线的数据分析和清洗,延迟较高

  • 基于HDFS、MapReduce

Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行

HBase
  • lNoSQL数据库

是一种面向列存储的非关系型数据库。

  • 用于存储结构化和非结构化的数据

适用于单表非关系型数据的存储,不适合做关联查询,类似JOIN等操作。

  • 基于HDFS

数据持久化存储的体现形式是Hfile,存放于DataNode中,被ResionServer以region的形式进行管理

  • 延迟较低,接入在线业务使用

面对大量的企业数据,HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度

总结Hive与HBase
  • Hive和Hbase是两种基于Hadoop的不同技术

  • Hive是一种类SQL的引擎,并且运行MapReduce任务

  • Hbase是一种在Hadoop之上的NoSQL 的Key/value数据库

  • 这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive

  • RDBMS是关系型数据库支持join、ACID、有schema(创建表的时候必须要指定有哪些列、列是什么类型)…、支持二级索引
  • HBase不支持join的、也不支持ACID、对事务支持有限,无schema(创建表的时候,无需去指定列、列类型)、原生就支持分布式存储的,所以可以用来存储海量数据,同时也兼顾了快速查询、写入的功能

对比Hive:

  • Hive主要用于OLAP,HBase主要用于OLTP,HBase是可以直接接入到业务系统的

4、HBase的安装

注意:

  • HBase依赖于:ZooKeeper、HDFS,在启动HBase之前必须要启动ZK、HDFS,否则HBase无法启动

上传解压HBase安装包

[root@hadoop102 software]# tar -xvzf hbase-1.3.1-bin.tar.gz  -C /opt/module/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

配置环境变量

vi /etc/profile
#Hbase
export PATH=$PATH:$HBASE_HOME/bin
export HBASE_HOME=/opt/module/hbase-1.3.1/

在这里插入图片描述

使环境变量生效,运行 source /etc/profile使/etc/profile文件生效

在这里插入图片描述

配置HBase

hadoop-env.sh

进入HBase配置文件目录

cd /opt/module/hbase-1.3.1/conf/

编辑 hadoop-env.sh 文件,找到 JAVA_HOME 改为 JDK 的安装目录

vi hbase-env.sh
export HBASE_HOME=/opt/module/hbase-1.3.1
export JAVA_HOME=/opt/module/jdk1.8.0_162
export HADOOP_HOME=/opt/module/hadoop-2.7.1
export HBASE_LOG_DIR=$HBASE_HOME/logs
export HBASE_PID_DIR=$HBASE_HOME/pids
export HBASE_MANAGES_ZK=false
  • export HBASE_PID DIR=/var/hadoop/pids

在这里插入图片描述

  • export HBASE_MANAGES_ZK=false

    • conf/hbase-env.sh 里面的HBASE MANAGES ZK 来切换,这个值默认是true ,作用是让HBase启动的同时也启动ZooKeeper。在安装的过程中,采用独立运行ZooKeeper 集群的方式,故将其属性值改为false 。
  • <3> export HBASE_CLASSPATH=/…/hadoop

  • HBASE_CLASSPATH 是Hadoop 的配置文件路径

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

hbase-site.xml
vi hbase-site.xml
<configuration>
        <!-- HBase数据在HDFS中的存放的路径 -->
        <!-- 设置HRegionServers共享目录,mycluster是我们在hadoop中设置的名字空间 -->
        <property>
            <name>hbase.rootdir</name>
            <value>hdfs://hadoop102/hbase</value>
        </property>!--设置HMaster的rpc端口-->
        <property>
			<name>hbase.master.port</name>       
			<value>16000</value>
		</property>
        <!--设置HMaster的http端口-->
        <property>
	    	<name>hbase.master.info.port</name>
	    	<value>16010</value>
	   	</property>
	   	<!--指定zookeeper集群端口-->
	    <property>
	   	   <name>hbase.zookeeper.property.clientPort</name>     #zookeeper端口号
		   <value>2181</value>
		</property>
		<!一指定zookeeper数据目录,需要与zookeeper集群中的dataDir配置相一致 -->
        <property>
			<name>hbase.zookeeper.property.dataDir</name>
			<value>/opt/module/apache-zookeeper-3.5.9-bin/zkdata</value>
        </property>
		
        <!-- Hbase的运行模式。false是单机模式,true是分布式模式。若为false,Hbase和Zookeeper会运行在同一个JVM里面 -->
        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>
        <!-- ZooKeeper的地址 -->
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>hadoop102,hadoop103,hadoop104</value>
        </property>
        <!-- 指定缓存文件存储的路径 -->
        <property>
	        <name>hbase.tmp.dir</name>
	        <value>/opt/module/hbase-1.3.1/tmp</value>
	    </property>
</configuration>
  • hbase.rootdir的配置
  • 8020是hdfs的默认端口,但是我们在配置hadoop集群时可能在core-site.xml中将hdfs的默认端口更改,这里我们原本在hadoop搭建时core-site.xml没有配置端口号,所以这里也没有端口号
  • hbase.zookeeper.property.dataDir
    • /opt/module/apache-zookeeper-3.5.9-bin/zkdata路径是之前zookeeper集群搭建时自己创建的文件夹,此为数据存储路径
  • 记得修改成自己的主机名

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRIIR7MN-1668136810617)(pictures/image-20221002224816510.png)]

配置regionservers文件

进入hbase 的conf目录下修改regionservers文件regionservers文件负责配置 HBase集群中哪台节点作 Region Server服务器,其配置内容为:

vi regionservers

hadoop102
hadoop103
hadoop104

分发配置

(1)将在hadoop102虚机配置好的hbase分发到hadoop103,hadoop104

scp -r /opt/module/hbase-1.3.1 root@hadoop103:/opt/module
scp -r /opt/module/hbase-1.3.1 root@hadoop104:/opt/module

在这里插入图片描述

(2)将在hadoop102虚机配置好的配置文件(/etc/profile)分发到hadoop103,hadoop104

scp -r /etc/profile root@hadoop103:/etc/
scp -r /etc/profile root@hadoop104:/etc/

在这里插入图片描述

(3)在hadoop103和hadoop104加载环境变量

source /etc/profile

在这里插入图片描述

在这里插入图片描述

(4)此时切记,我们在配置文件中有输入:

export HBASE_HOME=/opt/module/hbase-1.3.1
export HBASE_PID_DIR=/opt/module/hbase-1.3.1/pids

export HBASE_PID_DIR=/opt/module/hbase-1.3.1/pids在hadoop103和hadoop104上没有,需要创建,上面步骤有提到在/opt/module/hbase-1.3.1目录下面创建一个文件夹: mkdir -p /opt/module/hbase-1.3.1/pids,记得更改这个文件夹的权限,chown -R root:root /opt/module/hbase-1.3.1,将这个目录及子目录的拥有者改为你的当前用户,我这是root,不然执行start-all.sh的时候当前用户会没有权限创建pid文件

5、启动HBase

(1)启动zookeeper(在全部虚拟机上启动)

cd /opt/module/apache-zookeeper-3.5.9-bin/bin
./zkServer.sh  start

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)启动hadoop(在hadoop102上启动)

start-all.sh

在这里插入图片描述

(3)启动hbase(在hadoop102上启动)

start-hbase.sh

在这里插入图片描述

在这里插入图片描述

验证HBase是否配置成功

# 在网页输入
hadoop102:16010

在这里插入图片描述

发现没有成功,下面解决一下

cd /opt/module/hadoop-2.7.1/etc/hadoop
cat core-site.xml

在这里插入图片描述

cd /opt/module/hbase-1.3.1/conf
vi hbase-site.xml

在这里插入图片描述

两个端口号要一致

再次访问网页

成功进入,说明配置成功

在这里插入图片描述

6、启动hbase shell客户端

HBase的shell其实JRuby的IRB(交互式的Ruby),但在其中添加了一些HBase的命令。

启动HBase shell:

hbase shell
[root@hadoop102 conf]# start-hbase.sh
starting master, logging to /opt/module/hbase-1.3.1/logs/hbase-root-master-hadoop102.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
hadoop103: regionserver running as process 4075. Stop it first.
hadoop104: regionserver running as process 4081. Stop it first.
hadoop102: regionserver running as process 5131. Stop it first.
[root@hadoop102 conf]# cd
[root@hadoop102 ~]# hbase shell
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/module/hbase-1.3.1/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/module/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.3.1, r930b9a55528fe45d8edce7af42fef2d35e77677a, Thu Apr  6 19:36:54 PDT 2017

hbase(main):001:0>

输入status

hbase(main):001:0> status

ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
	at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)
	at org.apache.hadoop.hbase.master.MasterRpcServices.getClusterStatus(MasterRpcServices.java:792)
	at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:58519)
	at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)
	at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)
	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188)
	at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:168)

Here is some help for this command:
Show cluster status. Can be 'summary', 'simple', 'detailed', or 'replication'. The
default is 'summary'. Examples:

  hbase> status
  hbase> status 'simple'
  hbase> status 'summary'
  hbase> status 'detailed'
  hbase> status 'replication'
  hbase> status 'replication', 'source'
  hbase> status 'replication', 'sink'


hbase(main):002:0> 

创建表

在这里插入图片描述

语法:

create ‘表名’,‘列蔟名’…

HBase是没有schema的,就是在创建表的时候不需要指定表中有哪些列,只需要指定有多少个列蔟

create "表名","列蔟1", "列蔟2"

总结

以上就是今天要讲的内容,本文仅仅简单介绍大数据Hadoop集群之HBase搭建步骤,按照以上步骤和老师讲解相结合相信你也可以成功安装。

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值