如何将本地Spark实例连接到使用Kerberos远程服务器上的Hive表?

时间:2019-04-25 03:10:02

标签: apache-spark

上下文

我想将Spark 2用于一些基本的ETL,但是我们的Hadoop管理员具有非常不同的优先级,并且暂时无法安装它。

问题

简单地说,我想知道是否可以将运行在本地计算机上的Spark会话配置为:

  • 连接到Hadoop集群(未安装Spark 2)
  • 对群集进行身份验证,以便我可以访问其Hive表
  • 将数据从其Hive表读取到我的本地计算机
  • 在本地计算机上处​​理和转换数据
  • 将结果写到另一个远程RDBMS系统(例如PostgreSQL)

我没有服务器root用户访问权限。管理员策略禁止这些系统直接相互通信,但是我的本地计算机可以读取-或写入-。

这些先前回答的问题并未提供有效的解决方案:

非常感谢您的帮助! (即使只是说:“不,您必须在Hadoop群集上安装Spark才能读取其数据。”我只需要知道。)

1 个答案:

答案 0 :(得分:1)

恐怕你能做到。您可以尝试的一件事是通过jdbc连接连接配置单元,并在本地Spark集群中读取它。您需要打开对端口10000的防火墙访问。

val sc = spark.sparkContext
  val sqlContext = spark.sqlContext
  val driverName = "org.apache.hive.jdbc.HiveDriver"
  Class.forName(driverName)
  val df = spark.read
    .format("jdbc")
    .option("url", "jdbc:hive2://localhost:10000/default")
    .option("dbtable", "clicks_json")
    .load()

如果您有繁琐的身份验证 使用jdbc:hive2://server.dom.com:10000/mydatabase;user=someuser@PRINCIPAL.DOM.COM;principal=hive/principal.dom.com@PRINCIPAL.DOM.COM