使用Kylin导入JDBC数据源遇到的问题

一、目标:
直接使用Mysql数据作为Kylin数据源
二、参考官方配置 JDBC 数据源
准备 Sqoop
Kylin 使用 Apache Sqoop 从关系型数据库加载数据到 HDFS。在与 Kylin 同一个机器上下载并安装最新版本的 Sqoop。我们使用 SQOOP_HOME 环境变量指出在本指南中 Sqoop 的安装路径。
准备 JDBC driver
需要下载您数据库的 JDBC Driver 到 Kylin server。JDBC driver jar 需要被加到 KYLINHOME/extKYLINHOME/ext和SQOOP_HOME/lib 文件夹下。
配置 Kylin
在 $KYLIN_HOME/conf/kylin.properties 中,添加以下配置。
MySQL 样例:

kylin.source.default=8
kylin.source.jdbc.connection-url=jdbc:mysql://hostname:3306/employees
kylin.source.jdbc.driver=com.mysql.jdbc.Driver
kylin.source.jdbc.dialect=mysql
kylin.source.jdbc.user=your_username
kylin.source.jdbc.pass=your_password
kylin.source.jdbc.sqoop-home=/usr/hdp/current/sqoop-client/bin
kylin.source.jdbc.filed-delimiter=|

三、遇到的问题:

exe cmd:/usr/hdp/2.5.5.0-157/sqoop/bin/sqoop import -Dorg.apache.sqoop.splitter.allow_text_splitter=true  -Dmapreduce.job.queuename=default --connect "jdbc:mysql://X.X.X.X:3306/XXX" --driver com.mysql.jdbc.Driver --username XXXXX --password XXXXX --query "SELECT SLICES.CHANGED_ON as SLICES_CHANGED_ON ,SLICES.ID as SLICES_ID ,SLICES.SLICE_NAME as SLICES_SLICE_NAME ,SLICES.DATASOURCE_TYPE as SLICES_DATASOURCE_TYPE ,SLICES.DATASOURCE_NAME as SLICES_DATASOURCE_NAME ,SLICES.VIZ_TYPE as SLICES_VIZ_TYPE ,SLICES.DESCRIPTION as SLICES_DESCRIPTION FROM SUPERSET.SLICES as SLICES  WHERE 1=1 AND \$CONDITIONS" --target-dir hdfs://master1.bigdata:8020/kylin/kylin_metadata_2.3/kylin-908401b6-a8aa-4879-a70d-fdefeefd833d/kylin_intermediate_superset_slice_1f3498b3_ed6f_47b2_bcaa_7fd449d93306 --split-by SLICES.SLICES.ID --boundary-query "SELECT min(SLICES.ID), max(SLICES.ID) FROM "SUPERSET".SLICES as SLICES" --null-string '' --fields-terminated-by '|' --num-mappers 1
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/hdp/2.5.5.0-157/hadoop/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/insight/vdc1/software/apache-kylin-2.4.0-bin-hbase1x/spark/jars/slf4j-log4j12-1.7.16.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]
18/08/14 16:19:55 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6.2.5.3.0-37
18/08/14 16:19:55 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
18/08/14 16:19:55 WARN tool.BaseSqoopTool: Parameter --driver is set to an explicit driver however appropriate connection manager is not being set (via --connection-manager). Sqoop is going to fall back to org.apache.sqoop.manager.GenericJdbcManager. Please specify explicitly which connection manager should be used next time.
18/08/14 16:19:55 ERROR tool.BaseSqoopTool: Got error creating database manager: You must specify --connection-manager when you specified --driver.at org.apache.sqoop.tool.BaseSqoopTool.init(BaseSqoopTool.java:278)at org.apache.sqoop.tool.ImportTool.init(ImportTool.java:89)at org.apache.sqoop.tool.ImportTool.run(ImportTool.java:610)at org.apache.sqoop.Sqoop.run(Sqoop.java:147)at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)at org.apache.sqoop.Sqoop.runTool(Sqoop.java:225)at org.apache.sqoop.Sqoop.runTool(Sqoop.java:234)at org.apache.sqoop.Sqoop.main(Sqoop.java:243)

四、异常分析:
从报错上看,就是如果指定 –driver必须指定 –connection-manager,然后再Kylin.properties配置文件里,添加了 connection-manager=org.apache.sqoop.manager.MySQLManager,依然保持,并且执行的sql语句里并没有读取到参数connection-manager,于是在cube的configuration overwrites页面添加connection manager参数,继续build,同样的异常,没有读取到参数。
接下来注释掉 –driver参数,执行build,仍然报错,执行的sql里 仍然传了 –driver参数,只不过是null。
于是换了另一种思路,不通过Kylin配置sqoop参数,直接执行sqoop import语句,两种方式都可以成功:1)同时传–driver=com.mysql.jdbc.Driver –connection-manager=–connection-manager org.apache.sqoop.manager.MySQLManager
2)两个参数都不传。

