Таблицата на кошера изчезна

Импортирах данните от 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 вместо традиционните RDBMS в противен случай.
  2. Ключовата дума EXTERNAL има много различно значение. Това означава, че данните от таблиците не се съхраняват под обхвата на Hive. Това е полезно, ако таблицата, която искате да създадете, вече присъства в HDFS. Така че вместо да създавате копие на таблицата, можете да посочите HDFS път, който действа като източник на данни за таблицата.

Също така ако приемем, че имате настройки по подразбиране за кошер, доста често се вижда как таблиците изчезват. Обикновено се причинява, защото базата данни derby в конфигурация по подразбиране съхранява метаданните на таблиците в директорията, от която е извикан кошерът. Ето едно просто решение: Hive не показва таблици

По-добро решение е https://cwiki.apache.org/confluence/display/Hive/HiveDerbyServerMode

person Himanshu Gautam    schedule 04.03.2015