从pyspark连接HiveServer2

时间:2018-04-21 09:04:41

标签: hadoop hive pyspark

我很困惑,如何使用pyspark从hive服务器使用jdbc获取数据。

我正在尝试使用jdbc从pyspark连接到本地计算机上运行的HiveServer2。所有组件HDFS,pyspark,HiveServer2都在同一台机器上。

以下是我用来连接的代码:

connProps={ "username" : 'hive',"password" : '',"driver" : "org.apache.hive.jdbc.HiveDriver"}
sqlContext.read.jdbc(url='jdbc:hive2://127.0.0.1:10000/default',table='pokes',properties=connProps)
dataframe_mysql = sqlContext.read.format("jdbc").option("url", "jdbc:hive://localhost:10000/default").option("driver", "org.apache.hive.jdbc.HiveDriver").option("dbtable", "pokes").option("user", "hive").option("password", "").load()

上面使用的两种方法都给出了与下面相同的错误:

  

org.apache.spark.sql.AnalysisException:java.lang.RuntimeException:   java.lang.RuntimeException:无法实例化   org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;

     

javax.jdo.JDOFatalDataStoreException:无法打开测试连接   到给定的数据库。 JDBC url =   jdbc:derby :; databaseName = metastore_db; create = true,username = APP。   终止连接池(如果您希望将lazyInit设置为true)   在应用程序之后启动数据库。)

     

错误XSDB6:Derby的另一个实例可能已经启动了数据库/ home /// jupyter-notebooks / metastore_db

metastore_db位于创建jupyter笔记本的同一目录中。但是hive-site.xml具有不同的Metastore位置。 我已经检查了其他有关同一错误的问题,说其他spark-shell或此类进程正在运行,但事实并非如此。即使我在HiveServer2和HDFS关闭时尝试执行命令,我也会遇到相同的错误

spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive")

我可以使用jdbc使用java程序连接到hives。我在这里错过了什么吗?请帮忙。谢谢。

1 个答案:

答案 0 :(得分:0)

Spark不应该使用JDBC连接到Hive。

它从Metastore读取,并跳过HiveServer2

但是,Another instance of Derby may have already booted the database表示您从另一个会话运行Spark,例如另一个仍在运行的Jupyter内核。尝试设置不同的Metastore位置,或使用本地Mysql或Postgres数据库设置远程Hive Metastore,并使用该信息编辑$SPARK_HOME/conf/hive-site.xml

来自SparkSQL - Hive tables

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL Hive integration example") \
    .config("spark.sql.warehouse.dir", warehouse_location) \
    .enableHiveSupport() \
    .getOrCreate()

# spark is an existing SparkSession
spark.sql("CREATE TABLE...")