我正在尝试通过 Thrift 在 pyspark 上创建一个临时表。我的最终目标是能够使用 JDBC 从 DBeaver 等数据库客户端访问它。
我首先使用直线进行测试。
这就是我正在做的事情。
- 使用 docker 在我自己的机器上用一个工人启动了一个集群并添加
spark.sql.hive.thriftServer.singleSession true
了spark-defaults.conf
启动 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
服务器似乎正常启动,我可以看到在我的 spark 集群主 UI 上运行的 pyspark 和 thrift 服务器作业。
然后我使用直线连接到集群
./bin/beeline beeline> !connect jdbc:hive2://172.18.0.2:10001
这就是我得到的
连接到 jdbc:hive2://172.18.0.2:10001
Enter username for jdbc:hive2://172.18.0.2:10001:
Enter password for 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 INFO 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
当我启动节俭服务器时,我得到了这些:
来自 spark://172.18.0.2:7077
ssh 的 rsync:无法解析主机名 spark:名称或服务未知
rsync:连接意外关闭(到目前为止已收到 0 个字节) [Receiver]
rsync 错误:io 出现无法解释的错误(代码 255) .c(235) [Receiver=3.1.2]
启动 org.apache.spark.sql.hive.thriftserver.HiveThriftServer2,登录到 ...
我经历了几个帖子和讨论。我看到有人说我们不能通过 thrift 公开临时表,除非您从同一代码中启动服务器。如果这是真的,我怎么能在 python (pyspark) 中做到这一点?
谢谢