当前位置:  开发笔记 > 编程语言 > 正文

使用HiveContext的多个Spark应用程序

如何解决《使用HiveContext的多个Spark应用程序》经验,为你挑选了1个好方法。

有两个单独的pyspark应用程序实例化一个HiveContext代替一个SQLContext让两个应用程序中的一个失败并出现错误:

例外:("你必须使用Hive构建Spark.导出'SPARK_HIVE = true'并运行build/sbt程序集",Py4JJavaError(调用None.org.apache.spark.sql.hive.HiveContext时发生错误.\n ',JavaObject id = o34039))

另一个应用程序成功终止.

我正在使用Python API中的Spark 1.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只是为了在我启动其他进程时保持脚本运行.

如果我运行此脚本的两个实例,则在读取镶木地板文件时会显示上述错误.当我更换HiveContextSQLContext一切都很好.

有谁知道那是为什么?



1> zero323..:

默认情况下,Hive(Context)使用嵌入式Derby作为Metastore.它主要用于测试并仅支持一个活动用户.如果要支持多个正在运行的应用程序,则应配置独立的Metastore.此时Hive支持PostgreSQL,MySQL,Oracle和MySQL.配置细节取决于后端和选项(本地/远程),但一般来说您需要:

一个正在运行的RDBMS服务器

使用提供的脚本创建的Metastore数据库

适当的Hive 配置

Cloudera提供了一个有用的综合指南:配置Hive Metastore.

从理论上讲,也可以使用适当的配置创建单独的Derby Metastore(请参阅Hive管理员手册 - 本地/嵌入式Metastore数据库)或在服务器模式下使用Derby.

对于开发,您可以在不同的工作目录中启动应用程 这将为metastore_db每个应用程序创建单独的,并避免多个活动用户的问题.提供单独的Hive配置应该也可以,但在开发中不太有用:

如果未由hive-site.xml配置,则上下文会自动在当前目录中创建metastore_db

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有