Таблица улья исчезла

Я импортировал данные из MySQL в Hive с помощью команды Sqoop. sqoop import --connect jdbc:mysql://mysql_server/db1 --username userid --password passwd --query 'select col1, col2, sum(col3), sum(col4), sum(col5), sum(col6) from table1 WHERE $CONDITIONS group by col1, col2' --split-by col1 --hive-import --hive-home /root/dev/hive-0.11.0 --create-hive-table --hive-table hive_table1 --target-dir imported_data. Данные успешно импортированы, и я также смог запросить импортированную таблицу. Но на следующий день, когда я подключился к улью и сделал показ таблиц, он ничего не вернул. В Hive есть только одна база данных, так что никакой путаницы здесь быть не может. Меня беспокоит, случайно ли, что внутренние таблицы удаляются, когда я отключаюсь от Hive? В любом случае, импортированные данные должны находиться только в Hive, а не в HDFS?


person Nayan    schedule 21.03.2014    source источник


Ответы (2)


Я наконец решил проблему. Это будет включать два шага.

  1. Создайте внешнюю таблицу куста.
  2. Импорт данных с помощью Sqoop.

Создание внешней таблицы: внешние таблицы в улье являются своего рода постоянными таблицами и остаются там, даже если куст остановлен или сервер выходит из строя. Ключевое слово EXTERNAL используется для указания типа таблицы.

CREATE EXTERNAL TABLE IF NOT EXISTS HIVEDB.HIVE_TABLE1 (DATE_COL DATE, 
BIG_INT_COL BIGINT, INT_COL INT, VARCHAR_COL VARCHAR(221), FLOAT_COL FLOAT);

Импорт данных с помощью Sqoop: укажите имя созданной таблицы при импорте данных вместо использования параметра «--hive-create».

sqoop import --connect jdbc:mysql://mysqlhost/mysqldb --username user --password 
passwd --query "SELECT table1.date_col, table1.big_int_col, table1.int_col, 
table1.varchar_col, table1.float_col FROM MYSQL_TABLE1 AS table1 WHERE 
\$CONDITIONS" --split-by table1.date_col --hive-import 
--hive-table hivedb.hive_table1 --target-dir hive_table1_data`

Данные постоянно хранились в Hive.

person Nayan    schedule 10.04.2014

Только некоторые уточнения здесь:

  1. Таблицы, созданные в улье, всегда хранятся внутри HDFS. В противном случае какой смысл использовать Hive вместо традиционной СУБД.
  2. ВНЕШНЕЕ ключевое слово имеет совсем другое значение. Это означает, что данные таблиц не хранятся в компетенции Hive. Это полезно, если таблица, которую вы хотите создать, уже присутствует в HDFS. Таким образом, вместо создания копии таблицы вы можете указать путь HDFS, который действует как источник данных для таблицы.

Кроме того, предполагая, что у вас есть настройки по умолчанию для улья, довольно часто можно увидеть исчезновение таблиц. Обычно это вызвано тем, что база данных derby в конфигурации по умолчанию хранила метаданные таблиц в каталоге, из которого был вызван куст. Вот простое решение: Hive не показывает таблицы

Лучшим решением является https://cwiki.apache.org/confluence/display/Hive/HiveDerbyServerMode

person Himanshu Gautam    schedule 04.03.2015