Как получить доступ к таблицам RDD через Spark SQL как механизм распределенных запросов JDBC?
В нескольких публикациях на stackru есть ответы с частичной информацией о том, как получить доступ к таблицам RDD через Spark SQL как механизм распределенных запросов JDBC. Поэтому я хотел бы задать следующие вопросы для получения полной информации о том, как это сделать:
В приложении Spark SQL нужно ли использовать HiveContext для регистрации таблиц? Или мы можем использовать только контекст SQL?
Где и как мы используем HiveThriftServer2.startWithContext?
Когда мы бежим
start-thriftserver.sh
как в
/opt/mapr/spark/spark-1.3.1/sbin/start-thriftserver.sh -master spark://spark-master:7077 --hiveconf hive.server2.thrift.bind.host spark-master --hiveconf hive.server2.trift.port 10001
кроме указания jar и основного класса приложения Spark SQL, нам нужно указать какие-либо другие параметры?
- Есть ли другие вещи, которые нам нужно сделать?
Благодарю.
2 ответа
Выставлять временные таблицы DataFrame через HiveThriftServer2.startWithContext()
, вам может понадобиться написать и запустить простое приложение, возможно, не нужно запускать start-thriftserver.sh
,
На ваши вопросы:
HiveContext
нужно;sqlContext
конвертировано вHiveContext
неявно в искровой оболочкеНапишите простое приложение, пример:
импортировать org.apache.spark.sql.hive.thriftserver._ val hiveContext = новый HiveContext(sparkContext) hiveContext.parquetFile(путь).registerTempTable("my_table1") HiveThriftServer2.startWithContext(hiveContext)
- Нет необходимости бежать
start-thriftserver.sh
, но вместо этого запустите собственное приложение, например:
spark-submit --class com.xxx.MyJdbcApp./package_with_my_app.jar
- Ничто другое со стороны сервера не должно начинаться с порта по умолчанию 10000; Вы можете проверить, подключившись к серверу с билайном.
В Java я смог представить dataframe в качестве временных таблиц и прочитать содержимое таблицы через beeline (как в обычной таблице кустов)
Я не опубликовал всю программу (при условии, что вы уже знаете, как создавать кадры данных)
import org.apache.spark.sql.hive.thriftserver.*;
HiveContext sqlContext = new org.apache.spark.sql.hive.HiveContext(sc.sc());
DataFrame orgDf = sqlContext.createDataFrame(orgPairRdd.values(), OrgMaster.class);
orgPairRdd - это JavaPairRDD, orgPairRdd.values () -> содержит полное значение класса (строка, извлеченная из Hbase)
OrgMaster - сериализуемый класс Java-бинов
orgDf.registerTempTable("spark_org_master_table");
HiveThriftServer2.startWithContext(sqlContext);
Я отправил программу локально (так как сервер Hive Thrift не работает в порту 10000 на этой машине)
hadoop_classpath=$(hadoop classpath)
HBASE_CLASSPATH=$(hbase classpath)
spark-1.5.2/bin/spark-submit --name tempSparkTable --class packageName.SparkCreateOrgMasterTableFile --master local[4] --num-executors 4 --executor-cores 4 --executor-memory 8G --conf "spark.executor.extraClassPath=${HBASE_CLASSPATH}" --conf "spark.driver.extraClassPath=${HBASE_CLASSPATH}" --conf "spark.executor.extraClassPath=${hadoop_classpath}" --conf --jars /path/programName-SNAPSHOT-jar-with-dependencies.jar
/path/programName-SNAPSHOT.jar
В другом терминале запустите билайн, указывающий на эту экономную услугу, запущенную с помощью этой программы искры
/opt/hive/hive-1.2/bin/beeline -u jdbc:hive2://<ipaddressofMachineWhereSparkPgmRunninglocally>:10000 -n anyUsername
Показать таблицы -> команда отобразит таблицу, которую вы зарегистрировали в Spark
Вы можете также описать
В этом примере
describe spark_org_master_table;
тогда вы можете выполнять регулярные запросы в билайне к этой таблице. (Пока не убьешь выполнение программы spark)