我试图从配置单元创建一个druid数据源,并使用表配置单元。
首先,我创建了一个数据库配置单元: 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
所以我不明白问题出在哪里。我试过一些关于其他主题的建议,但没有找到解决办法。有人有建议吗?
谢谢你的帮助!
1条答案
按热度按时间a7qyws3x1#
问题出在您的druid元数据db配置中。配置单元需要访问关系数据库,druid使用该数据库存储所有元数据。可以设置为
derby
在Druid方面,但是德比就像sqlite,所以不能被Hive访问。因此,Hive不允许derby
作为有效的论据hive.druid.metadata.db.type
财产。唯一允许的是mysql
以及postgresql
.因此,要解决此问题,您需要:
确保您的druid集群使用mysql或psql进行元数据存储
套
hive.druid.metadata.db.type
到正确的db类型套
hive.druid.metadata.uri
更正数据库url