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
#HbaseexportPATH=$PATH:$HBASE_HOME/bin
exportHBASE_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
exportHBASE_HOME=/opt/module/hbase-1.3.1
exportJAVA_HOME=/opt/module/jdk1.8.0_162
exportHADOOP_HOME=/opt/module/hadoop-2.7.1
exportHBASE_LOG_DIR=$HBASE_HOME/logs
exportHBASE_PID_DIR=$HBASE_HOME/pids
exportHBASE_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)此时切记,我们在配置文件中有输入:
exportHBASE_HOME=/opt/module/hbase-1.3.1
exportHBASE_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 in8.0
Java HotSpot(TM)64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in8.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 619: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 helpfor 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搭建步骤,按照以上步骤和老师讲解相结合相信你也可以成功安装。
版权归原作者 派大星子fff 所有, 如有侵权,请联系我们删除。