SparkSession通过JDBC

时间:2017-01-18 14:46:11

标签: scala apache-spark jdbc hive apache-zeppelin

我在Apache Zeppelin中使用JDBC和SparkSession从远程HiveServer2读取数据时遇到了问题。

这是代码。

%spark

import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession

val prop = new java.util.Properties
prop.setProperty("user","hive")
prop.setProperty("password","hive")
prop.setProperty("driver", "org.apache.hive.jdbc.HiveDriver")

val test = spark.read.jdbc("jdbc:hive2://xxx.xxx.xxx.xxx:10000/", "tests.hello_world", prop)

test.select("*").show()

当我运行它时,我没有错误但没有数据,我只是检索表的所有列名,如下所示:

+--------------+
|hello_world.hw|
+--------------+
+--------------+

而不是:

+--------------+
|hello_world.hw|
+--------------+
+ data_here    +
+--------------+

我正在运行所有这些: Scala 2.11.8, OpenJDK 8,  Zeppelin 0.7.0,  Spark 2.1.0(bde/spark),  Hive 2.1.1(bde/hive

我在Docker中运行此设置,其中每个设备都有自己的容器,但连接在同一网络中。

此外,当我使用spark beeline连接到我的远程Hive时,它才有效。

我忘记了什么吗? 任何帮助,将不胜感激。 提前谢谢。

编辑:

我找到了一种解决方法,即在Spark和Hive之间共享docker volume或docker数据容器,更准确地说是它们之间的Hive仓库文件夹,以及配置spark-defaults.conf。然后,您可以在没有JDBC的情况下通过SparkSession访问配置单元。以下是如何执行此操作的步骤:

  1. 在Spark和Hive之间共享Hive仓库文件夹
  2. 使用如下配置spark-defaults.conf:

    spark.serializer     org.apache.spark.serializer.KryoSerializer
    
    spark.driver.memory              Xg
    
    spark.driver.cores       X
    
    spark.executor.memory        Xg
    
    spark.executor.cores         X
    
    spark.sql.warehouse.dir         file:///your/path/here
    
  3. 替换' X'与你的价值观。

    希望它有所帮助。

0 个答案:

没有答案