リレーショナル データベースから 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 に統合する方法は見当たりませんcodegen
。Sqoop2 にはオプションがありません。Sqoop インポート ジョブ中にフィールドを処理するために、Sqoop 2 で使用できる UDF またはその他のカスタム コネクタ アプローチはありますか? もしそうなら、それが Sqoop 2 でどのように機能するかを示すいくつかの例またはドキュメントを教えてもらえますか?