【问题标题】:How to connect remote hive from spark with authentication如何通过身份验证从 Spark 连接远程配置单元
【发布时间】:2019-12-03 08:45:33
【问题描述】:

我必须使用本地 spark 连接远程配置单元并进行身份验证。

我可以通过直线连接。

beeline> !connect jdbc:hive2://bigdatamr:10000/default 连接到 jdbc:hive2://bigdatamr:10000/default 输入 jdbc 的用户名:hive2://bigdatamr:10000/default: myusername 输入 jdbc 的密码:hive2://bigdatamr:10000/default: ******** 连接到:Apache Hive(版本 1.2.0-mapr-1703) 驱动程序:Hive JDBC(版本 1.2.0-mapr-1703) 事务隔离:TRANSACTION_REPEATABLE_READ

如何将其转换为使用 spark? 我试过 thrift 和 jdbc 但都不起作用

我的小技巧,不知道如何通过认证

from pyspark.sql import SparkSession
spark = SparkSession\
    .builder.master("yarn")\
    .appName("my app")\
    .config("hive.metastore.uris", "thrift://bigdatamr:10000")\
    .enableHiveSupport()\
    .getOrCreate()

我的jdbc试试,不支持throw方法

jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:hive2://bigdatamr:10000") \
    .option("dbtable", "default.tmp") \
    .option("user", "myusername") \
    .option("password", "xxxxxxx") \
    .load()
Py4JJavaError: An error occurred while calling o183.load.

: java.sql.SQLException: 方法不受支持

【问题讨论】:

  • 您是否有权访问远程集群上的 spark 配置?我的意思是目录 PATH/TO/SPARK/conf ?
  • @user1314742 是的,我可以
  • 你能找到一个名为 hive-site.xml 的文件吗?您将此文件本地复制到 spark conf 目录,然后尝试再次运行您的应用程序

标签: apache-spark hive


【解决方案1】:

您需要在spark.read的选项中指定您正在使用的驱动程序:

.option("driver", "org.apache.hive.jdbc.HiveDriver")

另外,由于某种原因,您必须在 jdbc url 中指定数据库,并使用选项dbTable 指定表的名称。出于某种原因,简单地将dbTable 定义为database.table 是行不通的。

看起来像这样:

jdbcDF = spark.read \
    .format("jdbc") \
    .option("driver", "org.apache.hive.jdbc.HiveDriver") \
    .option("url", "jdbc:hive2://bigdatamr:10000/default")
    .option("dbtable", "tmp") \
    .option("user", "myusername") \
    .option("password", "xxxxxxx") \
    .load()

【讨论】:

  • 我添加了但仍然抛出同样的错误“java.sql.SQLException: Method not supported”
  • 您使用的是什么版本的 spark?您也可以尝试使用SparkSession.builder.master("local[*]").getOrCreate() 创建一个简单的本地火花驱动器吗?
  • 我现在使用的是 spark 2.4.0。我使用您的代码创建了简单的本地 spark 驱动程序,但仍然抛出相同的错误
  • 我认为你需要在jdbc url中指定数据库。我用完整的代码更新了答案来尝试。让我知道这是否有效
  • 您能提供完整的堆栈跟踪吗?
【解决方案2】:

显然这个问题是配置问题。

如果您有权访问您的服务器 /PATH/TO/HIVE/hive-site.xml 文件,请将其复制到本地 spark 配置文件夹 /PATH/TO/SPARK/conf/,然后重试运行您的应用程序

【讨论】:

    【解决方案3】:

    替换cloudera hive jdbc驱动覆盖官方jdbc。它有效。

    jdbc 网址如下: https://www.cloudera.com/downloads/connectors/hive/jdbc/2-6-15.html

    我将它上传到databricks库并更改了连接的代码。

    这是我的代码:

      sql=f"SELECT * FROM  (select column from db.table where column = 'condition'"
      print(sql)
      print("\nget Hive data\n")
      spark_df = spark.read \
                    .format("jdbc")\
                    .option("driver", "com.cloudera.hive.jdbc41.HS2Driver") \
                    .option("url", "url") \
                    .option("query", "sql") \
                    .load()
    

    这是我的博客

    https://blog.8owe.com/

    它可以帮助你更多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多