hadoop - 从pyspark连接HiveServer2

标签 hadoop hive pyspark

我陷入困境,如何使用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()

上面使用的两种方法都给我以下相同的错误:

org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient;

javax.jdo.JDOFatalDataStoreException: Unable to open a test connection to the given database. JDBC url = jdbc:derby:;databaseName=metastore_db;create=true, username = APP. Terminating connection pool (set lazyInit to true if you expect to start your database after your app).

ERROR XSDB6: Another instance of Derby may have already booted the database /home///jupyter-notebooks/metastore_db



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/

相关文章:

apache-spark - Spark JDBC从Hive读取和写入

java - 如何将-javagent/path/to/newrelic.jar参数传递给运行HiveMetaStore服务器的JVM

hadoop - 配置单元更新,插入,删除

hive - Pig 脚本失败,出现 java.io.EOFException : Unexpected end of input stream

hadoop - 重复的任务被杀死

hadoop - 替代 hadoop 提供的默认 hashpartioner

apache-spark - 在 Pyspark 中转置数据帧

python - 如何将文件传递给主节点?

apache-spark - 如何使用 PySpark 正确执行两个 RDD 的完整外连接?

Hadoop Reducer 执行重现