如何通过身份验证从Spark连接远程配置单元

时间:2019-07-25 06:38:33

标签: apache-spark hive

我必须使用本地Spark连接具有身份验证的远程配置单元。

我可以通过Beeline进行连接。

  

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

如何将其转换为使用spark? 我尝试过节俭和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:不支持的方法

2 个答案:

答案 0 :(得分:0)

您需要在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()

答案 1 :(得分:0)

显然,此问题是配置问题。

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