복붙노트

[HADOOP] SQOOP에서 증분 가져 오기를 어떻게 자동화 할 수 있습니까?

HADOOP

SQOOP에서 증분 가져 오기를 어떻게 자동화 할 수 있습니까?

SQoop에서 증분 가져 오기를 자동화하는 방법은 무엇입니까?

증분 가져 오기에서는 마지막 값부터 가져 오기를 시작하려면 --last-value를 지정해야하지만 일은 RDBMS에서 자주 가져 오는 것이므로 마지막 값을 수동으로 지정하지 않으려 고합니다. 이 프로세스를 자동화 할 수 있습니까?

해결법

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

    1.@Durga Viswanath Gadiraju에 대한 또 다른 접근 방법입니다.

    @Durga Viswanath Gadiraju에 대한 또 다른 접근 방법입니다.

    데이터를 하이브 테이블로 가져 오는 경우, 하이브 테이블에서 마지막으로 업데이트 된 값을 쿼리하고이 값을 sqoop 가져 오기 쿼리에 전달할 수 있습니다. 이를 달성하기 위해 쉘 스크립트 또는 오지 동작을 사용할 수 있습니다.

    셸 스크립트 :

    lastupdatedvalue=`hive -e 'select last_value from table` #tweak the selection query based on the logic.
    
    sqoop import --connect jdbc:mysql://localhost:3306/ydb --table yloc --username root -P --incremental append --last-value ${lastupdatedvalue}
    

    Oozie 접근 방식 :

    PFB sudo 워크 플로우 :

    <workflow-app name="sqoop-to-hive" xmlns="uri:oozie:workflow:0.4">
    <start to="hiveact"/>
    <action name="hiveact">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.job.queue.name</name>
                    <value>${queueName}</value>
                </property>
            </configuration>
            <script>script.sql</script>
    <capture-output/>
        </hive>    
        <ok to="sqoopact"/>
        <error to="kill"/>
    
    <action name="sqoopact">
        <sqoop xmlns="uri:oozie:sqoop-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <command>import --connect jdbc:mysql://localhost:3306/ydb --table yloc --username root -P --incremental append --last-value ${wf:actionData('hiveact')}</command>
         </sqoop>
        <ok to="end"/>
        <error to="kill"/>
    </action>
    <kill name="kill">
        <message>Action failed</message>
    </kill>
    <end name="end"/>
    

    희망이 도움이됩니다.

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

    2.내장 Sqoop 메타 스토어를 활용할 수 있습니다.

    내장 Sqoop 메타 스토어를 활용할 수 있습니다.

    다음을 사용하여 간단한 증분 가져 오기 작업을 만들 수 있습니다. 명령:

    sqoop job \     --create <> \     - \     수입 \     - 연결 <> \     - 사용자 이름 <> \     --password <> \     - 테이블 <>     --incremental append \     - 확인 - <>     --last-value 0

    그리고 --exec 매개 변수로 시작하십시오.

    sqoop job --exec <<Job Name>>
    

    Sqoop은 마지막으로 가져온 값을 자동으로 직렬화하여 성공한 증분 작업이 끝날 때마다 전이

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

    3.이것은 sqoop 작업으로 쉽게 얻을 수 있습니다.

    이것은 sqoop 작업으로 쉽게 얻을 수 있습니다.

    1. sqoop 작업 만들기 ( "가져 오기"전에 공백이 있음)

    sqoop job     --create JobName6 \
               -- import  \
                    --connect jdbc:mysql://localhost:3306/retail_db \
                    --username=username \
                    --password-file /user/sqoop/password \
                    --table departments \
                    --target-dir /user/hive/warehouse/test.db/departments \
                    --table departments \
                    --split-by department_id \
                    --check-column department_id \
                    --incremental append \
                   --last-value 0;
    

    2. sqoop 작업을 실행하십시오. sqoop 작업 --exec JobName6; HDFS의 위치 값을 확인하십시오.

    3. 소스 테이블 (mysql)에 일부 데이터를 삽입하십시오. INSERT INTO departments VALUES (9, '새 데이터 1'), (10, '새 데이터 2');

    2. sqoop 작업을 다시 실행하십시오. sqoop 작업 --exec JobName6; HDFS에있는 위치의 값을 다시 확인하십시오.

    하이브 가져 오기와 유사하게

    sqoop job     --create JobName1 \
               -- import  \
                    --connect jdbc:mysql://localhost:3306/retail_db \
                    --username=username\
                    --password-file /user/sqoop/password \
                    --table departments \
                    --hive-import \
                    --hive-table department \
                    --split-by department_id \
                    --check-column department_id \
                    --incremental append \
                   --last-value 0; 
    
  4. ==============================

    4.그것을 얻는 한 가지 방법 :

    그것을 얻는 한 가지 방법 :

    데이터베이스에 로그 테이블을 만들고 다음과 같이 증분 가져 오기를 개발하십시오.

    Query the log table using sqoop eval command with the last value from last run
    Run the sqoop import
    Update the log table with the latest valueusing sqoop eval command
    

    sqoop eval, sqoop import 및 sqoop eval의 프로세스를 자동화해야합니다. sqoop eval을 사용하여 연결성이있는 모든 데이터베이스에 유효한 쿼리를 제출할 수 있습니다. 따라서 가져 오기 전에 선택 쿼리를 실행하여 마지막 실행에서 마지막 값을 가져오고 업데이트 쿼리를 실행하여 로그 테이블을 현재 실행의 마지막 값으로 업데이트 할 수 있습니다.

  5. from https://stackoverflow.com/questions/34771407/how-can-we-automate-incremental-import-in-sqoop by cc-by-sa and MIT license