Как настроить подключение к HIVE с помощью PySpark и SparkSession (Как добавить имя пользователя и пароль)?

#apache-spark #hadoop #pyspark #hive

Вопрос:

Я пытался получить доступ к таблицам в Hive с помощью PySpark , и после прочтения нескольких других сообщений люди рекомендуют подключиться к Hive именно таким способом. Но это не работает. Затем я понимаю, что, вероятно, должен передать свое имя пользователя и пароль, но я не могу понять, как это сделать. Итак , есть ли способ передать имя пользователя и pw при настройке SparkSession , или в чем еще может быть проблема?

 import sys
from pyspark import SparkContext, SparkConf, HiveContext
from pyspark.sql import SparkSession

if __name__ == "__main__":

# create Spark context with Spark configuration
spark = SparkSession.builder()
      .appName("interfacing spark sql to hive metastore without configuration file")
      .config("hive.metastore.uris", "thrift://my_server:10000")
      .enableHiveSupport()
      .getOrCreate()
sc = spark.sparkContext
df = sc.parallelize([(1, 2, 3, 'a b c'),(4, 5, 6, 'd e f'),(7, 8, 9, 'g h i')]).toDF(['col1', 'col2', 'col3','col4'])
df.write.mode("overwrite").saveAsTable("test_spark")
 

Обратная связь

 Exception in thread "main" org.apache.spark.SparkException: Application application_1575789516697_258641 finished with failed status
    at org.apache.spark.deploy.yarn.Client.run(Client.scala:1122)
    at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1168)
    at org.apache.spark.deploy.yarn.Client.main(Client.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$runMain(SparkSubmit.scala:780)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
 

Ответ №1:

Искра напрямую подключается к Улью. Не нужно передавать имя пользователя и пароль, просто передайте hive-site.xml , пока отправляете приложение spark.

Используйте этот приведенный ниже код,

  from pyspark.sql import SparkSession

   sparkSession = SparkSession.builder.appName("ApplicationName").enableHiveSupport().getOrCreate()
   

 

При подаче заявления пройдите hive-site.xml файл,
КАК,

 spark-submit --files /<location>/hive-site.xml --py-files <List_of_Pyfiles> 

 

Ответ №2:

попробуйте добавить ниже в конфигурацию

 .config("spark.sql.warehouse.dir", your_warehouse_location)
 

Используйте это в качестве ссылки.