2015-12-16 2 views
4

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

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

Пожалуйста, сообщите мне в правильном направлении, если мне не хватает чего-то очевидного.

Creating hive table using parquet file metadata

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

+1

Трюк, который я сделал с файлами ORC (на самом деле клонировать таблицу Prod в тестовый кластер): создать несегментированную таблицу с той же точной структурой; скопируйте файлы данных в каталог, используемый новой таблицей; * voila *, таблица заполнена. Возможно также работать с Парке. –

ответ

3

Получение схемы имеет решающее значение, так как вам нужно будет создать таблицу с соответствующей схемой сначала в 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. Теперь, переместите файлы Parquet в соответствующую папку (при необходимости узнайте о местоположении таблицы, которую вы только что создали)

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

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

0

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

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

  • Step1: улей -S -e "таблица экспорта $ schema_file1 $ tbl_file1 в '$ HDFS_DATA_PATH/$ tbl_file1';." # - Выполнить из HDFS.
  • Этап 2:# - Он содержит как данные, так и метаданные. застежка-молния его и УПП целевой кластеру
  • Step3: улей -S -e "таблицы импорта $ schema_file1 $ tbl_file1 от '$ HDFS_DATA_PATH/$ tbl_file1';." # - Сначала будет импортировать через ошибки в виде таблицы не существует, но автоматически создать таблицу
  • step4: улей -S -e «таблицы импорта $ schema_file1 $ tbl_file1 от«$ HDFS_DATA_PATH/$ tbl_file1. «;» # - Второй импорт будет импортировать данные без каких-либо ошибок в таблице доступных сейчас

Благодаря

Кумар

1

Не знаю, если это немного «Hacky», но я использую дирижабль (поставляется с амбари). Вы можете просто сделать следующее в сочетании с 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") 

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