【问题标题】:Error when interacting from Hive to Druid从 Hive 到 Druid 交互时出错
【发布时间】:2019-10-14 12:28:57
【问题描述】:

我正在尝试从 Hive 创建一个 Druid 数据源,并且我正在使用表 Hive。

首先,我创建了一个数据库 Hive:database_hive,然后,我在这个数据库中创建了一个表。

CREATE TABLE database_hive.hive_table (
    timemachine int,
    userId String,
    lang String,
    location String,
    name String,
    network String,
    posted String,
    sentiment String,
    text String,
);

第二次,我尝试使用hive_table 在 Druid 上创建一个新的数据源。

SET hive.druid.broker.address.default = 10.1.123.30:8082; --fake ip for example
SET hive.druid.metadata.username = druid;
SET hive.druid.metadata.password = druidpassword;
SET hive.druid.metadata.db.type = derby;
SET hive.druid.metadata.uri = jdbc:mysql://10.1.123.30:3306/druid?createDatabaseIfNoExist=true;

CREATE TABLE druid_table
STORED BY 'org.apache.hadoop.hive.druid.DruidStorageHandler'
TBLPROPERTIES (
    "druid.segment.granularity" = "MONTH",
    "druid.query.granularity" = "DAY")
    AS
    SELECT
    cast(timemachine as timestamp) as `__time`,   
    cast(userId as string) userId,
    cast(lang as string) lang,
    cast(location as string) location,
    cast(name as string) name,
    cast(network as string) network,
    cast(posted as string) posted,
    cast(sentiment as string) sentiment,
    cast(text as string) text
    FROM hive_table
;

这个查询返回一个错误:

Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.skife.jdbi.v2.exceptions.UnableToObtainConnectionException: java.sql.SQLException: Cannot create JDBC driver of class 'org.apache.derby.jdbc.ClientDriver' for connect URL 'jdbc:mysql://10.1.123.30:3306/druid?createDatabaseIfNoExist=true' (state=08S01,code=1)

在我的 Hive 存储库中,我有 mysql-connector-java.jar,所以我不明白有什么问题。我尝试了一些关于其他主题的建议,但没有找到解决方案。 有人有建议吗?

感谢您的帮助!

【问题讨论】:

    标签: hadoop hive hortonworks-data-platform druid


    【解决方案1】:

    问题在于您的 Druid 元数据数据库配置。 Hive 需要访问 Druid 用来存储所有元数据的关系数据库。在 Druid 端可以设置为derby,但是 Derby 就像 SQLite,所以它不能被 Hive 访问。因此,Hive 不允许 derby 作为 hive.druid.metadata.db.type 属性的有效参数。唯一允许的是mysqlpostgresql

    所以要解决这个问题,你需要:

    • 确保您的 Druid 集群使用 MySQL 或 PSQL 进行元数据存储
    • hive.druid.metadata.db.type 设置为正确的数据库类型
    • 设置hive.druid.metadata.uri 以更正DB url

    【讨论】:

    • 感谢您的回答。这对我帮助很大。现在,我可以使用 Postgre 连接器请求我的 Druid。我的第二个请求不起作用,但这不是问题,因为我可以更简单地做到这一点。我按照此文档结束我的工作:cwiki.apache.org/confluence/display/Hive/Druid+Integration
    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    相关资源
    最近更新 更多