1. 程式人生 > >使用Kylin匯入JDBC資料來源遇到的問題

使用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/extSQOOP_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的版本都是最新的,費了好些周折,把問題分享出來,希望對同在坑中的同志提供些幫助。

相關推薦

使用Kylin匯入JDBC資料來源遇到的問題

一、目標: 直接使用Mysql資料作為Kylin資料來源 二、參考官方配置 JDBC 資料來源 準備 Sqoop Kylin 使用 Apache Sqoop 從關係型資料庫載入資料到 HDFS。在與 Kylin 同一個機器上下載並安裝最新版本的 Sqoo

spark sql jdbc資料來源 多種輸出方式

package com.ws.jdbc import java.util.Properties import org.apache.spark.sql.{DataFrame, SparkSession} /** * spark sql jdbc資料來源 */ object JdbcD

idea配置熱載入,開發不用重啟tomcat,tomcat配置熱載入,釋出專案不用重啟tomcat,在自己專案的context配置jdbc資料來源

在conf/server.xml裡面的Host加入Context節點,設定以下屬性 path="/project_name" docBase="project_name" debug="1" reloadable="true"> 然後在Context節點加入以下子節點 <Watche

Spark SQL:JDBC資料來源複雜綜合案例實戰

一、JDBC資料來源實戰 Spark SQL支援使用JDBC從關係型資料庫(比如MySQL)中讀取資料。讀取的資料,依然由DataFrame表示,可以很方便地使用Spark Core提供的各種運算元

JAVA 連結WAS的JDBC資料來源

剛剛接觸WAS,配置資料來源時參考了很多資料,最終配置成功,記錄一下以便以後參考。 private static String userID = "userId"; private static String pwd = "123"; private static String jndiName

【資料庫篇】——2.匯入JDBC的jar包

選擇以下任意兩個都行,在這裡我選擇的是zip格式,點選Download然後,點選紅色內的內容下載開啟下載後的壓縮包,我們可以看到裡面的jar檔案如下(兩個):將這兩個jar檔案拷貝到我們的web project中的lib資料夾下(沒有這個檔案的話,自己建立一個folder) 

springboot用yml配置jdbc資料來源

  要讓那些黃色配置生效,要自己寫一個配置類。   https://blog.csdn.net/justlpf/article/details/80728529詳細解釋   程式碼: application.yml:

動態修改JDBC資料來源配置

因專案需要能動態修改資料來源的配置,及修改後不用重啟整個應用。使用的資料來源是apache的BasicDataSource,網上千篇一律的是如下實現: BasicDataSource bds=getDataSource();  try{   bds.close();  

Eclipse匯入專案後js卡死解決方法

開啟Eclipse的workspace下該專案對應.project檔案,刪除如下兩個相關配置: org.eclipse.wst.jsdt.core.javascriptValidator org.eclipse.wst

ireport 匯入javabean資料來源生成報表!

1.我的具體操作如下1.匯出vo-bean 生成jar檔案2.把jar檔案拷貝包ireport lib下,3.ireport 下的 classpath 下已加入jar包!4.javabeans set datasource 下 test 測試成功本文來自:軟體培訓專家-青軟培

weblogic配置JDBC資料來源(mysql)

配置JDBC資料來源 此例項使用資料庫為MySQL,表名為itoo-basic。 1,點選“新建”,開始新建資料來源 2,設定JDBC資料來源名稱和資料庫型別: 3,其他配置 4,設定資料來源連線屬性——資料庫使用者名稱、密碼:

java.sql.SQLException: Io : NL Exception was generated錯誤解決(jdbc資料來源問題)

錯誤資訊: -------------in sendHeartBeats -------------in sendHeartBeats 2014-03-24 17:37:51,456 ERROR (com.ylkj.drmt.importer.IndicatorDimens

JDBC資料來源(DataSource)的簡單實現

package com.lavasoft.simpledatesource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.sql.DataSource; i

kylin建立專案/資料來源

參考文件: 登陸 登陸後介面如下: 通過web訪問,如果正常,表示kylin配置成功!可以進行其它操作了。 建立專案(Project) 進入kylin介面後,可以通過點選“Add project”建立專

Elasticsearch JDBC的使用-MySQL 資料來源匯入和增量索引、更新

在使用 Elasticsearch 的時候,經常會涉及到要將其它資料來源的資料匯入到 Elasticsearch 中,今天就來介紹一下關於 Elasticsearch 從 MySQL 匯入資料和增量索引的實現 這裡要用到一個 Elasticsearch 的外掛

spring boot的Jdbc資料來源配置實戰

一 新建依賴 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin

JDBC、C3P0、DBCP、Druid 資料來源連線池使用的對比總結.md

Java的資料庫連線效能對比 JDBC: jdbc - 全名是 Java data base connectivity;翻譯為 Java資料庫連線 它是一個面向物件的程式介面(API);可以通過它訪問到各類的 關係型資料庫[注意:關係型資料庫] 它不屬於某一個

jdbc百萬資料批量匯入,流式讀取

Connection connReader = null; Connection connWrite = null; String url = "jdbc:mysql://XX:3306/XX?" + "user=XX&password=XX&

JDBC四種資料來源連線資料庫

maven工程依賴 pom.xml <dependencies> <dependency> <groupId>org.springframework</groupId>

[課本10.1.4]JDBC資料庫連線池- C3P0資料來源--通過構造方法建立資料來源物件--通過配置檔案建立資料來源物件[推薦]

JDBC- C3P0資料來源 1 /*重點提醒*/ 2 連線資料庫的較低的jar包版本會與較高版本的mysql版本有衝突; 3 通過把mysql 8.0的版本降到5.5, jar包仍使用較高的 mysql-connector-java-5.1.7-bin.jar, 完美解決衝突.