Hive载数之StorageHandler

最近项目在做离线载数,是从RDBMS载数到Hive,Impala,Kudu和HBase,这里整理一下过程,给自己留个可以看的东西

1 架构

StorageHandler官网https://cwiki.apache.org/confluence/display/Hive/StorageHandlers

我们整体的载数流程大概是这个样子

整个流程分为quick模式stable模式

quick模式:数据从RDBMS直接到目标,中间不进行存储

stable模式:数据从RDBMS到目标时,中间都先走一层Hive存储。

一般quick模式是用来做性能测试生产一般都使用stable模式,确保数据链路可追踪

2 流程介绍

2.1 quick模式

2.1.1 RDBMS-> Hive

RDBMS的数据通过JDBC StorageHandler直接存储到Hive

2.1.2 RDBMS-> Impala

RDBMS的数据通过JDBC StorageHandler存储到Hive后,刷新Impala元数据

2.1.3 RDBMS-> Kudu

RDBMS的数据通过JDBC StorageHandler和Kudu StorageHandler两个外联表,前者连接Hive,后者连接Kudu,然后把前者的数据插入后者。

2.1.478 RDBMS-> HBase

RDBMS的数据通过JDBC StorageHandlerHBase StorageHandler两个外联表,前者连接Hive,后者连接HBase,然后把前者的数据插入后者。

2.2 stable模式

2.2.1 RDBMS-> Hive

RDBMS的数据通过JDBC StorageHandler直接存储到Hive

2.2.2 RDBMS-> Impala

RDBMS的数据通过JDBC StorageHandler存储到Hive后,刷新Impala元数据

2.2.3 RDBMS-> Kudu

RDBMS的数据通过JDBC StorageHandler存储到Hive后,刷新Impala元数据,再通过Impala插入数据到Kudu。

2.2.4 RDBMS-> HBase

RDBMS的数据通过JDBC StorageHandler存储到Hive后,通过HBase StorageHandler将Hive的数据插入到HBase。

3 StorageHandler安装

3.1 jar包下载

我们去maven仓库搜索Hive JDBC HandlerHive kudu HandlerHive HBase Handler,然后把jar包下载下来。

将jar包放在hive集群中,这里有两种方式,推荐第一种

3.2 jar包导入

3.2.1 方式一(推荐)

将jar拷贝到Hive集群配置的【Hive 辅助 JAR 目录】,英文叫【Hive Auxiliary JARs Directory】。

这样Hive启动的时候就会把这个目录下的jar包加载进来。

3.2.2 方式二(不推荐):

拷贝到下面目录。

CDH是把集群所有jar包放在这里,然后用到得地方做软连接,我们也仿照他。

1
2
cd /opt/cloudera/parcels/CDH/jars
拷贝进去

到下面目录做软连接

1
2
3
cd /opt/cloudera/parcels/CDH/lib/hive/lib
ln -s ../../../jars/hex-hive-jdbc-handler.jar hex-hive-jdbc-handler.jar
...其他StorageHandler,比如Kudu和HBase

3.3 其他包导入

1 需要导入RDBMS的数据库驱动包比如mysql需要导入

比如RDBMSmysql的话,导入mysql-connector-java-x.y.z.jar

RDBMSOracle的话,导入ojdbc8-x.y.z.jar

2 kudu-StorageHandler的还得导入kudu-client-x.y.z.jar

我目前这个版本需要导入下面几个包,后续版本可能就慢慢融合进去了,不用导这么多

贴个链接,以后用到就不用到处找了

链接:https://pan.baidu.com/s/1sE-J4J8VRl_dYCGw-5CmUQ 提取码:6666

3.4 重启Hive组件

重启一下Hive,这个StorageHandler就生效了。

随便写个demo测试一下,在Hive中执行下面命令,这个命令用的是公司内部定制的JDBC StorageHandler,大家用的话参考官网那个写法就可以

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE EXTERNAL TABLE hive_db.mysql_to_hive_jdbc_storage_handler_tb
(
app_code string,
username string
)
STORED BY "com.hex.hive.jdbc.JdbcStorageHandler"
TBLPROPERTIES
(
"mapred.jdbc.driver.class" = "com.mysql.jdbc.Driver",
"mapred.jdbc.url" = "jdbc:mysql://ip:port",
"mapred.jdbc.username" = "root",
"mapred.jdbc.password" = "root",
"mapred.jdbc.input.table.name" = "app_user",
"mapred.jdbc.output.table.name" = "app_user",
"mapred.jdbc.hive.lazy.split" = "false"
);

还有示例在上面3.3那个网盘链接里,可以照着操作操作,把里面数据库相关地址换成自己的

4 躺板板

红伞伞白杆杆,吃完一起躺板板

躺板板埋山山,亲朋都来吃饭饭

饭饭里有红伞伞,吃完全村埋山山,来年长满红伞伞

联系博主,加入【羊山丨交流社区】

联系博主


本博客所有文章除特别声明外,均为原创。版权归博主小马所有。任何团体、机构、媒体、网站、公众号及个人不得转载。如需转载,请联系博主(关于页面)。如其他团体、机构、媒体、网站、博客或个人未经博主允许擅自转载使用,请自负版权等法律责任!