2014-06-06 5 views
4

sqoop 1.4.2 버전을 사용하고 있습니다. sqoop 메타 스토어를 기본 hsqldb에서 mysql로 ​​변경하려고합니다.sqoop 메타 스토어를 변경하는 방법은 무엇입니까?

다음 속성을 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> 

meta-connect 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 이외의 메타 스토어를 지원합니까?

좋습니다.

답변

4

답변은 예입니다. 제 경우에는 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 확장 DB 구현.

+1

mysql에서는 작동하지 않습니다. sqoop가 가져 오기를 증가시킬 때 마지막 값을 업데이트하지 못했습니다. – yanyu

+0

나를 위해 일했습니다. 구성된 사용자에 대해 데이터베이스와 테이블을 모두 부여해야합니다. 클라이언트 구성은 http://rustymartin-solutions.blogspot.it/2015/04/sqoop-mysql-metastore-configuration-on.html을 참조하십시오. –

+0

심각한 문제에 대해서는 아래 답변을 참조하십시오 ... –

3

Sqoop metastore는 다른 hsqldb 데이터베이스를 지원하지 않습니다. 링크에서 2 포인트의 노트. cloudera

1

공공 서비스 발표 : 다른 데시벨에 Sqoop을 메타 스토어는 HyperSQL 데이터베이스를 대체, 우리는 PostgreSQL의와 MySQL이 Sqoop을 하나의 Sqoop을 메타 스토어에 대한 대상으로 작업을 진행 할 수 있었다

실패 할 수 있습니다. 약간의 셋업과 데이터베이스의 시딩이 필요하지만, 그때부터는 괜찮아 보입니다.

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

해결책이 있는지 확실하지 않지만, 이것은 @ SandeerKumar의 대답을 확장 한 것입니다. 이것은 HyperSQL에서도 문제가 될 수 있지만, HSQL이 메모리에 있기 때문에 훨씬 빠를 것입니다.