Можем ли мы загрузить файл паркета в 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, а затем указать ее на паркетные файлы.
у меня была аналогичная проблема, когда у меня были данные в одной виртуальной машине и мне пришлось переместить ее в другую. Вот мой пример:
узнайте о оригинальных паркетных файлах (расположение и схема):
describe formatted users;
иshow create table users;
последний получит вам схему сразу, а также укажет вам местоположение HDFShdfs://hostname:port/apps/hive/warehouse/users
узнайте о разделении вашей таблицы
show partitions users;
-
скопируйте паркетные файлы таблицы из HDFS в локальный каталог
hdfs dfs -copyToLocal /apps/hive/warehouse/users
переместите их в другой кластер / VM или туда, куда вы хотите, чтобы они пошли
-
создайте таблицу пользователей в пункте назначения
CREATE USERS ...
используя ту же схемуCREATE TABLE users ( name string, ... ) PARTITIONED BY (...) STORED AS PARQUET;
-
теперь переместите паркет файлы в соответствующей папке (при необходимости узнайте о расположении только что созданной таблицы)
hdfs dfs -ls /apps/hive/warehouse/users/ hdfs dfs -copyFromLocal ../temp/* /apps/hive/warehouse/
для каждого раздела вам нужно указать 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 импортирует данные без каких-либо ошибок в виде таблицы, доступной сейчас
спасибо
Кумар