五:解决
有了上面的尝试,有了方向,可能跟sqoop的版本有关系,Kylin-2.4 source-jdbc部分并没有适配sqoop的版本,使用的最新版本。为了确认自己的推断,做了两件事:
1、查看Kylin的source-jdbc部分的源码
JdbcExplorer.java

package org.apache.kylin.source.jdbc;import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;import org.apache.commons.lang3.StringUtils;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.util.DBUtils;
import org.apache.kylin.common.util.Pair;
import org.apache.kylin.metadata.datatype.DataType;
import org.apache.kylin.metadata.model.ColumnDesc;
import org.apache.kylin.metadata.model.ISourceAware;
import org.apache.kylin.metadata.model.TableDesc;
import org.apache.kylin.metadata.model.TableExtDesc;
import org.apache.kylin.source.ISampleDataDeployer;
import org.apache.kylin.source.ISourceMetadataExplorer;
import org.apache.kylin.source.hive.DBConnConf;
import org.apache.kylin.source.jdbc.metadata.IJdbcMetadata;
import org.apache.kylin.source.jdbc.metadata.JdbcMetadataFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class JdbcExplorer implements ISourceMetadataExplorer, ISampleDataDeployer {private static final Logger logger = LoggerFactory.getLogger(JdbcExplorer.class);private final KylinConfig config;private final String dialect;private final DBConnConf dbconf;private final IJdbcMetadata jdbcMetadataDialect;public JdbcExplorer() {config = KylinConfig.getInstanceFromEnv();String connectionUrl = config.getJdbcSourceConnectionUrl();String driverClass = config.getJdbcSourceDriver();String jdbcUser = config.getJdbcSourceUser();String jdbcPass = config.getJdbcSourcePass();this.dbconf = new DBConnConf(driverClass, connectionUrl, jdbcUser, jdbcPass);this.dialect = config.getJdbcSourceDialect();this.jdbcMetadataDialect = JdbcMetadataFactory.getJdbcMetadata(dialect, dbconf);}

并没有参数connection-manager,并且–driver必传

2、下载最新版sqoop-1.4.7,重新配置SQOOP_HOME
重启Kylin,重新执行cube的build操作,成功执行。

六、总结:
生产环境的Sqoop是1.4.6,由于是内网并且多租户使用,组件的及时更新很不现实,这次的问题,没有在google找到一点问题的解决方案,不知道是大家没有使用关系型数据库,还是sqoop的版本都是最新的,费了好些周折,把问题分享出来,希望对同在坑中的同志提供些帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 通过array_merge()和array+array合并数组的区别和效率比较

众所周知合并两个数组可以使用array_merge(),这是php提供的一个函数。另外还可以通过 array 的方式来合并数组,这两种直接有什么区别,哪一个的效率更高呢? array_merge() 格式: array array_merge ( array … ] ) 注意…

解决ubuntu系统root用户下Chrome无法启动问题

说明:本文转载自-https://www.cnblogs.com/hbsygfz/p/8409517.html 由于ubuntu16.04系统自带的是Firefox浏览器,需要安装Chrome浏览器,但是在root用户下安装后发现,Chrome无法正常启动。安装及问题解决具体如下: 1. …

mysql ERROR 1045 和2058时(28000): 错误解决办法

mysql ERROR 1045 (28000): 错误解决办法 听语音|浏览:54286|更新:2018-02-23 14:34|标签:mysql 1234567分步阅读ERROR 1045 (28000): Access denied for user ODBClocalhost (using password: NO) ERROR 1045 (28000): Access denied for us…

Hive设置参数-指定引擎-队列

文章转载:https://www.cnblogs.com/huangmr0811/p/5571001.html Hive提供三种可以改变环境变量的方法,分别是:(1)、修改${HIVE_HOME}/conf/hive-site.xml配置文件;(2)、命令行参数&…

php实现 字符串加密(分类分布分工,化不可能为可能)

php实现 字符串加密(分类分布分工,化不可能为可能) 一、总结 一句话总结:谋而后动,加先伪代码,在带函数逻辑,在函数的方式可以极大的避免错误和降低难度。不然这个题目乎出现各种乱七八糟的错误…

Redis集群安装

注:官方给出的安装文档是在一台物理机安装多个Redis实例,https://redis.io/topics/cluster-tutorial,我的生产环境是多台物理机,安装起来就更简单 环境: 6台物理机 CentOS7.2-1511-minimal ip:192.168.1.101-192.168.1.106 网…

Redis-集群监控之Redis monitor

连续两天配置Redis 集群监控,尝试过三种开源软件,Redis-live,Redis-state,Redis-monitor ,由于内网生产环境,每一个软件的部署都费了老劲。 简单说一下,避免再有人趟坑。 1、Redis-live:此项目5年没有维护…

Magento 架构原则

