Spark上的Hive如何从jdbc读取数据?

Posted

技术标签:

【中文标题】Spark上的Hive如何从jdbc读取数据?【英文标题】:How can Hive on Spark read data from jdbc? 【发布时间】:2018-05-08 03:00:37 【问题描述】:

我们在 Spark 上使用 Hive,我们想在 Hive 上做所有事情,并使用 Spark 进行计算。这意味着我们不需要编写 map/reduce 代码,而是编写类似 sql 的代码。

现在我们遇到了一个问题,我们想像 postgresql 一样读取数据源,并通过简单的 sql 代码对其进行控制。我们希望它在集群上运行。

我有个想法,我可以写一些 Hive udfs 来连接 jdbc 并制作一个类似数据的表,但是我发现它不能在 spark job 上运行,那就没用了。

我们想要的是像这样在 hive 中输入:

hive>select myfunc('jdbc:***://***','root','pw','some sql here');

然后我可以在 hive 中获得一张桌子,让它加入其他人。反之,无论hive使用什么引擎,我们都想读取hive中的其他数据源。

我现在不知道该怎么办,也许有人可以给我一些建议。


有什么办法可以这样做:

hive> select * from hive_table where hive_table.id in
      (select myfunc('jdbcUrl','user','pw','sql'));

我知道 hive 用于将 sql 编译为 MapReduce 作业,我想知道如何使我的 sql/udf 编译为 MapReduce 作业为spark.read().jdbc(...)

【问题讨论】:

您是否配置了 Hive Metastore 以连接到 JDBC? 我需要的数据不是来自Metastore,它来自任何数据源,我的意思是,它们的地址不一样。 【参考方案1】:

我认为将数据从 db 加载到 dataframe 更容易,然后如果需要,您可以将其转储到 hive。 阅读:https://spark.apache.org/docs/2.2.0/sql-programming-guide.html#jdbc-to-other-databases

查看属性名dbtable,可以加载sql查询中定义的表的一部分。

【讨论】:

谢谢你的回答,但是我们不提交我们的spark作业,我们只提交sql到hive。这意味着我们没有权限使用 spark,而是 hive。

以上是关于Spark上的Hive如何从jdbc读取数据?的主要内容,如果未能解决你的问题,请参考以下文章

二次开发Spark实现JDBC读取远程租户集群Hive数据并落地到本集群Hive的Hive2Hive数据集成Java

二次开发Spark实现JDBC读取远程租户集群Hive数据并落地到本集群Hive的Hive2Hive数据集成Java

在 Spark 中使用 jdbc 驱动程序连接到 Hive

如何使用 JDBC 从 Oracle 读取数据集?

将数据从 CSV 文件映射到 HDFS 上的 Hive 表时出错

从 Spark 读取 Hive 表作为数据集