Как я могу сделать свою базу данных pyspark видимой для Билайн на Windows? - PullRequest
0 голосов
/ 11 января 2019

Привет всем, Мне нужна помощь, чтобы открыть банку с маринадом в pyspark. Я изучаю pyspark и в качестве упражнения я пытаюсь сделать что-то, что, как я предполагал, было бы простым делом ... но это доставляет мне очень тяжелые времена.

Итак, начнем с того, что я делаю. Я работаю с Windows и пытаюсь запустить локальный Thrift-сервер и подключиться через Билайн к базе данных, которую я создал в своем приложении в сеансе спарк.

::step1 - start master in cmd
start %SPARK_HOME%\bin\spark-class.cmd org.apache.spark.deploy.master.Master

Шаг 1 отлично работает , и я вижу, что основной сервер spark: //n.n.n.n: 7077 создан с моей искрой 2.3.2. в 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 работающими ядрами.

::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 работает , и я даже могу подключиться к нему через beeline!

::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  |
+-----------+------------+--------------+--+
+-----------+------------+--------------+--+

Последний шаг: создайте мое приложение и отправьте его на мой мастер-мастер Теперь я перехожу к 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|
+--------+--------+--------+    

Это когда искра попадает в вентилятор ... Я вижу эту базу данных в сеансе приложения, но она не отображается с помощью beeline. Возвращаясь к Билайн и делая еще один ШОУ ТАБЛИЦ; Не делай трюк.

Комментарии:

  1. Я заметил, что когда я запускаю благотворительный сервер, он создает metastore_db, а этого не происходит, когда я создаю свое приложение из блокнота Юпитера.
  2. Если я пытаюсь создать свое приложение из экземпляра pyspark вместо jupyter-notebook, я получаю ОШИБКУ XSDB6: запущен еще один экземпляр Derby.

То, чего я пытаюсь достичь здесь, - это просто видеть и запрашивать мою таблицу через beeline в окнах в качестве упражнения. Буду очень признателен за помощь с этой банкой для рассола.

с использованием: conda 4.5.12; Python 3.6.5; PySpark 2.3.2; Hadoop-3.0.0

1 Ответ

0 голосов
/ 16 января 2019

Я нашел другой вопрос в stackoverflow, в котором содержится способ решения моей проблемы, и я могу рассмотреть его как ответ: Программный запуск HiveThriftServer на 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')

Таким образом, я буду запускать Thrift Server, используя Java для текущего сеанса. Благодаря этому я могу легко подключаться ко всем своим таблицам и получать доступ к данным с помощью beeline или другого разъема odbc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...