Как получить доступ к таблицам RDD через Spark SQL как механизм распределенных запросов JDBC?

В нескольких публикациях на stackru есть ответы с частичной информацией о том, как получить доступ к таблицам RDD через Spark SQL как механизм распределенных запросов JDBC. Поэтому я хотел бы задать следующие вопросы для получения полной информации о том, как это сделать:

  1. В приложении Spark SQL нужно ли использовать HiveContext для регистрации таблиц? Или мы можем использовать только контекст SQL?

  2. Где и как мы используем HiveThriftServer2.startWithContext?

  3. Когда мы бежим 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, нам нужно указать какие-либо другие параметры?

  1. Есть ли другие вещи, которые нам нужно сделать?

Благодарю.

2 ответа

Выставлять временные таблицы DataFrame через HiveThriftServer2.startWithContext(), вам может понадобиться написать и запустить простое приложение, возможно, не нужно запускать start-thriftserver.sh,

На ваши вопросы:

  1. HiveContext нужно; sqlContext конвертировано в HiveContext неявно в искровой оболочке

  2. Напишите простое приложение, пример:

    импортировать org.apache.spark.sql.hive.thriftserver._  
    val  hiveContext  = новый HiveContext(sparkContext)
    hiveContext.parquetFile(путь).registerTempTable("my_table1")
      HiveThriftServer2.startWithContext(hiveContext)
  1. Нет необходимости бежать start-thriftserver.sh, но вместо этого запустите собственное приложение, например:

spark-submit --class com.xxx.MyJdbcApp./package_with_my_app.jar

  1. Ничто другое со стороны сервера не должно начинаться с порта по умолчанию 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)

Другие вопросы по тегам