Sqoop2 - 如何在导入时集成自定义预处理/后处理代码(例如加密)



我在Hadoop中使用了Sqoop 1,在将Sqoop从关系数据库导入到HDFS时集成了自定义预处理代码。 基本上,我使用 codegen 命令创建了对象关系映射类,然后修改了该类源代码以嵌入我的自定义预处理代码。 通过这种方法,我能够修改 readFields() 方法以处理字段值(在本例中,通过加密敏感字段(,从 JDBC 结果集中读取字段时以及在对象实例中设置字段之前。

然后,我在执行 Sqoop 导入操作时使用了这个修改后的 ORM 类文件。 最终结果是,我数据中的某些字段在写入HDFS之前被我的自定义代码加密。

例如,修改后的ORM类:

public class Customer extends SqoopRecord  implements DBWritable, Writable {
...
  public void readFields(ResultSet __dbResults) throws SQLException {
    this.__cur_result_set = __dbResults;
    this.id = JdbcWritableBridge.readInteger(1, __dbResults);
    this.last_name = JdbcWritableBridge.readString(2, __dbResults);
    this.first_name = JdbcWritableBridge.readString(3, __dbResults);
    # encrypt cc (credit card) field, before setting value in object
    this.cc = encrypt(JdbcWritableBridge.readString(4, __dbResults));
  }
...
}

此方法在 Sqoop 1 中工作正常。

但是我没有看到任何方法可以在 Sqoop 2 中集成这种自定义预处理代码。 Sqoop2 中没有codegen选项。是否有可以在 Sqoop 2 中使用的 UDF 或其他自定义连接器方法,以便在 Sqoop 导入作业期间处理字段? 如果是这样,您能否指出一些示例或文档,说明它在 Sqoop 2 中是如何工作的?

Sqoop 2 没有进行任何代码生成,因此没有"codegen"工具或如何插入自己的代码的方法。我们正在考虑引入一个简单的转换阶段,在该阶段中可以实现类似的功能,但此类功能在 Sqoop 2 中尚不可用。

最新更新