如何让我的 pyspark 数据库在 windows 上对直线可见?
How can I make my pyspark database visible to beeline on windows?
大家好,我需要一些帮助才能在 pyspark 中打开泡菜罐。我正在学习 pyspark 并且作为练习,我正在尝试做一些我认为会很简单的事情......但它给了我一个非常困难的时间。
所以让我们从我正在做的事情开始吧。我正在使用 windows 并且我正在尝试启动本地节俭服务器并通过直线连接到我在 spark 会话中在我的应用程序中创建的数据库。
::step1 - start master in cmd
start %SPARK_HOME%\bin\spark-class.cmd org.apache.spark.deploy.master.Master
第 1 步效果很好,我可以看到用我的 spark 2.3.2 创建的主服务器 spark://n.n.n.n:7077。在 localhost:8080.
::step2 - start worker in cmd
start %SPARK_HOME%\bin\spark-class.cmd org.apache.spark.deploy.worker.Worker spark://n.n.n.n:7077
到目前为止一切顺利,我可以看到我有一个 8 核的 worker 运行ning。
::step3 - start thrift server
start %SPARK_HOME%\bin\spark-submit.cmd --verbose --class org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 spark-internal --hiveconf hive.server2.thrift.port=10000 --master spark://n.n.n.n:7077 --total-executor-cores 4
第 3 步好的,我可以看到 SparkSQL 应用程序 运行ning,我什至可以通过直线连接到它!
::if I do
start %SPARK_HOME%\bin\beeline.cmd
Beeline version 1.2.1.spark2 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: username
Enter password for jdbc:hive2://localhost:10000: password
Connected to: Spark SQL (version 2.3.2)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> SHOW TABLES;
+-----------+------------+--------------+--+
| database | tableName | isTemporary |
+-----------+------------+--------------+--+
+-----------+------------+--------------+--+
最后一步:创建我的应用程序并将其提供给我的 spark master 我现在转到 jupiter-notebook 运行 我的应用程序:
spark=SparkSession.builder.appName("Publish a database attempt").master("spark://n.n.n.n:7077").config('spark.sql.warehouse.dir','file:///D:/tmp/SparkDatabase/').getOrCreate()
df1=spark.read.csv('C:/data.csv',inferSchema=True,header=True)
df1.coalesce(1).write.mode('overwrite').saveAsTable('testTable')
spark.sql('show tables in default').show()
+--------+-----------+-----------+
|database| tableName|isTemporary|
+--------+-----------+-----------+
| default| testTable| false|
+--------+-----------+-----------+
spark.sql("SELECT * FROM testTable").show()
+--------+--------+--------+
| column1| column2| column3|
+--------+--------+--------+
| hi| there| friend|
+--------+--------+--------+
这是火花击中风扇的时候... 我可以在我的应用程序会话中看到这个数据库,但它没有以直线显示。回到直线并进行另一个 SHOW TABLES;不要耍花招。
评论:
- 我注意到当我启动 thrift 服务器时它会创建一个 metastore_db 而当我从 jupiter notebook 创建我的应用程序时这不会发生。
- 如果我尝试从 pyspark 实例而不是 jupyter-notebook 创建我的应用程序,我会收到错误 XSDB6:另一个 Derby 实例 运行ning。
我在这里想要实现的只是能够通过 windows 中的直线查看和查询我的 table 作为练习。非常感谢您对泡菜罐的帮助。
使用:conda 4.5.12; Python3.6.5; PySpark 2.3.2; hadoop-3.0.0
我在 Whosebug 中发现了另一个问题,其中包含解决我的问题的方法,我可以考虑作为答案:
Start HiveThriftServer programmatically in Python
基本上我需要忘记第 3 步和 运行 我在 Jupyter-notebook 中的应用程序:
from pyspark import *
from pyspark.sql import *
spark = SparkSession.builder \
.appName('Hi there') \
.master('spark://n.n.n.n:7077') \
.enableHiveSupport() \
.config('spark.sql.hive.thriftServer.singleSession', True) \
.getOrCreate()
#Start the Thrift Server using the jvm and passing the same spark session corresponding to pyspark session in the jvm side.
spark.sparkContext._gateway.jvm.org.apache.spark.sql.hive.thriftserver.HiveThriftServer2.startWithContext(spark._jwrapped)
df1=spark.read.csv('C:/data.csv',inferSchema=True,header=True)
df1.coalesce(1).write.mode('overwrite').saveAsTable('testTable')
那样我将使用 java 为当前会话启动 Thrift 服务器。有了它,我可以轻松连接到我的所有表并使用直线或其他 odbc 连接器访问数据。
大家好,我需要一些帮助才能在 pyspark 中打开泡菜罐。我正在学习 pyspark 并且作为练习,我正在尝试做一些我认为会很简单的事情......但它给了我一个非常困难的时间。
所以让我们从我正在做的事情开始吧。我正在使用 windows 并且我正在尝试启动本地节俭服务器并通过直线连接到我在 spark 会话中在我的应用程序中创建的数据库。
::step1 - start master in cmd
start %SPARK_HOME%\bin\spark-class.cmd org.apache.spark.deploy.master.Master
第 1 步效果很好,我可以看到用我的 spark 2.3.2 创建的主服务器 spark://n.n.n.n:7077。在 localhost:8080.
::step2 - start worker in cmd
start %SPARK_HOME%\bin\spark-class.cmd org.apache.spark.deploy.worker.Worker spark://n.n.n.n:7077
到目前为止一切顺利,我可以看到我有一个 8 核的 worker 运行ning。
::step3 - start thrift server
start %SPARK_HOME%\bin\spark-submit.cmd --verbose --class org.apache.spark.sql.hive.thriftserver.HiveThriftServer2 spark-internal --hiveconf hive.server2.thrift.port=10000 --master spark://n.n.n.n:7077 --total-executor-cores 4
第 3 步好的,我可以看到 SparkSQL 应用程序 运行ning,我什至可以通过直线连接到它!
::if I do
start %SPARK_HOME%\bin\beeline.cmd
Beeline version 1.2.1.spark2 by Apache Hive
beeline> !connect jdbc:hive2://localhost:10000
Connecting to jdbc:hive2://localhost:10000
Enter username for jdbc:hive2://localhost:10000: username
Enter password for jdbc:hive2://localhost:10000: password
Connected to: Spark SQL (version 2.3.2)
Driver: Hive JDBC (version 1.2.1.spark2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://localhost:10000> SHOW TABLES;
+-----------+------------+--------------+--+
| database | tableName | isTemporary |
+-----------+------------+--------------+--+
+-----------+------------+--------------+--+
最后一步:创建我的应用程序并将其提供给我的 spark master 我现在转到 jupiter-notebook 运行 我的应用程序:
spark=SparkSession.builder.appName("Publish a database attempt").master("spark://n.n.n.n:7077").config('spark.sql.warehouse.dir','file:///D:/tmp/SparkDatabase/').getOrCreate()
df1=spark.read.csv('C:/data.csv',inferSchema=True,header=True)
df1.coalesce(1).write.mode('overwrite').saveAsTable('testTable')
spark.sql('show tables in default').show()
+--------+-----------+-----------+
|database| tableName|isTemporary|
+--------+-----------+-----------+
| default| testTable| false|
+--------+-----------+-----------+
spark.sql("SELECT * FROM testTable").show()
+--------+--------+--------+
| column1| column2| column3|
+--------+--------+--------+
| hi| there| friend|
+--------+--------+--------+
这是火花击中风扇的时候... 我可以在我的应用程序会话中看到这个数据库,但它没有以直线显示。回到直线并进行另一个 SHOW TABLES;不要耍花招。
评论:
- 我注意到当我启动 thrift 服务器时它会创建一个 metastore_db 而当我从 jupiter notebook 创建我的应用程序时这不会发生。
- 如果我尝试从 pyspark 实例而不是 jupyter-notebook 创建我的应用程序,我会收到错误 XSDB6:另一个 Derby 实例 运行ning。
我在这里想要实现的只是能够通过 windows 中的直线查看和查询我的 table 作为练习。非常感谢您对泡菜罐的帮助。
使用:conda 4.5.12; Python3.6.5; PySpark 2.3.2; hadoop-3.0.0
我在 Whosebug 中发现了另一个问题,其中包含解决我的问题的方法,我可以考虑作为答案: Start HiveThriftServer programmatically in Python
基本上我需要忘记第 3 步和 运行 我在 Jupyter-notebook 中的应用程序:
from pyspark import *
from pyspark.sql import *
spark = SparkSession.builder \
.appName('Hi there') \
.master('spark://n.n.n.n:7077') \
.enableHiveSupport() \
.config('spark.sql.hive.thriftServer.singleSession', True) \
.getOrCreate()
#Start the Thrift Server using the jvm and passing the same spark session corresponding to pyspark session in the jvm side.
spark.sparkContext._gateway.jvm.org.apache.spark.sql.hive.thriftserver.HiveThriftServer2.startWithContext(spark._jwrapped)
df1=spark.read.csv('C:/data.csv',inferSchema=True,header=True)
df1.coalesce(1).write.mode('overwrite').saveAsTable('testTable')
那样我将使用 java 为当前会话启动 Thrift 服务器。有了它,我可以轻松连接到我的所有表并使用直线或其他 odbc 连接器访问数据。