Scala操作Hbase空指標異常java.lang.NullPointerException處理
阿新 • • 發佈:2018-12-09
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 =newHTableDescriptor(TableName.valueOf(tableName))
colFamily.foreach(x => descriptor.addFamily(newHColumnDescriptor(x)))
admin.createTable(descriptor)
println(tableName+"建立成功")
admin.close()}}
val colFamilyList=List("xiaoqu_info","house_info")
createTable(tableName,colFamilyList)}}