0

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

4

1 回答 1

0

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

于 2013-10-03T14:51:16.577 回答