使用spark將資料以bulkload的方式寫入Hbase時報錯
阿新 • • 發佈:2018-12-24
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檔案了