我有一个方案来比较来自两个独立的远程配置单元服务器的两个不同的表源和目标,我们能够使用两个 SparkSessions
,就像我在下面尝试的那样: -
val spark = SparkSession.builder().master("local")
.appName("spark remote")
.config("javax.jdo.option.ConnectionURL", "jdbc:mysql://192.168.175.160:3306/metastore?useSSL=false")
.config("javax.jdo.option.ConnectionUserName", "hiveroot")
.config("javax.jdo.option.ConnectionPassword", "hivepassword")
.config("hive.exec.scratchdir", "/tmp/hive/${user.name}")
.config("hive.metastore.uris", "thrift://192.168.175.160:9083")
.enableHiveSupport()
.getOrCreate()
SparkSession.clearActiveSession()
SparkSession.clearDefaultSession()
val sparkdestination = SparkSession.builder()
.config("javax.jdo.option.ConnectionURL", "jdbc:mysql://192.168.175.42:3306/metastore?useSSL=false")
.config("javax.jdo.option.ConnectionUserName", "hiveroot")
.config("javax.jdo.option.ConnectionPassword", "hivepassword")
.config("hive.exec.scratchdir", "/tmp/hive/${user.name}")
.config("hive.metastore.uris", "thrift://192.168.175.42:9083")
.enableHiveSupport()
.getOrCreate()
我尝试使用 SparkSession.clearActiveSession() and SparkSession.clearDefaultSession()
,但它不起作用,抛出以下错误:
Hive: Failed to access metastore. This class should not accessed in runtime.
org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
有没有其他方法我们可以使用多个 SparkSessions
或 SparkContext
访问两个配置单元表 .
谢谢
2 回答
看SparkSession getOrCreate method
说明哪一点
这就是它返回第一次会话及其配置的原因 .
请浏览docs以找出创建会话的其他方法..
我正在研究<2火花版 . 所以我不确定如何创建新的会话与配置冲突完全..
但是,这是有用的测试用例,即SparkSessionBuilderSuite.scala做那个 - DIY ..
该测试用例中的示例方法
我使用这种方式并使用Spark 2.1完美地工作