Apache spark 使用HiveContext的多个Spark应用程序
如果有两个单独的pyspark应用程序实例化一个Apache spark 使用HiveContext的多个Spark应用程序,apache-spark,hive,pyspark,Apache Spark,Hive,Pyspark,如果有两个单独的pyspark应用程序实例化一个HiveContext而不是SQLContext,则两个应用程序中的一个会失败,并出现以下错误: 异常:(“您必须使用Hive.Export'Spark\u Hive=true'构建Spark并运行build/sbt assembly”,Py4JJavaError(调用None.org.apache.Spark.sql.Hive.HiveContext时出错。\n',JavaObject id=o34039)) 另一个应用程序成功终止 我正在使用P
HiveContext
而不是SQLContext
,则两个应用程序中的一个会失败,并出现以下错误:
异常:(“您必须使用Hive.Export'Spark\u Hive=true'构建Spark并运行build/sbt assembly”,Py4JJavaError(调用None.org.apache.Spark.sql.Hive.HiveContext时出错。\n',JavaObject id=o34039))
另一个应用程序成功终止
我正在使用Python API中的Spark 1.6,并希望使用一些Dataframe
函数,这些函数仅受HiveContext
支持(例如collect\u 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
只是在启动另一个进程时保持脚本运行
如果有两个脚本实例正在运行,则在读取拼花地板文件时会显示上述错误。当我用SQLContext
替换HiveContext
时,一切都很好
有人知道为什么吗?默认情况下,配置单元(上下文)使用嵌入式Derby作为元存储。它主要用于测试,只支持一个活动用户。如果您想支持多个正在运行的应用程序,您应该配置一个独立的元存储。目前,Hive支持PostgreSQL、MySQL、Oracle和MySQL。配置的详细信息取决于后端和选项(本地/远程),但一般来说,您需要:
- 正在运行的RDBMS服务器
- 使用创建的元存储数据库
- 适当的蜂巢