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

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

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

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

Создание таблицы hive с использованием метаданных файла parquet

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

4 ответов


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

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


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

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

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

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

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

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

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

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

    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")

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


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

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

  • Шаг 1: hive-S-e "экспорт таблицы $schema_file1.$tbl_file1 в '$HDFS_DATA_PATH/$tbl_file1';"# -- выполнить из HDFS.
  • Шаг 2: # --он содержит как данные, так и метаданные. zip и 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';"# -- Second import импортирует данные без каких-либо ошибок в виде таблицы, доступной сейчас

спасибо

Кумар