1. 程式人生 > >使用spark將資料以bulkload的方式寫入Hbase時報錯

使用spark將資料以bulkload的方式寫入Hbase時報錯

Exception in thread "main" java.io.IOException: Trying to load more than 32 hfiles to one family of one region

從報錯日誌中可以很明顯看出因為Hfiles的個數超出了32預設的時32,關鍵時怎麼改的問題,我們用的是CDH在Hbase的webui頁面,沒找到類似配置,通過在網上查詢資料發現可以在程式中設定。

conf.setInt(LoadIncrementalHFiles.MAX_FILES_PER_REGION_PER_FAMILY,“你要設定的Hfile個數”)

在設定個數的時候也遇到一個坑,剛開始改成64,提示超出了64,設定成96又提示超出了96,到底設定多少才合適呢?
這要看你在臨時檔案中生成了多少Hfile檔案

result.saveAsNewAPIHadoopFile("/tmp/hbaeTest", classOf[ImmutableBytesWritable], classOf[KeyValue],
  classOf[HFileOutputFormat], conf)

val bulkLoader = new LoadIncrementalHFiles(conf)
bulkLoader.doBulkLoad(new Path("/tmp/hbaeTest"), table)

去這個目錄看一下有多少個檔案設定成多少就可以了

如果臨時檔案在HDFS上直接使用:hadoop fs -count /tmp/hbaeTest

命令就可以知道生成了多少個HFile檔案了