【问题标题】:Spark JDBC with HIVE - Scala使用 HIVE 的 Spark JDBC - Scala
【发布时间】:2018-02-02 00:05:11
【问题描述】:

我在 HIVE 中有一个示例表 (stuends1),我想使用 JDBC 从 Spark 连接它(因为 Hive 在 AWS 中,而不是在同一个集群中)。我只是在尝试以下代码

def main(args: Array[String]): Unit = {
//Class.forName("org.apache.hive.jdbc.HiveDriver").newInstance()
val conf = new SparkConf().setAppName("SOME APP NAME").setMaster("local[*]")

val sc = new SparkContext(conf)


val spark = SparkSession
  .builder()
  .appName("Spark Hive Example")
  .getOrCreate()

val jdbcDF = spark.read
  .format("jdbc")
  .option("url", "jdbc:hive2://34.223.237.55:10000")
  .option("dbtable", "students1")
  .option("user", "hduser")
  .option("password", "hadoop")
  //.option("driver", "org.apache.hadoop.hive.jdbc.HiveDriver")
  .load()

println("able to connect------------------")

jdbcDF.show

jdbcDF.printSchema()

jdbcDF.createOrReplaceTempView("std")



val sqlDF = spark.sql("select * from std")

println("Start println-----")
spark.sqlContext.sql("select * from std").collect().foreach(println)
println("end println-----")
sqlDF.show(false)
}

我尝试了多种方式,但始终只显示带有列名的表结构。喜欢...

+--------------+-------------+-------------+
|students1.name|students1.age|students1.gpa|
+--------------+-------------+-------------+
+--------------+-------------+-------------+

但不是数据,但在尝试使用 dbeaver 从我的本地使用 SQL 查询时能够获取数据。从 spark 中, jdbcDF.printSchema() 也显示了正确的模式,所以我想连接没有问题。

我将 spark 2.1.1 与 HIVE 1.2.1 一起使用。我的 sbt.build 文件是这样的....

libraryDependencies ++= Seq(

"log4j"  %   "log4j"  % "1.2.17",
"org.apache.spark" % "spark-core_2.11"                        % "2.1.1" ,
"org.apache.spark" % "spark-streaming-kafka_2.10"             % "1.6.2",
"org.apache.spark" % "spark-hivecontext-compatibility_2.10"   % "2.0.0-preview",
"org.apache.spark" % "spark-sql_2.11"                         % "2.1.1" ,
"org.apache.spark" % "spark-hive_2.10"                        % "2.1.1",
"org.apache.hive"  % "hive-jdbc"                              % "1.2.1"

)

谁能说明为什么我没有得到任何 show() 的输出。在此先感谢...

【问题讨论】:

  • 你能发布jdbcDF.count()的输出吗?
  • 奇怪!!! count 为 0...这意味着没有数据被拾取...但是 select * from students1 ,从 dbeaver 显示所有数据。我一定是做错了什么.....
  • 你的 hive 表的表格式是什么,是 ORC 吗?
  • 不,它的文本格式。
  • 为什么不将 spark 配置为指向 AWS 元存储?

标签: scala hadoop apache-spark hive


【解决方案1】:

请提 fetchsize 属性,它会解决没有数据的问题。

fetchsize - JDBC 提取大小,它确定每次往返要提取多少行。这有助于为获取大小较小的 JDBC 驱动程序(例如,具有 10 行的 Oracle)获得一些性能。此选项仅适用于阅读。

val jdbcDF = spark.read
  .format("jdbc")
  .option("url", "jdbc:hive2://34.223.237.55:10000")
  .option("dbtable", "students1")
  .option("user", "hduser")
  .option("password", "hadoop")
  .option("fetchsize", "20")
  .load()

【讨论】:

    猜你喜欢
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 2021-02-03
    • 2016-04-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    相关资源
    最近更新 更多