hbase scala 在已经存在的表中添加列簇,保证以往数据正常的情况下,添加新的列簇?

问答 小鱼a ⋅ 于 2018-07-06 15:12:24 ⋅ 最后回复由 小鱼a 2018-07-06 17:23:51 ⋅ 3218 阅读

以下代码不能实现我的需求,删除了我以往的所有列簇包括数据,然后添加新的。
只需要添加新的列簇,以往数据保证不动。青牛老师,救急求方案 T T

// 得到hbase的连接,主要是和zk发起连接请求
val connection = ConnectionFactory.createConnection(hbaseConf)
// 得到hbase的管理对象
val admin = connection.getAdmin
// 得到表描述
val htc = new HTableDescriptor(userTable)
// 得到表操作
val tablex = connection.getTable(userTable).asInstanceOf[HTable]
val it = valuemap.keySet().iterator()
while (it.hasNext) {
val key = it.next().asInstanceOf[String]
val keyvalue = valuemap.get(key).asInstanceOf[String]
//判断列簇是否存在
if (!booleanUtil.columnFamilyExists(tablex, key)) {
admin.disableTable(userTable)
val hcd1 = new HColumnDescriptor(Bytes.toBytes(key))
//表增加family信息
htc.addFamily(hcd1)
admin.modifyTable(userTable, htc)
admin.enableTable(userTable)
}
}
try {
if (admin != null) {
admin.close()
}
if (tablex != null) {
tablex.close()
}
if (connection != null) {
connection.close()
}

成为第一个点赞的人吧 :bowtie:
回复数量: 3
  • 青牛 海汼部落创始人,80后程序员一枚,曾就职于金山,喜欢倒腾技术做产品
    2018-07-06 16:55:44

    报啥错?

  • 小鱼a
    2018-07-06 16:59:07

    不报错,会删掉我的列簇,admin.modifyTable(userTable, htc)感觉这个没用好

  • 小鱼a
    2018-07-06 17:23:51

    我解决啦,贴出来分享一下,推理出来的0^0
    admin.disableTable(userTable)
    val hcd1 = new HColumnDescriptor(Bytes.toBytes(key))
    //表增加family信息
    admin.addColumn(userTable,hcd1)
    //实际上是删除了原有表的所有列簇,然后添加
    admin.enableTable(userTable)

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter