복붙노트

[HADOOP] sqoop 메타 스토어를 바꾸는 방법?

HADOOP

sqoop 메타 스토어를 바꾸는 방법?

sqoop 1.4.2 버전을 사용하고 있습니다. sqoop metastore를 기본 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>

메타 연결 URL로 sqoop 작업을 만들려고하면 구성된 mysql db에 연결하지 못합니다.

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는 hsql db가 아닌 metastore를 지원합니까?

제발 제안해라.

해결법

  1. ==============================

    1.대답은 예입니다. 제 경우에는 PostgreSQL을 사용하고 있습니다. 최근에이 문제가 발생하여 버전 1.4.4를 사용 중입니다. 내가 한 일이 권장 방법인지는 확실하지 않지만 작동합니다. 내가 따라야 할 단계는 다음과 같다.

    대답은 예입니다. 제 경우에는 PostgreSQL을 사용하고 있습니다. 최근에이 문제가 발생하여 버전 1.4.4를 사용 중입니다. 내가 한 일이 권장 방법인지는 확실하지 않지만 작동합니다. 내가 따라야 할 단계는 다음과 같다.

    올바른 방법은 소스를 다운로드하고 확장하는 것입니다. DB 구현과 함께 org.apache.sqoop.metastore.JobStorage.

  2. ==============================

    2.Sqoop 메타 스토어는 다른 hsqldb 데이터베이스를 지원하지 않습니다. 링크상의 노트의 2 포인트. 클로 데라

    Sqoop 메타 스토어는 다른 hsqldb 데이터베이스를 지원하지 않습니다. 링크상의 노트의 2 포인트. 클로 데라

  3. ==============================

    3.공공 서비스 발표 : 다른 DB의 Sqoop Metastore가 실패 할 수 있습니다

    공공 서비스 발표 : 다른 DB의 Sqoop Metastore가 실패 할 수 있습니다

    우리는 PostgreSQL과 MySQL을 Sqoop 1의 Sqoop Metastore의 타겟으로 HyperSQL 데이터베이스를 대체 할 수있게 만들었습니다. 약간의 셋업과 데이터베이스의 시딩이 필요하지만, 그때부터는 괜찮아 보입니다.

    그러나 많은 sqoop 작업을 실행할 때 동시에 메타 스토어를 업데이트하는 경우가 있습니다. sqoop 1.4.6에는 병행 성 문제로 인해 증분 업데이트의 메타 스토어 업데이트가 실패하는 경우를 잡아서 처리하는 코드가 없습니다. 특히 Sqoop _은 가져 오기를 완료하지만 가장 최근에 가져온 값으로 메타 스토어를 업데이트하지 않습니다. 그러면 다음 증분 실행에서 중복 데이터를 가져옵니다. Sqoop은 0이 아닌 반환 코드를 반환하지만 데이터가 올바르도록 나중에 Hadoop 또는 metastore의 데이터를 동기화해야합니다.

    우리는 해결책이 있는지 확신하지 못합니다. 그러나 이것은 @ SandeerKumar의 대답의 확장입니다. 이것은 HyperSQL에서도 문제가 될 수 있지만, HSQL이 메모리에 있기 때문에 훨씬 빠를 것입니다.

  4. from https://stackoverflow.com/questions/24078668/how-to-change-sqoop-metastore by cc-by-sa and MIT license