mysql和hbase整合_Hive HBase 整合

本文详细介绍了如何将Hive与HBase整合,包括Hive整合HBase的原理、Hive的安装步骤、存储引擎改为MySQL的过程,以及如何创建Hive外部表关联HBase表。在实践中,遇到的错误和解决方法也一并进行了说明。
摘要由CSDN通过智能技术生成

环境说明:

lhadoop:2.4.0

lZookeeper:3.4.6

lHbase:0.96

lHive:0.13.1

1.Hive整合HBase原理

Hive与HBase整合的实现是利用两者本身对外的API接口互相进行通信,相互通信主要是依靠Hive安装包\apache-hive-0.13.1-bin\lib\hive-hbase-handler-0.9.0.jar工具类,它负责Hbase和Hive进行通信的。

Hive和HBase通信原理如下图:

3c4e61ec2afe323303dc52e78a02b5ae.png

2.Hive的安装

Step01:上传apache-hive-0.13.1-bin到Linux目录下

说明:

使用远程ftp工具上传到Linux下的/long/home/software目录下

Step02:解压到安装目录下:

cd /home/long/software

#切换到root用户:

su

password

#创建目录

mkdir -p /usr/share/hive

#解压到安装目录

tar -zxvf apache-hive-0.13.1-bin.tar.gz -C /usr/share/hive

#更改用户

chown -R long:long /usr/share/hive

#切换回来

su long

cd /usr/share/hive

ll

Step03:配置环境变量

su do vi /etc/profile

编辑如下:

72c43f6d53e48e2921f947b01ae79b65.png

#使之生效

source /etc/profile

Step04:拷贝jar包

#删除$HIVA_HOME/lib目录下的的Zookeeper的jar包

rm -rf $HIVE_HOME/lib/zookeeper*

#拷贝生产环境下的Zookeeper的jar包到$HIVA_HOME/lib目录下

cp $ZOOKEEPER_HOME/zookeeper-3.4.6.jar $HIVA_HOME/lib

Step05:修改$HIVE_HOME/conf/hive-site.xml

cd $HIVE_HOME/conf

#复制一份出来

cp hive-default.xml.template hive-site.xml

#修改hive-site.xml

vi hive-site.mxl

由于文件内容比较多,需要进行查找,查找方式很简单,在命令行模式下输入‘/’后面跟上需要查找的文本即可找到,如:/ hive.querylog.location

hive.querylog.location

/usr/share/hive/logs

记得创建logs目录:

mkdir $HIVE_HOME/logs

#修改hive.zookeeper.quorum的值:

hive.zookeeper.quorum

long001,long002,long003,long004,long005,long006,long007

Step06:在目录$HIVE_HOME/bin目录下面,修改文件hive-config.sh

#在最后面增加以下内容:

export JAVA_HOME=/usr/lib/jvm/java7

export HIVE_HOME=/usr/share/hive

export HADOOP_HOME=/usr/share/hadoop/static

Step07:修改$HADOOP_HOME/conf/hadoop-env.sh

#增加HADOOP_CLASSPATH

export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin

#记得修改完成以后,要将修改后的文件同步拷贝到其他的节点。

注:如果hadoop-env.sh中没有增加HADOOP_CLASSPATH的话会报下面的错误:

java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/CommandNeedRetryException

Step07:验证

#在命令行中输入hive

14/10/29 11:18:16 WARN conf.HiveConf: DEPRECATED: hive.metastore.ds.retry.* no longer has any effect.Use hive.hmshandler.retry.* instead

Logging initialized using configuration in jar:file:/usr/share/hive/lib/hive-common-0.13.1.jar!/hive-log4j.properties

#查看当前数据库

hive> show databases;

OK

default

Time taken: 0.03 seconds, Fetched: 1 row(s)

Step08:创建表

hive> use default;

hive> create table student(id string, name string);

创建好表以后,会在hdfs文件系统上产生一个/user/hive/warehouse/student的目录,至此,Hive就安装好了。

3.修改存储引擎为MySQL

为什么要修改存储引擎?

1. metastore是hive元数据的集中存放地。metastore默认使用内嵌的derby数据库作为存储引擎。

2. Derby引擎的缺点:一次只能打开一个会话

3.使用Mysql作为外置存储引擎,多用户同时访问

Step01:安装MySQL

我采用在线安装的方式,机器为Ubuntu。

#安装server

sudo apt-get install mysql-server

中间会提示输入root用户密码

#安装client

sudo apt-get install mysql-client

Step02:启动MySQL服务

mysqld_safe &

Step03:登录数据库

mysql –root –p1234

Step04:设置数据库日志格式

set global binlog_format='MIXED';

#创建数据库

create database hive;

#为long用户授权,可以对hive数据库下的所有内容执行任意操作,在任意位置,root验证密码是admin

mysql> GRANT all ON hive.* TO long@'%' IDENTIFIED BY 'admin';

mysql> flush privileges;--刷新权限表

Step04:上传mysql-connector-java-5.1.20-bin.jar到$HIVE_HOME/lib目录下

Step05:修改hive的数据库配置信息,修改hive-site.xml文件,修改如下:

hive.metastore.warehouse.dir

/hive

location of default database for the warehouse

4.启动Hive

#以集群的方式启动

hive --auxpath /usr/share/hive/lib/hive-hbase-handler-0.9.0.jar,/usr/share/hive/lib/zookeeper-3.4.6.jar -hiveconf hbase.master=longV007:60000

5.创建Hive外部表关联HBase表

说明:现在已存在一张HBase表’bidask_quote’,现在要创建一张hive的外部表,关联到hbase的表,语句如下:

hive> CREATE EXTERNAL TABLE bidask_quote_hive(key string,ProdCode string,ProdName string,TradingDay string,ExchangeID string,ExchangeInstID string,LastPrice string,PreSettlementPrice string,PreClosePrice string)

STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:ProdCode,info:ProdName,info:TradingDay,info:ExchangeID,info:ExchangeInstID,info:LastPrice,info:PreSettlementPrice,info:PreClosePrice ")

TBLPROPERTIES("hbase.table.name" = "bidask_quote");

说明:

* bidask_quote_hive是hive的biao

* "hbase.table.name" = "bidask_quote"是hbase中已经存在的表

* bidask_quote_hive(key string,ProdCode string,string,ProdName string,....)是hive表的结构

* "hbase.columns.mapping" = "info:ProdCode,info:ProdName,info:TradingDay,...)是HBase中的列信息,这里现在只有一个列蔟。

现在来看一下是否创建成功:

hive> show tables;

如果存在我们创建的bidask_quote_hive表,就查询几条数据试试吧

hive> select * from bidask_quote_hive limit 3;

后续还有关于Hive API的操作。

遇到的错误

错误1:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/ql/CommandNeedRetryException

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:270)

at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException

at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

... 3 more

解决办法:

/usr/share/hadoop/etc/hadoop/hadoop-env.sh里面被增加了HADOOP_CLASSPATH.

设置如下:

export HADOOP_CLASSPATH=$HBASE_HOME/hbase/hbase-0.20.3.jar:$HABSE_HOME/hbase-config:$ZOOKEEPER/zookeeper-3.2.2.jar

将其修改为:

export HADOOP_CLASSPATH=.:$CLASSPATH:$HADOOP_CLASSPATH:$HADOOP_HOME/bin

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值