使用sqoop从oracle导入hbase时修改数据

dldeef67  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(541)

我正在尝试使用sqoop将oracle数据库中的数据传输到hbase表。我能够成功地使用javasqoop客户机做到这一点。
但是,在这种情况下,我只进行传输,并且总是使用hbase\u row\u key作为“col1,col2”。
现在我要做的是在我把数据放入hbase表之前,我要决定hbase\u row\u key,如果col2存在,它应该是“col1,col2”,如果它不存在,hbase\u row\u key应该是“col1,col3”(假设col3总是存在)。
我认为使用自定义Map器而不是默认Map器应该可以做到这一点,但我不知道如何使用sqoop。如何使sqoop在将数据插入hbase之前使用自定义Map器。
在此方面如有任何帮助,我们将不胜感激。再次感谢!。。
下面是我的java sqoop客户端代码:

import com.cloudera.sqoop.SqoopOptions;
import com.cloudera.sqoop.tool.ImportTool;

public class TestSqoopClient {

   public static void main(String[] args) throws Exception {
    SqoopOptions options = new SqoopOptions();
    options.setConnectString("my_database_connection_tring");
    options.setUsername("my_user");
    options.setPassword("my_password");
    options.setNumMappers(2);         // Default value is 4
    //options.setSqlQuery("SELECT * FROM user_logs WHERE $CONDITIONS limit 10");
    options.setTableName("my_tablename");
    options.setWhereClause("my_where_condition");
    options.setSplitByCol("my_split_column");

    // HBase options
    options.setHBaseTable("my_hbase_table_name");
    options.setHBaseColFamily("my_column_family");
    options.setCreateHBaseTable(false);    // Create HBase table, if it does not exist
    options.setHBaseRowKeyColumn("COL1,COL2");

   int ret = new ImportTool().run(options);

}

}

mwkjh3gx

mwkjh3gx1#

请看一下在中指定的扩展hbase代码http://sqoop.apache.org/docs/1.4.6/sqoopdevguide.html#_hbase_serialization_extensions 通过编写一个自定义的变压器。

相关问题