Как изменить sqoop metastore?

Я использую версию sqoop 1.4.2. Я пытаюсь изменить мета-хранилище sqoop с hsqldb по умолчанию на mysql.

Я настроил следующие свойства в файле sqoop-site.xml.

    <property>
    <name>sqoop.metastore.client.enable.autoconnect</name>
    <value>false</value>
    <description>If true, Sqoop will connect to a local metastore
      for job management when no other metastore arguments are
      provided.
    </description>
  </property>
  <property>
    <name>sqoop.metastore.client.autoconnect.url</name>
    <value>jdbc:mysql://ip:3206/sqoop?createDatabaseIfNotExist=true</value>
  </property>
  <property>
    <name>sqoop.metastore.client.autoconnect.username</name>
    <value>userName</value>
  </property>
  <property>
    <name>sqoop.metastore.client.autoconnect.password</name>
    <value>password</value>
  </property>
</configuration>

Когда я пытаюсь создать задания sqoop с мета-соединением, он не может подключиться к настроенной базе данных mysql.

sqoop job --create --meta-connect {mysql_jdbc_url} sqoop job defination

это бросает следующее исключение.

    14/06/06 15:04:54 INFO sqoop.Sqoop: Running Sqoop version: 1.4.4.2.0.6.1-101
14/06/06 15:04:55 WARN hsqldb.HsqldbJobStorage: Could not interpret as a number: null
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: Can not interpret metadata schema
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: The metadata schema version is null
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: The highest version supported is 0
14/06/06 15:04:55 ERROR hsqldb.HsqldbJobStorage: To use this version of Sqoop, you must downgrade your metadata schema.
14/06/06 15:04:55 ERROR tool.JobTool: I/O error performing job operation: java.io.IOException: Invalid metadata version.
        at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.init(HsqldbJobStorage.java:202)
        at org.apache.sqoop.metastore.hsqldb.HsqldbJobStorage.open(HsqldbJobStorage.java:161)
        at org.apache.sqoop.tool.JobTool.run(JobTool.java:274)
        at org.apache.sqoop.Sqoop.run(Sqoop.java:147)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)
        at org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:222)
        at org.apache.sqoop.Sqoop.runTool(Sqoop.java:231)
        at org.apache.sqoop.Sqoop.main(Sqoop.java:240)

Поддерживает ли sqoop 1.4.2 metastore, отличное от hsql db?

Пожалуйста, предложите.

3 ответа

Решение

Ответ Да, в моем случае я использую PostgreSQL. Я столкнулся с этим недавно, и я использую версию 1.4.4. Я не уверен, что то, что я сделал, является рекомендуемым способом, но это работает. Вот шаги, за которыми я следовал

  1. В sqoop-site.xml я настроил его, строку подключения к моей базе данных, имя пользователя и пароль.

  2. Создал следующий объект в базе данных, так как Sqoop терпел неудачу в этом.

    CREATE TABLE SQOOP_ROOT ( version INT, propname VARCHAR(128) NOT NULL, propval VARCHAR(256), CONSTRAINT SQOOP_ROOT_unq UNIQUE (version, propname) );

  3. Вставлена ​​следующая строка (кажется, это причина того, что ваш скрипт не работает)

    INSERT INTO SQOOP_ROOT VALUES( NULL, 'sqoop.hsqldb.job.storage.version', '0' );

Я думаю, что правильный путь может быть скачать исходный код и расширить org.apache.sqoop.metastore.JobStorage с вами реализация БД.

Sqoop metastore не поддерживает другие базы данных, кроме hsqldb. Номер 2 точки заметки по ссылке. Cloudera

Объявление публичной службы: Sqoop Metastore на других БД может дать сбой

Мы смогли заставить PostgreSQL и MySQL работать как цели для Sqoop Metastore на Sqoop 1, заменив базу данных HyperSQL. Нужна небольшая настройка и заполнение базы данных, но с тех пор это казалось нормальным.

Однако мы наблюдаем случаи, когда мы выполняем много заданий sqoop, одновременно обновляя метасторское хранилище - sqoop 1.4.6 не имеет кода для перехвата и обработки случаев, когда обновления метастазов для инкрементных обновлений не выполняются из-за проблем параллелизма. В частности, Sqoop _ успешно завершит импорт, но не обновит метастор с последними импортированными значениями. Это приведет к тому, что при следующем инкрементном запуске будут импортированы повторяющиеся данные. Sqoop вернет ненулевой код возврата, но данные в Hadoop или в метастазах должны быть впоследствии синхронизированы, чтобы данные были правильными.

Мы не уверены, что есть решение, но это расширение ответа @SandeerKumar. Это может быть проблемой и с HyperSQL, но гораздо менее вероятно, потому что HSQL находится в памяти, поэтому быстрее.

Другие вопросы по тегам