我陷入困境,如何使用pyspark使用jdbc从hive服务器获取数据。
我正在尝试使用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()
上面使用的两种方法都给我以下相同的错误:
metastore_db位于创建我的jupyter笔记本的同一目录中。但是hive-site.xml具有不同的元存储位置。
我已经检查了关于相同错误的其他问题,说其他的 Spark 壳或此类进程正在运行,但事实并非如此。即使我在HiveServer2和HDFS关闭时尝试执行以下命令,也会出现相同的错误
spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive")
我可以使用jdbc使用java程序连接到 hive 。我在这里想念什么吗?请帮助。谢谢。
最佳答案
Spark不应使用JDBC连接到Hive。
它从元存储读取,并跳过HiveServer2
但是,Another instance of Derby may have already booted the database
意味着您正在另一个 session 中运行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...")
关于hadoop - 从pyspark连接HiveServer2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49954108/