2015-05-27 4 views
0

Я использую Spark 1.3.1 от AWS EMR. Я создал таблицу с помощью искрового HiveContext и могу видеть это из улья (с использованием "show tables"). Однако при попытке запросить table(Select..), он бросает следующие ошибки:Не удается запросить таблицу искры от Hive/JDBC

hdfs://IP:9000/user/hive/warehouse/tablename/part-r-00001.parquet not a SequenceFile

Когда я использую «описывают имя_таблицы», он показывает:

col      array<string>   from deserializer 

«Показать таблицу» возвращает имя таблицы.

Любая идея, почему паркет файл не упорядоченным файл, который Спарк создает и как решить это? Мне нужно запрашивать таблицы Spark, из улья и использование JDBC-соединения ионов из RStudio или других инструментов.

+0

SparkSQL/Куст и паркет в сочетании могут быть искусно. Как вы создаете таблицу? Учитывая желание заставить Spark и Hive работать вместе, вы можете найти https://github.com/awslabs/emr-bootstrap-actions/blob/master/spark/examples/parquet-sparksql-hive-compatibility.md полезным. – ChristopherB

+0

Настройка convertMetastoreParquet на false была трюком. Спасибо за информацию! Я создаю таблицу Spark, используя saveAsTable из json-файла после загрузки в Data Frame. Знаете ли вы, как я могу напрямую обращаться к таблице Spark, используя JDBC? Документация Spark 1.3.1 говорит, что он работает с использованием Hive Server2, но это не так. Есть идеи? –

ответ

0

(Проводка комментариев как ответ) Проблема заключается в том, что Spark и Hive используют одну и ту же версию Parquet и понимают, как получить доступ к тем же данным.

В качестве примера можно увидеть на https://github.com/awslabs/emr-bootstrap-actions/blob/master/spark/examples/parquet-sparksql-hive-compatibility.md

Полезной недвижимость в Спарке, чтобы из-за этого:

set spark.sql.hive.convertMetastoreParquet=false; 

Что касается доступа к Спарку через JDBC, сервер Трифта для Спарка, который основан на потребности HiveServer2 для запуска и запуска в другом порту, чем существующий HiveServer2, который поставляется с Hive. См команды https://spark.apache.org/docs/latest/sql-programming-guide.html#running-the-thrift-jdbcodbc-server

Примера для запуска службы бережливости для JDBC на порт 10001:

/home/hadoop/spark/sbin/start-thriftserver.sh --hiveconf hive.server2.thrift.http.port=10001 --master yarn-client 

Обязательно обратите внимание, что start-thriftserver.sh принимает знакомые варианты, как найти с искрой подать с выделением ресурсов (исполнители, ядра, память и т. д.) соответственно.