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集群搭建时自己创建的文件夹,此为数据存储路径
- 记得修改成自己的主机名
配置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的,就是在创建表的时候不需要指定表中有哪些列,只需要指定有多少个列蔟文章来源:https://www.toymoban.com/news/detail-412626.html
create "表名","列蔟1", "列蔟2"
总结
以上就是今天要讲的内容,本文仅仅简单介绍大数据Hadoop集群之HBase搭建步骤,按照以上步骤和老师讲解相结合相信你也可以成功安装。文章来源地址https://www.toymoban.com/news/detail-412626.html
到了这里,关于大数据Hadoop集群之超级详细的HBase搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!