具有hivecontext的多个spark应用程序

lkaoscv7  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(300)

有两个单独的pyspark应用程序来示例化 HiveContext 代替 SQLContext 让两个应用程序中的一个失败并返回错误:
例外情况:(“你必须用Hive制造Spark。导出'spark\u hive=true'并运行build/sbt assembly',py4jjavaerror(调用none.org.apache.spark.sql.hive.hivecontext时出错。\n',javaobject id=o34039))
另一个应用程序成功终止。
我正在使用pythonapi中的spark1.6,并希望使用一些 Dataframe 只支持 HiveContext (例如。 collect_set ). 我在1.5.2和更早的版本中也遇到过同样的问题。
这足以再现:

import time
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext

conf = SparkConf()
sc = SparkContext(conf=conf)
sq = HiveContext(sc)

data_source = '/tmp/data.parquet'
df = sq.read.parquet(data_source)
time.sleep(60)

这个 sleep 只是在启动另一个进程时保持脚本运行。
如果有两个脚本示例在运行,那么在读取parquet文件时会显示上面的错误。当我替换 HiveContextSQLContext 一切都很好。
有人知道为什么吗?

jyztefdp

jyztefdp1#

默认情况下,配置单元(上下文)使用嵌入式derby作为元存储。它主要用于测试,只支持一个活动用户。如果您想支持多个正在运行的应用程序,您应该配置一个独立的元存储。目前,hive支持postgresql、mysql、oracle和mysql。配置的详细信息取决于后端和选项(本地/远程),但一般来说,您需要:
正在运行的rdbms服务器
使用提供的脚本创建的元存储数据库
适当的Hive配置
cloudera提供了一个全面的指南:配置配置单元元存储。
理论上,还可以使用适当的配置创建单独的derby元存储(请参阅配置单元管理手册-本地/嵌入式元存储数据库)或在服务器模式下使用derby。
对于开发,您可以在不同的工作目录中启动应用程序。这将创建单独的 metastore_db 并避免了多个活动用户的问题。提供单独的Hive配置也应该起作用,但在开发中用处不大:
当hive-site.xml没有配置时,上下文会自动在当前目录中创建metastore\ db

相关问题