Можем ли мы загрузить файл паркета в улей напрямую?


Я знаю, что мы можем загрузить файл parquet с помощью Spark SQL и с помощью Impala, но интересно, можем ли мы сделать то же самое с помощью Hive. Я читал много статей, но я все еще в замешательстве.

Проще говоря, у меня есть файл паркета, - говорят пользователи.паркет. Теперь я поражен здесь о том, как загружать / вставлять / импортировать данные от пользователей.паркет в улей (очевидно, в стол).

Пожалуйста, посоветуйте или укажите мне правильное направление, если я упускаю что-то очевидное.

Создание таблицы улья с помощью метаданные файла parquet

Https://phdata.io/examples-using-textfile-and-parquet-with-hive-and-impala/

4 9

4 ответа:

Сделать схему паркетный файл, используя паркетный инструменты, подробности уточняйте ссылке http://kitesdk.org/docs/0.17.1/labs/4-using-parquet-tools-solution.html

И построить таблицу, используя схему в верхней части файла, для получения подробной информации проверьте создать таблицу Hive для чтения файлов parquet из схемы parquet / avro

Получение схемы имеет решающее значение, так как вам придется сначала создать таблицу с соответствующей схемой в Hive, а затем указать ее на файлы parquet.

У меня была аналогичная проблема, когда у меня были данные в одной виртуальной машине и мне пришлось переместить их в другую. Вот мое пошаговое руководство:

  1. Узнайте об оригинальных файлах паркета (расположение и схема): describe formatted users; и show create table users; Последний сразу же даст вам схему, а также укажет вам местоположение HDFS hdfs://hostname:port/apps/hive/warehouse/users

  2. Узнайте о секционировании вашей таблицы show partitions users;

  3. Скопируйте файлы Parquet таблицы из HDFS в локальный каталог

    hdfs dfs -copyToLocal /apps/hive/warehouse/users
    
  4. Переместите их на другой кластер / виртуальную машину или туда, куда вы хотите их переместить

  5. Создайте таблицу пользователей в пункте назначения CREATE USERS ..., используя ту же схему

    CREATE TABLE users ( name string, ... )
    PARTITIONED BY (...)
    STORED AS PARQUET;
    
  6. Теперь переместите файлы Parquet в соответствующую папку (при необходимости узнайте о расположении файла Parquet). таблица, которую вы только что создали)

    hdfs dfs -ls /apps/hive/warehouse/users/
    hdfs dfs -copyFromLocal ../temp/* /apps/hive/warehouse/
    
  7. Для каждого раздела вам нужно указать Hive на соответствующий подкаталог: alter table users add partition (sign_up_date='19991231') location '/apps/hive/warehouse/users/sign_up_date=19991231'; (возможно, вы захотите сделать это с помощью скрипта bash)

Это сработало для меня, надеюсь, это поможет.

Не знаю, немного ли это "хаки", но я использую zeppelin (поставляется с ambari). Вы можете просто сделать следующее в комбинации с spark2:

%spark2
import org.apache.spark.sql.SaveMode

var df = spark.read.parquet("hdfs:///my_parquet_files/*.parquet");
df.write.mode(SaveMode.Overwrite).saveAsTable("imported_table")

Преимущество этого способа заключается в том, что вы также можете импортировать множество файлов parquet, даже если они имеют другую схему.

Вы можете попробовать это... Экспорт / импорт работает для всех типов форматов файлов, включая паркет в улье. Это общая концепция, вы можете настроить немного на основе ваших требований, таких как нагрузка от локального (или) через кластер

Примечание: Вы можете использовать жесткий код вместо $ при выполнении отдельных шагов, а также передавать" HDFS path"," Schema "и" tablename " в качестве параметра при запуске из сценария. Таким образом, вы можете экспортировать / импортировать неограниченное количество таблиц, просто передав параметр

  • Шаг 1: hive-S-e " экспорт таблицы $schema_file1.$tbl_file1 to '$HDFS_DATA_PATH/$tbl_file1';" # -- выполнить из HDFS.
  • Шаг 2: # --он содержит как данные, так и метаданные. zip it и scp к целевому кластеру
  • Шаг 3: hive-S-e " импорт таблицы $schema_file1.$tbl_file1 из '$HDFS_DATA_PATH/$tbl_file1';" # -- первый импорт будет через ошибку, так как таблица не существует, но автоматически создает таблица
  • Шаг 4: hive-S-e " импорт таблицы $schema_file1.$tbl_file1 из '$HDFS_DATA_PATH/$tbl_file1';" # -- Второй импорт будет импортировать данные без каких-либо ошибок в виде таблицы, доступной сейчас

Спасибо

Кумар