前言
Kylin目前不仅仅支持Hive作为数据源构建cube,也可以支持使用外部jdbc作为数据源进行构建,比如使用MySQL数据源的时候会让我们下载sqoop安装包,本质上是使用sqoop全量同步我们要构建的MySQL数据,先加载到hive的临时表中,构建完成之后然后再清理。对于需要增量数据同步并进行构建的情况不太友好
提示:以下是本篇文章正文内容,下面案例可供参考
一、环境安装部署
为了简化安装的环节,可以直接借用官方提供的docker化部署方案进行验证即可。
docker pull apachekylin/apache-kylin-standalone:3.1.0
docker run -d --log-opt max-size=10m --log-opt max-file=1 \
-m 8G \
-p 7070:7070 \
-p 8088:8088 \
-p 16010:16010 \
-p 50070:50070 \
-p 8032:8032 \
-p 8042:8042 \
-p 3306:3306 \
-p 8998:8998 \
-p 19888:19888 \
apachekylin/apache-kylin-standalone:3.1.0
[root@node01 ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e0dba21780a apachekylin/apache-kylin-standalone:3.1.0 "/home/admin/entrypo…" 17 hours ago Up 17 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 0.0.0.0:7070->7070/tcp, :::7070->7070/tcp, 0.0.0.0:8032->8032/tcp, :::8032->8032/tcp, 0.0.0.0:8042->8042/tcp, :::8042->8042/tcp, 0.0.0.0:8088->8088/tcp, :::8088->8088/tcp, 0.0.0.0:8998->8998/tcp, :::8998->8998/tcp, 0.0.0.0:9999->9999/tcp, :::9999->9999/tcp, 0.0.0.0:16010->16010/tcp, :::16010->16010/tcp, 0.0.0.0:19888->19888/tcp, :::19888->19888/tcp, 0.0.0.0:50070->50070/tcp, :::50070->50070/tcp distracted_bartik
docker exec -it 2e0dba21780a bash
访问kylin web页面:http://node01:7070/kylin/models (注意配置hosts映射)
二、MySQL JDBC数据源测试
1. 环境配置
1、配置MySQL数据源
kylin.source.default=8
kylin.source.jdbc.connection-url=jdbc:mysql://localhost:3306/ods
kylin.source.jdbc.driver=com.mysql.jdbc.Driver
kylin.source.jdbc.dialect=mysql
kylin.source.jdbc.user=root
kylin.source.jdbc.pass=123456
kylin.source.jdbc.sqoop-home=/home/admin/sqoop
kylin.source.jdbc.filed-delimiter=|
kylin.source.jdbc.sqoop-mapper-num=1
2、部署安装sqoop
cd /home/admin
wget http://archive.apache.org/dist/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz .
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar .
设置软连接 ln -s sqoop-xxx-xx sqoop
分别将MySQL包放在kylin/ext目录下,sqoop/lib目录下即可。
3、MySQL新建库表
CREATE TABLE sc(
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`SNO` varchar(10) NOT NULL,
`CNO` varchar(10) NOT NULL,
`SCORE` float(4,2) NOT NULL,
PRIMARY KEY (`ID`)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE sc_1(
ID bigint(20) NOT NULL AUTO_INCREMENT,
SNO varchar(10) NOT NULL,
CNO varchar(10) NOT NULL,
SCORE float(4,2) NOT NULL,
PRIMARY KEY (ID)
)ENGINE=InnoDB DEFAULT CHARSET=latin1;
insert into sc_1 (SNO,CNO,SCORE) values ('s001','c001',78.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s002','c001',80.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s003','c001',81.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s004','c001',60.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s001','c002',82.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s002','c002',72.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s003','c002',81.9);
insert into sc_1 (SNO,CNO,SCORE) values ('s001','c003','59');
2. 测试
1、重新加载配置,可以不用重启服务
vi conf/kylin.properties
kylin.source.default=8
kylin.source.jdbc.connection-url=jdbc:mysql://localhost:3306/ods
kylin.source.jdbc.driver=com.mysql.jdbc.Driver
kylin.source.jdbc.dialect=mysql
kylin.source.jdbc.user=root
kylin.source.jdbc.pass=123456
kylin.source.jdbc.sqoop-home=/home/admin/sqoop
kylin.source.jdbc.filed-delimiter=|
kylin.source.jdbc.sqoop-mapper-num=1
2、测试构建以sc_1表为原表的cube 是ok的
Sqoop数据同步命令如下:
exe cmd:/home/admin/sqoop/bin/sqoop import \
-Dorg.apache.sqoop.splitter.allow_text_splitter=true \
-Dmapreduce.job.queuename=default \
--connect "jdbc:mysql://localhost:3306/ods" \
--driver com.mysql.jdbc.Driver --username root --password "123456" \
--query "SELECT sc_1.ID as SC_1_ID ,sc_1.SNO as SC_1_SNO FROM ods.sc_1 sc_1 WHERE 1=1 AND \$CONDITIONS" \
--target-dir hdfs://localhost:9000/kylin/kylin_metadata/kylin-54398b6b-de6b-dfa5-0649-ff7a758548c6/kylin_intermediate_sc_1_cube_8a15d8b2_3c43_e74b_3f47_20996214d9d2 \
--split-by ID --boundary-query "SELECT min(ID), max(ID) FROM ods.sc_1 " \
--null-string '\\N' --null-non-string '\\N' --fields-terminated-by '|' \
--num-mappers 1
结果:
但是对应sc表,却在页面端无法点击报406的错误,如下:
HTTP Status 406 – 不可接收
Type Status Report
描述 根据请求中接收到的主动协商头字段,目标资源没有用户代理可以接受的当前表示,而且服务器不愿意提供缺省表示。
我这里提了一个issue,详情参见 https://issues.apache.org/jira/browse/KYLIN-5039
总结
ods.sc表无法进行构建,页面端的Action按钮也无法点击弹出对话框,我甚至基于此进行debug但是很遗憾它根本没有进入断点,有知道的小伙伴还请不吝赐教。这个问题我会持续关注,后面探索下使用sqoop做增量更新添加where条件过滤的问题。
注意:
1、sqoop抽取到hive表是临时的,每次构建都要去抽取全量的数据,这增大了数据库的压力,网络开销,甚至拖慢了cube整体构建速度。
除非通过定制其源码改成可支持的增量更新方式才会更好用,如不然只能自己定义定时同步任务到hive表进行构建了,使用sqoop的话多少还是有些不太方便的地方。
Tips:
新建模型之前一定要去数据源处加载自己想要的表,然后Sync一下即可,对于JDBC的可以不勾选Calculate column cardinality选项。
参考
http://kylin.apache.org/cn/docs/install/kylin_docker.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)