增量导入
当MySQL表中的数据发生了新增或修改变化,需要更新HDFS上对应的数据时,就可以使用Sqoop的增量导入功能。Sqoop目前支持两种增量导入模式:append模式和lastmodified模式。其中,append模式主要针对INSERT新增数据的增量导入;lastmodified模式主要针对UPDATE修改数据的增量导入。
在进行增量导入操作时,首先必须指定“--check-column”参数,用来检查数据表列字段,从而确定哪些数据需要执行增量导入。例如,在执行append模式增量导入时,通常会将“--check-column”参数指定为具有连续自增功能的列(如主键id);而执行lastmodified模式增量导入时,通常会将“--check-column”参数必须指定为日期时间类型的列(如date或timestamp类型的列)。
同时,还可以为增量导入操作指定“--last-value”参数,用于只增量导入last-value值以后的记录数据,然后存储到之前HDFS上相应目录下的一个单独文件中。否则,会导入原表中所有数据到HDFS上相应目录下的一个单独文件中。
为了演示增量导入操作,首先向emp表添加新数据,指令如下所示。
INSERT INTO `emp` VALUES ('1206', 'itcast', 'java dev', '50000', 'AC');
接下来,就针对emp表数据的新增变化执行append模式的增量导入,具体指令示例如下。
$ sqoop import \
--connect jdbc:mysql://hadoop01:3306/userdb \
--username root \
--password 123456 \
--target-dir /sqoopresult \
--table emp \
--num-mappers 1 \
**--incremental append** \
**--check-column id** \
**--last-value 1205
上述增量导入的操作指令与10.4.1小节所示的指令基本相同,为了实现增量导入功能,新添加了三个参数。其中,“--incremental append”指定了使用增量导入的模式为append;“--check-column id”指定了针对表emp数据的id主键进行检查;“--last-value 1205”指定了针对id值为1205以后的数据执行增量导入。
执行上述指令后,从HDFS UI界面查看增量导入结果,如图1所示。
图1 增量导入结果文件
从图1可以看出,增量导入的数据在指定的目标目录下创建了一个新的结果文件part-m-00001,可以使用hadoop fs -cat命令查看数据,如图2所示。
图2 增量导入结果文件内容
从图2可以看出,当设置了“--last-value 1205”参数后,增量导入的新结果文件只会把指定值后的数据添加到结果文件中。
这里只演示了开发中常用的append模式的增量导入操作,读者也可以根据说明进行另一种lastmodified模式增量导入的操作。但需要注意的是,必须保证lastmodified模式增量导入的数据具有日期时间类型的列字段。