Scala操作Hbase空指针异常java.lang.NullPointerException处理

Hbase版本:Hortonworks Hbase  1.1.2

问题描述:

使用Scala操作Hbase时,发生空指针异常(java.lang.RuntimeException: java.lang.NullPointerException),异常如下:


问题分析:

该异常为客户端去zookeeper获取Hbase相关信息时,没有找到,抛出空指针异常

问题原因:

不同发行商的hbase的在zookeeper的znode设置不同

Hortonworks的hbase在zookeeper中znode路径为/hbase-unsecure


查看该路径下hbase的相关信息


解决办法:

我使用的是Hortonworks的Hbase,所以要在Hbase的conf中添加如下配置信息

conf.set("zookeeper.znode.parent", "/hbase-unsecure")

如果是Cloudera的Hbase,添加配置信息如下:

conf.set("zookeeper.znode.parent", "/hbase")

添加后,重新执行程序,Hbase表创建成功,问题解决



整个Hbase测试代码如下:

object HbaseTest {
  def main(args: Array[String]): Unit = {
    val conf = HBaseConfiguration.create()
    conf.set("hbase.zookeeper.quorum", "192.168.1.45,192.168.1.46,192.168.1.47")
    conf.set("hbase.zookeeper.property.clientPort", "2181")
    conf.set("zookeeper.znode.parent", "/hbase-unsecure")   //新增znode配置
    conf.set("hbase.master", "192.168.1.47:16000")
    val connection = ConnectionFactory.createConnection(conf)
    val tableName = "house_info"
    val admin = connection.getAdmin

    def createTable(tableName: String, colFamily: List[String]): Unit = {
      if(admin.tableExists(TableName.valueOf(tableName))){
        println(tableName+"已存在!")
      }else
      {
        val descriptor = new HTableDescriptor(TableName.valueOf(tableName))
        colFamily.foreach(x => descriptor.addFamily(new HColumnDescriptor(x)))
        admin.createTable(descriptor)
        println(tableName+"创建成功")
        admin.close()
      }
    }
    val colFamilyList=List("xiaoqu_info", "house_info")
    createTable(tableName,colFamilyList)
  }
}

亲,点个赞呗

赫墨拉

我是一个喜爱大数据的小菜鸡,这里是我分享我的成长和经历的博客

You may also like...

发表评论

邮箱地址不会被公开。