Я импортировал данные из 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?
Таблица улья исчезла
Ответы (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.
Только некоторые уточнения здесь:
- Таблицы, созданные в улье, всегда хранятся внутри HDFS. В противном случае какой смысл использовать Hive вместо традиционной СУБД.
- ВНЕШНЕЕ ключевое слово имеет совсем другое значение. Это означает, что данные таблиц не хранятся в компетенции Hive. Это полезно, если таблица, которую вы хотите создать, уже присутствует в HDFS. Таким образом, вместо создания копии таблицы вы можете указать путь HDFS, который действует как источник данных для таблицы.
Кроме того, предполагая, что у вас есть настройки по умолчанию для улья, довольно часто можно увидеть исчезновение таблиц. Обычно это вызвано тем, что база данных derby в конфигурации по умолчанию хранила метаданные таблиц в каталоге, из которого был вызван куст. Вот простое решение: Hive не показывает таблицы
Лучшим решением является https://cwiki.apache.org/confluence/display/Hive/HiveDerbyServerMode