sqoop定时增量抽取数据到hive

1、  第一次全量抽取,并创建hive表

#keberos认证

kinit -kt hdfs.keytab hdfs

#从oracle导数据到hive

sqoop import --connectjdbc:oracle:thin:@xx.xx.xx.xx:1521:xx\

            --username xxx--password xxx\

            --table PROD_FDC.EQUIPMENT\

            --target-dir=/user/hive/warehouse/fdc_test.db/equipment\

            --hive-import --hive-database xx--hive-table xx\

            --create-hive-table

在使用时,只需要替换源数据库IP,用户名和密码,以及hive目标表的目录,数据库和表名

2、  创建增量抽取的job

sqoop job --create fdc_equipment_job \

         -- import --connect jdbc:oracle:thin:@xx.xx.xx.xx:1521:xx \

                    --username xxx--password xxx\

                    --table PROD_FDC.EQUIPMENT  \

                    --target-dir=/user/hive/warehouse/fdc_test.db/equipment \

                    --hive-import --hive-database fdc_test --hive-table equipment \

                    --incremental append \

                    --check-column equipmentid --last-value 1893

说明:增量抽取,需要指定--incremental append,同时指定按照源表中哪个pk字段进行增量--check-column equipmentid,并指定hive表中pk当前最大值--last-value 1893。创建sqoop job的目的是,每次执行job以后,sqoop会自动记录pk的last-value,下次再执行时,就会自动指定last-value,不需要手工去改了。

3、  执行sqoop job

sqoop job --exec fdc_equipment_job

如果创建的job有问题,可以删除再重新创建:

sqoop job --delete fdc_equipment_job

4、  定时执行sqoop job

首先创建一个.sh的程序,然后通过crontab –e,创建定时执行程序 

crontab -e

30 0 * * 1 /home/root/fdc/equipment_sqoop.sh >> /home/root/fdc/equipment.log 2>&1

可能存在的问题:

1)  有些源库的表,没有自增序列pk,也没有日期字段,这种情况sqoop没法自动判断哪些是增量数据,无法配置增量程序,还要再研究一下这种情况如何处理;

2)  在服务器上的定时作业,如果kerberos 过期了,估计会无法执行,需要在服务器重新认证



你可能感兴趣的:(sqoop)