Magento架构原则 》OOP体系结构和编程原则OOP体系结构和编程原则面向对象编程(OOP)设计允许软件组件具有最大的灵活性和可扩展性,允许您设计和实现高度定制的网站。面向对象原则的优点包括结合行业标准的编程设计模式以及业务逻辑与表示的严格…

vue-cli脚手架中webpack配置基础文件详解

一、前言 vue-cli是构建vue单页应用的脚手架,输入一串指定的命令行从而自动生成vue.jswepack的项目模板。这其中webpack发挥了很大的作用,它使得我们的代码模块化,引入一些插件帮我们完善功能可以将文件打包压缩,图片转base64等。…

openssl解析国密X509证书

openssl解析国密X509证书&#xff0c;把公钥拿出来重写一下就行了 x strToX509(pbCert, pulCertLen);dwRet getCertPubKey(x, &pRSAPubKeyBlob, &pECCPubKeyBlob);ECCPUBLICKEYBLOB pec { 0 };//目标公钥pec.BitLen 256;int i 0;for (i 0; i < 64; i)…

如果Python对于磁盘没有写入权限,还会运行吗?

Python如果对于磁盘没有写入权限&#xff0c;那么编译成功的字节码文件就只会存储在内存当中&#xff0c;而不会写入到磁盘&#xff0c;每次运行Python都会重新编译&#xff0c;然后运行。 转载于:https://www.cnblogs.com/chaoguo1234/p/9247642.html

maven POM总结

可继承的字段 version property 其他占坑&#xff1a; parent import scope Dependency_Management中的scope是可以被继承的&#xff0c;http://maven.apache.org/pom.html#Dependency_Management name 不可继承 artifactId 不可继承 &#xff0c; 确定打包的最终名称。 这个…

WIN10系统电脑注册表无法删除所有指定的值如何解决的方法

WIN10系统计算机注册表一直删除失败所有指定的值怎么样操作成功的步骤 1、在开始菜单点击右击&#xff0c;找到并点击【命令提示符&#xff08;管理员&#xff09;】&#xff0c;若自动跳出操作系统的人账户控制找到并点击【是】就没有问题了&#xff1b; 2、在命令提示符中填…

windows10系统的电脑如何设置密码?

电脑是21世纪不可缺少的重要工具&#xff0c;因为电脑&#xff0c;我们的生活发生了翻天覆地的变化&#xff0c;很难想象&#xff0c;如果离开电脑&#xff0c;这个世界会变成什么样子。今天&#xff0c;我就给大家介绍一下电脑如何设置密码 1、点击桌面左下角的开始按钮&…

JVM从入门到放弃——JVM内存模型

前言 Java和C或者是C相比较而言&#xff0c;最大的区别是C系列的程序员在编写代码的时候&#xff0c;总是要对程序中的变量进行释放内存的操作&#xff0c;所以在编写C或者是C的程序员需要格外的谨慎&#xff0c;因为他们对程序的内存有着很高的权限&#xff0c;这样虽然是特点…

小弟个人学习的过程!!!

小弟学生一个&#xff0c;高考没有考到一个好的学校&#xff0c;只能在不入流的学校学习软件。 之所以学习软件&#xff0c;因为听说软件行业比较赚钱。好吧&#xff01;&#xff1a; ) 因为大学学校教的太过基础&#xff0c;小弟只能开始自学之旅。 当然前期是在网上搜索教学视…

Win10强制更新怎么关闭 彻底禁止Windows自动更新

很多Win10用户来说经常会遇到这样的烦恼&#xff0c;电脑系统会不时的提醒自动更新&#xff0c;而且一等就要等很长时间&#xff0c;而通过手动禁止Windows update自带更新服务&#xff0c;往往会出现死灰复燃现象。 自己的电脑&#xff0c;竟然做不了主&#xff1f;小编表示不…

这个故事告诉你,拥有吃不胖的超能力就无忧无虑

这个故事告诉你&#xff0c;拥有吃不胖的超能力就无忧无虑了吗&#xff1f;本文转载自古代文学网 《塑胶人》剧照   导语   澳大利亚有部喜剧短片叫《塑胶人》&#xff0c;女主在约会前万事不顺&#xff0c;直到发现自己的外形居然能够像橡皮泥一样&#xff0c;用手塑造。…

同步异步 阻塞非阻塞

首先知道同步异步与阻塞非阻塞不是一个层次的概念 “阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解&#xff0c;提供一个从分布式系统角度的回答。 1.同步与异步 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous…

吴钩:打开宋代的“隐藏玩法”

访谈吴钩   焚香点茶、听风饮酒、赶集贸易、赏春游园&#xff0c;这都是世人所知晓的宋代。但养宠物、爱插花、喜“写真”、会熬夜、懂收藏&#xff0c;才是宋代的“隐藏玩法”。宋画中拥簇的市集、鲜香的食肆、考究的庭房&#xff0c;宋史中政治制度的改良、文化的雅俗共存、…