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) } }