【发布时间】:2019-11-11 05:30:43
【问题描述】:
我正在尝试通过 Thrift 在 pyspark 上创建一个临时表。我的最终目标是能够使用 JDBC 从 DBeaver 等数据库客户端访问它。
我首先使用 beeline 进行测试。
这就是我正在做的。
- 在我自己的机器上使用 docker 启动了一个集群,并在
spark-defaults.conf上添加了spark.sql.hive.thriftServer.singleSession true -
启动 Pyspark shell(为了测试)并运行以下代码:
from pyspark.sql import Row l = [('Ankit',25),('Jalfaizy',22),('saurabh',20),('Bala',26)] rdd = sc.parallelize(l) people = rdd.map(lambda x: Row(name=x[0], age=int(x[1]))) people = people.toDF().cache() peebs = people.createOrReplaceTempView('peebs') result = sqlContext.sql('select * from peebs')到目前为止一切顺利,一切正常。
-
在另一个终端上,我初始化了 spark thrift 服务器:
./sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.port=10001 --conf spark.executor.cores=1 --master spark://172.18.0.2:7077服务器似乎正常启动,我可以看到 pyspark 和 thrift 服务器作业在我的 spark 集群主 UI 上运行。
-
然后我使用直线连接到集群
./bin/beeline beeline> !connect jdbc:hive2://172.18.0.2:10001这就是我得到的
连接到 jdbc:hive2://172.18.0.2:10001
输入 jdbc 的用户名:hive2://172.18.0.2:10001:
输入 jdbc:hive2://172.18.0.2:10001 的密码:
2019-06-29 20:14:25 INFO Utils:310 - 提供的权限:172.18.0.2:10001
2019-06-29 20:14:25 INFO Utils:397 - 已解决的权限:172.18.0.2:10001
2019-06-29 20:14:25 信息 HiveConnection:203 - 将尝试使用 JDBC Uri 打开客户端传输:jdbc:hive2://172.18.0.2:10001
连接到:Spark SQL(2.3.3 版)
驱动程序:Hive JDBC(版本 1.2.1.spark2)
事务隔离:TRANSACTION_REPEATABLE_READ好像没问题。
当我列出
show tables;时,我什么都看不到。
我想强调两件有趣的事:
-
当我启动 pyspark 时,我会收到这些警告
WARN ObjectStore:6666 - 在 Metastore 中找不到版本信息。 hive.metastore.schema.verification 未启用,因此记录架构版本 1.2.0
WARN ObjectStore:568 - 获取数据库默认值失败,返回 NoSuchObjectException
WARN ObjectStore:568 - 获取数据库 global_temp 失败,返回 NoSuchObjectException
-
当我启动 thrift 服务器时,我得到了这些:
rsync 来自 spark://172.18.0.2:7077
ssh:无法解析主机名 spark:名称或服务未知
rsync:连接意外关闭(到目前为止已收到 0 个字节)[接收方]
rsync 错误:在 io.c(235) [Receiver=3.1.2] 出现无法解释的错误(代码 255)
正在启动 org.apache.spark.sql.hive.thriftserver.HiveThriftServer2,登录到 ...
我经历了好几篇帖子和讨论。我看到有人说我们不能通过 thrift 公开临时表,除非您从同一代码中启动服务器。如果这是真的,我该如何在 python (pyspark) 中做到这一点?
谢谢
【问题讨论】:
标签: python apache-spark pyspark thrift spark-thriftserver