Hbase(一) 簡介
ü Key-Value 存儲: Amazon Dynamo, Voldemort, BDB, Kyoto Cabinet
ü Key 結構化數據存儲:Redis
ü 類BigTable 存儲: Google BigTable, Apache HBase, Apache Cassandra
ü 文檔數據庫: MongoDB, CouchDB
ü 全文索引: Apache Lucene, Apache Solr
ü 圖數據庫: neo4j, HyperGraphDB, FlockDB
HBase概念源自Google BigTable http://static.googleusercontent.com/media/research.google.com/zh-CN//archive/bigtable-osdi06.pdf
Hbase以列族作為邏輯單位,物理上,也是以列族為單位存在HFile中。
不會被存儲,所以不會有消耗。
(Table, RowKey, Family, Column, Timestamp) → Value
用java來描述就類似為:
SortedMap
>>>
Hbase負載均衡的單元是Region,就是以row key 排序的連續存儲空間。類似Oracle的范圍分區。Region不斷增長,到閾值后會自動分區,一分為二。
物理上,Region 由 Region Server加載,每個Server加載多個Region
RPC協議支持:Protocol Buffer、Thrift、Avro
REST客戶端支持,適合請求少但數據量大的場景。高吞吐量的場景中,適合二進制協議
REST客戶端:http://wiki.apache.org/hadoop/Hbase/Stargate
Thrift客戶端:http://wiki.apache.org/hadoop/Hbase/ThriftApi
Avro客戶端:https://hbase.apache.org/0.94/apidocs/org/apache/hadoop/hbase/avro/package-summary.html
HBql:Hbase基礎上的SQL語法 http://www.hbql.com/
Hbase-DSL:格式化查詢輔助 https://github.com/altamiracorp/hbase-dsl
JPA/JPO:使用DataNucleus在Hbase封裝 http://www.datanucleus.org/
PyHbase:與Avro網關服務通信 https://github.com/hammer/pyhbase
AsyncHBase:異步、非阻塞、線程安全 https://github.com/StumbleUponArchive/asynchbase
Hbase Shell:最常用的API,使用JRuby格式
Java API:Java原生API
MapReduce:MapReduce Java API 和 Clojure的 Hbase-Runner項目
Hive:HiveQL支持 https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration
Pig:Pig Latin支持
Cascading:MapReduce的替代API
Web UI:Hbase的 Web UI可以查看狀態,也可以修改少量的狀態
Hbase支持單行事務,對單個行健下的存儲數據支持原子的“讀-改-寫”序列
Hbase單元格也可以當做計數器使用,并支持原子更新
Hbase 每次更新數據時,先將數據寫入WAL(write-ahead log)中,然后寫入內存中的memstore。
Memstore中的數據已經按照行健排序,超過最大值Flush到HFile中也是按照這個順序存貯的。WAL是Hbase保證一致性和故障恢復的手段。
Hbase存儲架構來源自LSM樹。HFile通常保存在HDFS中,寫入就不可修改。這個機制會刷出很多小文件,所以通過minor compaction合并同列族的多個文件為一個大文件。這是一個多路歸并的過程,因為已經是排序好的,所以非常快,IO消耗也較低。Major compaction會順序重寫數據,過程中與minor不同的是,會掃描出刪除的“墓碑標記”,把標記刪除的數據真正刪除。
Master dual quad-core CPUs, 2.0-2.5 GHz
Slave dual quad-core CPUs, 2.0-2.5 GHz
NameNode計算方式:每100TB數據或每100萬個文件大約占用堆1GB左右
SecondaryNameNode:同NameNode
DataNode:一般1G夠用
Hbase Master:輕量級負載,一般4G夠用
Hbase Region Server:內存負載重,一般設為12G,最大不超過16G,不然FGC時間會長,可能會使Master誤判RS假死
ZooKeeper:一般1G
Master一般采用RAID10
Salve一般采用JBOD(Just a Bunch Of Disks,磁盤簇),有米上RAID更好
SATA磁盤就可以滿足,SAS更好
按數據規模估算,一般的選擇是千兆網卡,并保證交換機有足夠的吞吐能力。
一般數據量*2配置網絡,因為網絡通常達不到理論標準
ü 下載HBASE:http://www.apache.org/dyn/closer.cgi/hbase/
ü 安裝JAVA,并設置JAVA_HOME
ü 安裝Hadoop,選擇HDFS作為底層文件系統,全部jar要配置到Hbase的java.library.path
ü 配置SSH和域名等輔助配置(可選)
ü 調低/etc/sysctl.conf 的vm.swappiness配置,降低SWAP使用優先級(可選)
ü NTP同步時間,服務器間不能有太大的時間偏差
ü 文件句柄設置,評估每個列族至少1個文件,一般按5個評估。也可以壓力測試后,查看一個region server的句柄數lsof -p
| wc –l; 調整ulimit /etc/security/limits.conf 的nofile、/etc/sysctl.conf的fs.file-max
ü 編輯hadoop的hdfs-site.xml,修改dfs.datanode.max.xcievers為4096,設置DataNode可處理的文件上限數
ü 編輯conf/hbase-site.xml,至少配置hbase.rootdir(HDFS根地址)和hbase.zookeeper.property.dataDir、hbase.cluster.distributed、hbase.zookeeper.quorum
ü 編輯conf/hbase-env.sh,配置java堆等選項
ü 編輯conf/ regionservers 每行一個RS主機名(基于域名配置)
ü 編輯 conf/log4j.properties配置日志級別
ü 啟動bin/start-hbase.sh
ü 交互bin/hbase shell,進入shell后輸入status命令可以查看server運行狀態,或使用Web UI,默認端口master 60010、RS 60030
ü 關閉bin/stop-hbase.sh
一般默認的文件系統為HDFS,但是不僅僅支持HDFS。
通過設置URI,通過URI標識符中的scheme,即第一個冒號前的部分,標識了使用的磁盤。
本地文件:file:///
HDFS:hdfs://
:
/
S3:s3://
(基于塊) s3n://
(原生模式,不超過5G)
單機模式:是默認模式,使用本地文件系統,ZK和HBASE運行在一個JVM中
偽分布式:一個主機,多個進程的模擬分布式,基于HDFS文件系統
分布式:conf/hbase-site.xml的屬性hbase.cluster.distributed為true,基于HDFS,可選內部或外部的ZK,配置RS;保持各個server的配置同步,可以人工、腳本方式,基于云的部署可以考慮Apache Whirr、Puppet或Chef
轉載請注明出處:華為云博客 https://portal.hwclouds.com/blogs
hbase
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。