我在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中是如何运作的吗?
答案 0 :(得分:0)
Sqoop 2没有进行任何代码生成,因此没有“codegen”工具或如何插入自己的代码。我们正在考虑引入一个可以实现类似功能的简单转换阶段,但Sqoop 2中尚未提供此类设施。