【问题标题】:Impala JDBC connection issue in spark cluster modeSpark集群模式下的Impala JDBC连接问题
【发布时间】:2018-02-26 07:59:18
【问题描述】:

在集群模式下运行 spark 作业时,Impala jdbc 连接抛出异常。 Spark 作业创建 hive 表并使用 JDBC 使 impala 表无效/刷新。相同的作业在 spark 客户端模式下成功执行。

java.sql.SQLException: [Simba][ImpalaJDBCDriver](500164) Error initialized or created transport for authentication: [Simba][ImpalaJDBCDriver](500169) Unable to connect to server: GSS initiate failed. at om.cloudera.hivecommon.api.HiveServer2ClientFactory.createTransport(Unknown Source)
    at com.cloudera.hivecommon.api.HiveServer2ClientFactory.createClient(Unknown Source)
    at com.cloudera.hivecommon.core.HiveJDBCCommonConnection.connect(Unknown Source)
    at com.cloudera.impala.core.ImpalaJDBCConnection.connect(Unknown Source)
    at com.cloudera.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
    at com.cloudera.jdbc.common.AbstractDriver.connect(Unknown Source)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:270)

【问题讨论】:

    标签: apache-spark jdbc hadoop-yarn impala


    【解决方案1】:
      protected def getImpalaConnection(impalaJdbcDriver: String, impalaJdbcUrl: String): Connection = {
    if (impalaJdbcDriver.length() == 0) return null
    try {
      Class.forName(impalaJdbcDriver).newInstance
      UserGroupInformation.getLoginUser.doAs(
        new PrivilegedAction[Connection] {
          override def run(): Connection = DriverManager.getConnection(impalaJdbcUrl)
        }
      )
    } catch {
      case e: Exception => {
        println(e.toString() + " --> " + e.getStackTraceString)
        throw e
      }
    } }
    
    val   impalaJdbcDriver = "com.cloudera.impala.jdbc41.Driver"
    
    val impalaJdbcUrl = "jdbc:impala://<Impala_Host>:21050/default;AuthMech=1;SSL=1;KrbRealm=HOST.COM;KrbHostFQDN=_HOST;KrbServiceName=impala;REQUEST_POOL=xyz"
    
    println("Start impala connection")
    
    val impalaConnection = getImpalaConnection(impalaJdbcDriver,impalaJdbcUrl)
    
    
    val result = impalaConnection.createStatement.executeQuery(s"SELECT COUNT(1) FROM testTable")
    println("End impala connection")
    

    构建厚罐并使用以下给定的火花提交命令。如果需要,您可以传递其他参数,例如文件、jar。

    Spark 提交命令:

    spark-submit --master yarn-cluster --keytab /home/testuser/testuser.keytab --principal testuser@host.COM  --queue xyz--class com.dim.UpdateImpala
    

    根据您的 spark 版本进行如下更改

    对于 Spark1:UserGroupInformation.getLoginUser

    对于 Spark2:UserGroupInformation.getCurrentUser

    【讨论】:

    • 感谢您与我们分享您的问题的答案!您能解释一下为什么会出现错误以及您在做什么吗?
    • @eliasah:我在集群(启用了 Kerbores)模式下的 spark 作业中遇到了 Impala JDBC 连接问题。大多数论坛都建议在 spark-submit 命令中传递 keytab 和 principal,但在我的情况下它不起作用。为了解决这个问题,我对 JDBC 连接代码进行了更改,并且成功了。
    • 我没有找我。我要求它可以与社区共享。谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 2021-05-19
    相关资源
    最近更新 更多