使用spark進(jìn)行hbase的bulkload
一、 背景
HBase 是一個(gè)面向列,schemaless,高吞吐,高可靠可水平擴(kuò)展的 NoSQL 數(shù)據(jù)庫(kù),用戶可以通過 HBase client 提供的 put get 等 api 實(shí)現(xiàn)在數(shù)據(jù)的實(shí)時(shí)讀寫。在過去的幾年里,HBase 有了長(zhǎng)足的發(fā)展,它在越來越多的公司里扮演者越來越重要的角色。
HBase 擅長(zhǎng)于海量數(shù)據(jù)的實(shí)時(shí)讀取,原生 HBase 沒有二級(jí)索引,復(fù)雜查詢場(chǎng)景支持的不好。同時(shí)因?yàn)?split,磁盤,網(wǎng)絡(luò)抖動(dòng),Java GC 等多方面的因素會(huì)影響其 RT 表現(xiàn),所以通常我們?cè)谑褂肏Base的同時(shí)也會(huì)使用其他的存儲(chǔ)中間件,比如 ES,Reids,Mysql 等等。避免 HBase 成為信息孤島,我們需要數(shù)據(jù)導(dǎo)入導(dǎo)出的工具在這些中間件之間做數(shù)據(jù)遷移,而最常用的莫過于阿里開源的 DataX。Datax從 其他數(shù)據(jù)源遷移數(shù)據(jù)到 HBase 實(shí)際上是走的 HBase 原生 api 接口,在少量數(shù)據(jù)的情況下沒有問題,但當(dāng)我們需要從 Hive 里,或者其他異構(gòu)存儲(chǔ)里批量導(dǎo)入幾億,幾十億的數(shù)據(jù),那么用 DataX 這里就顯得不那么適合,因?yàn)樽咴涌跒榱吮苊庥绊懮a(chǎn)集群的穩(wěn)定性一定要做好限流,那么海量數(shù)據(jù)的遷移就很很慢,同時(shí)數(shù)據(jù)的持續(xù)寫入會(huì)因?yàn)?flush,compaction 等機(jī)制占用較多的系統(tǒng)資源。為了解決批量導(dǎo)入的場(chǎng)景,Bulkload 應(yīng)運(yùn)而生。
二、HBase Bulkload
在大量數(shù)據(jù)需要寫入HBase時(shí),通常有 put方式和bulkLoad 兩種方式。
1、put方式為單條插入,在put數(shù)據(jù)時(shí)會(huì)先將數(shù)據(jù)的更新操作信息和數(shù)據(jù)信息 寫入WAL ,
在寫入到WAL后, 數(shù)據(jù)就會(huì)被放到MemStore中 ,當(dāng)MemStore滿后數(shù)據(jù)就會(huì)被 flush到磁盤
(即形成HFile文件) ,在這種寫操作過程會(huì)涉及到flush、split、compaction等操作,容易造
成節(jié)點(diǎn)不穩(wěn)定,數(shù)據(jù)導(dǎo)入慢,耗費(fèi)資源等問題,在海量數(shù)據(jù)的導(dǎo)入過程極大的消耗了系統(tǒng)
性能,避免這些問題最好的方法就是使用BulkLoad的方式來加載數(shù)據(jù)到HBase中。
2、BulkLoader利用HBase數(shù)據(jù)按照HFile格式存儲(chǔ)在HDFS的原理,使用MapReduce直接批量
生成HFile格式文件后,RegionServers再將HFile文件移動(dòng)到相應(yīng)的Region目錄下。
- Extract,異構(gòu)數(shù)據(jù)源數(shù)據(jù)導(dǎo)入到 HDFS 之上。
- Transform,通過用戶代碼,可以是 MR 或者 Spark 任務(wù)將數(shù)據(jù)轉(zhuǎn)化為 HFile。
- Load,HFile 通過 loadIncrementalHFiles 調(diào)用將 HFile 放置到 Region 對(duì)應(yīng)的 HDFS 目錄上,該過程可能涉及到文件切分。
?三、實(shí)踐
hive表
?
?hbase表
?依賴
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
|
spark 代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
|
其中可能遇到的問題:
1 |
|
解決:
主要是zk的版本不匹配,在依賴選擇匹配的zk版本。
輸出結(jié)果
文章來源:http://www.zghlxwxcb.cn/news/detail-604613.html
https://www.cnblogs.com/huangguoming/articles/12967868.html文章來源地址http://www.zghlxwxcb.cn/news/detail-604613.html
到了這里,關(guān)于使用spark進(jìn)行hbase的bulkload的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!