在Python中以编程方式启动HiveThriftServer

wpcxdonn  于 2023-10-18  发布在  Hive
关注(0)|答案(2)|浏览(152)

在spark-shell(scala)中,我们导入org.apache.spark.sql.hive.thriftserver._,用于以HiveThriftServer2.startWithContext(hiveContext)的形式为特定的hive上下文启动Hive Thrift服务器,以公开该特定会话的注册临时表。
我们如何使用Python来做同样的事情?python上是否有用于导入HiveThriftServer的package / API?任何其他想法/建议赞赏。
我们已经使用pyspark创建了一个框架
谢谢
拉维·纳拉亚南

dzhpxtsq

dzhpxtsq1#

你可以使用py 4j java gateway导入它。以下代码适用于spark 2.0.2,可以通过beeline查询python脚本中注册的临时表。

  1. from py4j.java_gateway import java_import
  2. java_import(sc._gateway.jvm,"")
  3. spark = SparkSession \
  4. .builder \
  5. .appName(app_name) \
  6. .master(master)\
  7. .enableHiveSupport()\
  8. .config('spark.sql.hive.thriftServer.singleSession', True)\
  9. .getOrCreate()
  10. sc=spark.sparkContext
  11. sc.setLogLevel('INFO')
  12. #Start the Thrift Server using the jvm and passing the same spark session corresponding to pyspark session in the jvm side.
  13. sc._gateway.jvm.org.apache.spark.sql.hive.thriftserver.HiveThriftServer2.startWithContext(spark._jwrapped)
  14. spark.sql('CREATE TABLE myTable')
  15. data_file="path to csv file with data"
  16. dataframe = spark.read.option("header","true").csv(data_file).cache()
  17. dataframe.createOrReplaceTempView("myTempView")

然后转到直线检查它是否正确启动:

  1. in terminal> $SPARK_HOME/bin/beeline
  2. beeline> !connect jdbc:hive2://localhost:10000
  3. beeline> show tables;

它应该显示在python中创建的表和临时表/视图,包括上面的“myTable”和“myTempView”。为了查看临时视图,必须具有相同的spark会话
(see作者:Avoid starting HiveThriftServer2 with created context programmatically
注意:即使Thrift服务器从终端启动并连接到同一个元存储,也可以访问配置单元表,但是临时视图不能访问,因为它们在spark会话中,没有写入元存储)

展开查看全部
hujrc8aj

hujrc8aj2#

对于Spark 3,以下工作:

  1. from py4j.java_gateway import java_import
  2. from pyspark.sql import SparkSession
  3. spark = SparkSession.builder.enableHiveSupport().getOrCreate()
  4. sc = spark.sparkContext
  5. java_import(sc._jvm, "org.apache.spark.sql.hive.thriftserver.HiveThriftServer2")
  6. args = sys.argv[1:]
  7. java_args = sc._gateway.new_array(sc._gateway.jvm.java.lang.String, len(args))
  8. for i, arg in enumerate(args):
  9. java_args[i] = arg
  10. sc._jvm.org.apache.spark.sql.hive.thriftserver.HiveThriftServer2.main(java_args)

请注意,HiveThriftServer2类的main方法调用startWithContext方法。(参见源代码)

相关问题