HBase和Hive的对比说明
HIVE: 是一个数据仓库的工具, 主要是用于对HDFS上数据进行映射, 采用SQL的方式操作数据, HIVE主要适用于离线数据统计分析操作, 延迟性比较高, SQL最终会翻译为MR
HBase: 是一个nosql型数据库, 主要是用于存储数据, 不支持SQL, 也不支持join操作, 延迟性比较低, 交互性比较强
HBase和HIVE在实际生产环境中, 也是可以同时使用的, 我们可以基于HIVE加载HBase中数据, 从而实现离线数据分析工作, 同时还可以使用HBase做实时查询数据操作, HBase后续也可以和Phoenix集成, 可以通过SQL方式查询HBase中的数据, 从而实现实时数据检索(即席查询)
HBase如何集成Hive
集成步骤:
1- 拷贝HIVE提供的一个专门用于集成HBase的通信jar包, 将此jar包拷贝到HBase的lib目录下
hive安装在node1节点上: 在node1执行操作 cd /export/server/hive/lib/ cp hive-hbase-handler-3.1.2.jar /export/server/hbase/lib/ 拷贝后, 将此jar包, 分发给node2和node3的hbase的lib目录 cd /export/server/hbase/lib/ scp hive-hbase-handler-3.1.2.jar node2:$PWD scp hive-hbase-handler-3.1.2.jar node3:$PWD2- 修改HIVE的配置文件: hive-site.xml
cd /export/server/hive/conf
vim hive-site.xml输入i , 进入插入模式:
添加以下内容:
<property>
<name>hive.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property><property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property><property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
</property>3- 修改hive的配置文件: hive-env.sh
cd /export/server/hive/conf
vim hive-env.sh
输入i , 进入插入模式:
添加以下内容:
export HBASE_HOME=/export/server/hbase-2.1.04- 启动相关的软件
先zookeeper 然后启动 hadoop集群 接着启动 HIVE 和 HBase
注意: 每启动完一个软件, 一定要确保是启动ok的
启动zookeeper: 三个节点都要启动
cd /export/server/zookeeper/bin
./zkServer.sh start查看是否启动成功:
jps / ./zkServer.sh status启动 hadoop: node1执行即可
start-all.sh校验: 查看进程是否全部都正常启动 以及通过 web ui查看是否启动良好
启动HBase: node1执行即可
start-hbase.sh校验: 查看进程是否全部都正常启动 以及通过 web ui查看是否启动良好
启动hive: node1执行
cd /export/server/hive/bin
nohup ./hive --service metastore &
nohup ./hive --service hiveserver2 &校验:
jps 以及 通过 ./beeline连接测试
集成操作:
1-在hbase中创建一张表, 并且向表添加一些数据 (准备工作)
create 'hbase_hive_score', 'cf'
put 'hbase_hive_score','rk001','cf:name','张三'
put 'hbase_hive_score','rk001','cf:age',20
put 'hbase_hive_score','rk001','cf:address','北京'
put 'hbase_hive_score','rk001','cf:score',92put 'hbase_hive_score','rk002','cf:name','李四'
put 'hbase_hive_score','rk002','cf:age',28
put 'hbase_hive_score','rk002','cf:address','上海'
put 'hbase_hive_score','rk002','cf:score',89put 'hbase_hive_score','rk003','cf:name','王五'
put 'hbase_hive_score','rk003','cf:age',26
put 'hbase_hive_score','rk003','cf:address','广州'
put 'hbase_hive_score','rk003','cf:score',94put 'hbase_hive_score','rk004','cf:name','赵六'
put 'hbase_hive_score','rk004','cf:age',23
put 'hbase_hive_score','rk004','cf:address','深圳'
put 'hbase_hive_score','rk004','cf:score',96
2- 在hive集成hbase的对应表
集成的格式:
create external table 库名.表名(
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
....
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties('hbase.columns.mapping'=':key,列族:列名,列族:列名...') tblproperties('hbase.table.name'='表名')注意事项:
1) 表名: 建议与HBase表名保持一致(可以不一致)
2) 定义字段的时候, 第一个字段为主键字段, 但是不能添加primary key, 其余字段与hbase中列名建议保持一致(可以不一致)
3) 在mapping中设置映射关系 :
:key 表示rowkey , 剩余其他列, 正常设置即可
mapping中设置顺序与表中字段的顺序 和 数量都要保持一致, 因为是按序映射的
4) hbase表名: 设置对应在hbase的哪个表
实操:
create database day08_hbase_hive;create external table day08_hbase_hive.hbase_hive_score(
id string,
name string,
age int,
address string,
score int
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties('hbase.columns.mapping'=':key,cf:name,cf:age,cf:address,cf:score') tblproperties('hbase.table.name'='hbase_hive_score');