博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark:同一个程序使用多个hive元数据
阅读量:6435 次
发布时间:2019-06-23

本文共 1210 字,大约阅读时间需要 4 分钟。

一个SparkSession对象只能使用一个hive元数据,且中间不可变更,若想spark程序能访问多个hive元数据,有以下两种方法:

方法一:

采用jdbc方式建立多个hive连接。

方法二:

程序前后创建两个SparkSession对象(不能共存),分别用 hive.metastore.uris 选项指定不同的hive服务地址:

val spark = SparkSession    .builder()    .appName("Test")    .config("spark.sql.parquet.writeLegacyFormat", true)    .config("hive.metastore.uris", "thrift://10.18.2.3:9083")    .enableHiveSupport()    .getOrCreate()val df = spark.table("...")df.createOrReplaceGlobalTempView("tempView")val spark1 = spark.newSession //此新的SparkSession对象能够看到表tempViewspark.stop()val spark2 = SparkSession    .builder()    .appName("Test")    .config("spark.sql.parquet.writeLegacyFormat", true)    .config("hive.metastore.uris", "thrift://10.18.2.4:9083")    .enableHiveSupport()    .getOrCreate()//spark2对象看不到表tempView

用这种方法可以在一个程序中先后分别使用两个hive的数据,但是却不能同时使用两个hive的数据,也不能在两个hive之间共享数据。因为——

createOrReplaceGlobalTempView方法注册的全局表只能在上下文相同的SparkSession对象间可见:

假设spark是注册全局表时用的SparkSession对象,则此全局表对spark.newSession返回的新对象可见;而对于用SparkSession.builder().getOrCreate()返回的新对象不可见。

spark.newSessionspark共享相同的SparkContext,newSession方法的文档是这样说的:

使用隔离的SQL配置启动新会话。临时表,已注册的函数被隔离,但共享底层的SparkContext和缓存数据。

所以方法二不能跨hive共享数据。

转载于:https://www.cnblogs.com/xuejianbest/p/10284985.html

你可能感兴趣的文章
《奇迹MU》游戏报错解决方案
查看>>
解读Spring LDAP 帮助中的代码案例 (二)
查看>>
机房建设主要标准规范的介绍
查看>>
resin配置多个app
查看>>
Unity3D脚印3——Transform
查看>>
使用exp备份时报Export terminated successfully with warnings处理办法
查看>>
Windows Server 2012作为桌面版系统使用,简单优化过程
查看>>
linux环境下安装nginx步骤
查看>>
NULL值比较,两个列的合并,列值按条件替换。
查看>>
队列的C语言实现
查看>>
Android--完成删除文件、文件夹操作
查看>>
IIS 无法安装URL重写模块的解决办法 UrlReWrite (.NET`SQL技术交流 群号206656202)
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
特殊的宏定义
查看>>
虚拟机硬盘分区教程
查看>>
2018.1.4 4周3次课
查看>>
自动计算label字体的高度和图片拉伸处理(封装成分类分享)
查看>>
我的友情链接
查看>>
TDH_Socket的一些性能对比数据
查看>>