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

时间:2013-10-02 22:45:10

标签: hadoop sqoop

我在Hadoop中使用Sqoop 1在执行从关系数据库到HDFS的Sqoop导入时集成自定义预处理代码。基本上,我使用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中是如何运作的吗?

1 个答案:

答案 0 :(得分:0)

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