文档首页 > > 开发指南> HBase应用开发> 开发程序> 写MOB表

写MOB表

分享
更新时间: 2020/01/11 GMT+08:00

功能简介

HBase MOB数据的写入与普通HBase数据的写入没有什么区别,对客户来说是透明的。为了使用HBase MOB功能需要在“hbase-site.xml”中添加HBase MOB相关的配置项,具体请参见https://hbase.apache.org/book.html#hbase_mob,除此之外还需要在指定column family上开启MOB功能,样例代码如下:

代码样例

以下代码片段在com.huawei.bigdata.hbase.examples包的“HBaseExample”类的testCreateMOBTable方法中

MRS 2.0.0及其以后版本使用以下代码创建MOB表:
public void testCreateMOBTable() {
    LOG.info("Entering testCreateMOBTable.");

    Admin admin = null;
    try {
        // Create Admin instance
        admin = conn.getAdmin();
        byte [] fam = Bytes.toBytes("mobcf");
        ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder(fam)
             // Open mob function        
             .setMobEnabled(true)
             // Set mob threshold        
             .setMobThreshold(10L)        
             .build();
        TableDescriptor tabDescriptor = TableDescriptorBuilder.newBuilder(tableName)
            .setColumnFamily(columnFamilyDescriptor)        
            .build();
        admin.createTable(tabDescriptor);
        LOG.info("MOB Table is created successfully.");
    } catch (Exception e) {
        LOG.error("MOB Table is created failed ", e);
    } finally {
        if (admin != null) {
            try {
                // Close the Admin object.
                admin.close();
            } catch (IOException e) {
                LOG.error("Close admin failed ", e);
            }
        }
    }
    LOG.info("Exiting testCreateMOBTable.");
}
MRS 2.0.0之前版本使用以下代码创建MOB表:
public void testCreateMOBTable() {
    LOG.info("Entering testCreateMOBTable.");

    Admin admin = null;
    try {
        // Create Admin instance
        admin = conn.getAdmin();
        HTableDescriptor tabDescriptor = new HTableDescriptor(tableName);
        HColumnDescriptor mob = new HColumnDescriptor("mobcf");
        // Open mob function
        mob.setMobEnabled(true);
        // Set mob threshold
        mob.setMobThreshold(10L);
        tabDescriptor.addFamily(mob);
        admin.createTable(tabDescriptor);
        LOG.info("MOB Table is created successfully.");

    } catch (Exception e) {
        LOG.error("MOB Table is created failed ", e);
    } finally {
        if (admin != null) {
            try {
                // Close the Admin object.
                admin.close();
            } catch (IOException e) {
                LOG.error("Close admin failed ", e);
            }
        }
    }
    LOG.info("Exiting testCreateMOBTable.");
}

样例:用Put接口写入MOB数据

以下代码片段在com.bigdata.hbase.examples包的“HBaseExample”类的testMOBDataInsertion方法中

public void testMOBDataInsertion() {
    LOG.info("Entering testMOBDataInsertion.");

    Table table = null;
    try {
        // set row name to "row"
        Put p = new Put(Bytes.toBytes("row"));
        byte[] value = new byte[1000];
        // set the column value of column family mobcf with the value of "cf1"
        p.addColumn(Bytes.toBytes("mobcf"), Bytes.toBytes("cf1"), value);
        // get the table object represent table tableName
        table = conn.getTable(tableName);
        // put data
        table.put(p);
        LOG.info("MOB data inserted successfully.");

    } catch (Exception e) {
        LOG.error("MOB data inserted failed ", e);
    } finally {
        if (table != null) {
            try {
                table.close();
            } catch (Exception e1) {
                LOG.error("Close table failed ", e1);
            }
        }
    }
    LOG.info("Exiting testMOBDataInsertion.");
}

注意事项

不允许多个线程在同一时间共用同一个HTable实例。HTable是一个非线程安全类,因此,同一个HTable实例,不应该被多个线程同时使用,否则可能会带来并发问题。

分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区