Ubuntu下HBase資料庫的安裝和配置檔案詳解
1.從http://www.apache.org/dyn/closer.cgi/hbase/下載穩定版安裝包,我下的是hbase-1.2.6-bin.tar.gz
2.解壓放在/usr/local的目錄下
3.修改許可權
sudo chown -R luanpeng hbase-1.2.6/
4.修改資料夾的名稱為hbase
5.在~/.bashrc下新增,之後source一下
export PATH=$PATH:/usr/local/hbase/bin
或者在 /etc/profile中新增
export HBASE_HOME=/usr/local/hbase
export PATH=${HBASE_HOME}/bin:$PATH
6.修改資料夾的許可權
cd /usr/local
sudo chown -R luanpeng ./hbase
7.測試一下是否安裝成功
hbase version
單機版hbase配置
配置/usr/local/hbase/conf/hbase-env.sh 。
配置Java環境變數,並新增配置HBASE_MANAGES_ZK為true,用vi命令開啟並編輯hbase-env.sh,命令如下
HBASE_MANAGES_ZK為true的時候使用的Hbase自帶的zookeeper,使用jps來檢視的時候程序的名字前面都是帶h的,比如:HRegionServer、HQuorumPeer、HMaster
vi /usr/local/hbase/conf/hbase-env.sh
export JAVA_HOME=/usr/lib/java8/jdk1.8.0_65
export HBASE_MANAGES_ZK=true
配置/usr/local/hbase/conf/hbase-site.xml。
在啟動HBase前需要設定屬性hbase.rootdir,用於指定HBase資料的儲存位置,因為如果不設定的話,hbase.rootdir預設為/tmp/hbase-${user.name},這意味著每次重啟系統都會丟失資料。
<configuration>
<property>
<name>hbase.rootdir</name>
<value>/usr/local/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/usr/local/hbase/zookeeper</value>
</property>
</configuration>
單機版hbase測試
接下來測試執行。首先切換目錄至HBase安裝目錄/usr/local/hbase;再啟動HBase。命令如下:
cd /usr/local/hbase
bin/start-hbase.sh
bin/hbase shell
sudo bin/start-hbase.sh用於啟動HBase
bin/hbase shell用於開啟shell命令列模式,使用者可以通過輸入shell命令操作HBase資料庫。
停止HBase執行,命令如下:
sudo bin/stop-hbase.sh
下面我們試驗一下hbase的使用,執行:
hbase(main):001:0> status
1 active master, 0 backup masters, 1 servers, 0 dead, 3.0000 average load
建立一張表
hbase(main):004:0> create 'table1','field1'
0 row(s) in 1.3430 seconds
=> Hbase::Table - table1
獲取一張表
hbase(main):005:0> t1 = get_table('table1')
0 row(s) in 0.0010 seconds
=> Hbase::Table - table1
新增一行
hbase(main):008:0> t1.put 'row1', 'field1:qualifier1', 'value1'
0 row(s) in 0.4160 seconds
讀取全部
hbase(main):009:0> t1.scan
ROW COLUMN+CELL
row1 column=field1:qualifier1, timestamp=1470621285068, value=value1
1 row(s) in 0.1000 seconds
hbase的基本語法
habse配置詳解
hbase.tmp.dir:本地檔案系統的臨時目錄,預設是java.io.tmpdir/hbase−java.io.tmpdir/hbase−{user.name};
hbase.rootdir:hbase持久化的目錄,被所有regionserver共享,預設${hbase.tmp.dir}/hbase,一般設定為hdfs://namenode.example.org:9000/hbase類似,帶全限定名;
hbase.cluster.distributed:hbase叢集模式運作與否的標誌,預設是false,開啟需要設定為true,false時啟動hbase會在一個jvm中執行hbase和zk;
hbase.zookeeper.quorum:重要的也是必須設定的,啟動zk的伺服器列表,逗號分隔,cluster模式下必須設定,預設是localhost,hbase客戶端也需要設定這個值去訪問zk;
hbase.local.dir:本地檔案系統被用在本地儲存的目錄,預設${hbase.tmp.dir}/local/;
hbase.master.port:hbase master繫結的埠,預設是60000;
hbase.master.info.port:hbase master web 介面的埠,預設是60010,設定為-1可以禁用ui;
hbase.master.info.bindAddress:master web介面的繫結地址,預設是0.0.0.0;
hbase.master.logcleaner.plugins:清理日誌的外掛列表,逗號分隔,被LogService呼叫的LogCleanerDelegate,可以自定義,順序執行,清理WAL和HLog;預設org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner
hbase.master.logcleaner.ttl:HLog在.oldlogdir目錄中生存的最長時間,過期則被Master起執行緒回收,預設是600000;
hbase.master.hfilecleaner.plugins:HFile的清理外掛列表,逗號分隔,被HFileService呼叫,可以自定義,預設org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner
hbase.master.catalog.timeout:Catalog Janitor從master到META的超時時間,我們知道這個Janitor是定時的去META掃描表目錄,來決定回收無用的regions,預設是600000;
fail.fast.expired.active.master:如果master過期,那麼不需要從zk恢復,直接終止,預設是false;
hbase.master.dns.interface:master的dns介面,向該介面提供ip,預設是default;
hbase.master.dns.nameserver:master使用的dns主機名或者ip,預設是default;
hbase.regionserver.port:regionserver繫結的埠,預設是60020;
hbase.regionserver.info.port:regionserver的web介面埠,-1取消介面,預設是60030;
hbase.regionserver.info.bindAddress:regionserver的web繫結,預設是0.0.0.0;
hbase.regionserver.info.port.auto:master或者regionserver是否自動搜尋繫結的埠,預設是false;
hbase.regionserver.handler.count:regionserver上rpc listener的個數,把這個配置稱為io執行緒數,其實雷同,就是說在regionserver上一個處理rpc的handler,預設是30;
hbase.regionserver.msginterval:regionserver向master發訊息的間隔,預設3000毫秒;
hbase.regionserver.optionallogflushinterval:如果沒有足夠的entry觸發同步,那麼過了這個間隔後HLog將被同步到HDFS,預設是1000毫秒;
hbase.regionserver.regionSplitLimit:regionsplit的最大限額,預設是MAX_INT=2147483647,設定這個限制後,在到達限制時region split就不會再進行;
hbase.regionserver.logroll.period:不管有多少版本,直接roll掉commit log的週期,也就是說一個固定的時間週期,到期就roll,預設是3600000毫秒;
hbase.regionserver.logroll.errors.tolerated:可接受的WAL關閉錯誤個數,到達後將觸發伺服器終止;設定為0那麼在WAL writer做log rolling失敗時就停止region server,預設是2;
hbase.regionserver.hlog.reader.impl:HLog 檔案reader的實現類,預設是org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader;
hbase.regionserver.hlog.writer.impl:HLog 檔案writer的實現類,預設是org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter;
hbase.regionserver.global.memstore.upperLimit:memstore在regionserver記憶體中的上限,屆時新的update被阻塞並且flush被強制寫,預設是0.4就是堆記憶體的40%;阻塞狀態持續到regionserver的所有memstore的容量到達hbase.regionserver.global.memstore.lowerLimit;
hbase.regionserver.global.memstore.lowerLimit:memstore在regionserver記憶體中的最大上限,到達時flush就被強制寫,預設是0.38等價於38%的記憶體容量;
hbase.regionserver.optionalcacheflushinterval:一個edit版本在記憶體中的cache時長,預設3600000毫秒,設定為0的話則禁止自動flush;
hbase.regionserver.catalog.timeout:regionserver的Catalog Janitor訪問META的超時時間,預設是600000;
hbase.regionserver.dns.interface:同master類似~~不講
hbase.regionserver.dns.nameserver:同master類似
zookeeper.session.timeout:這是個值得說道一下的配置,首先ZK客戶端要用,Hbase使用zk的客戶端聯絡總體,同時也被用來啟動一個zk server,作為zk的maxSessionTimeout,總的來說就是regionserver與zk的關鍵引數,如果連線超時,master會重新的balance,regionserver也會被從叢集名單中清除,預設是90000;一個問題是如果zk 由hbase自己維護,那麼該引數作為regionserver連線是一個值,如果zk在另外的叢集,那麼zk自己的maxSessionTimeout引數將優先於Hbase的該引數,屆時可能會發生超時時間不同的問題;
zookeeper.znode.parent:znode存放root region的地址,預設是root-region-server;
zookeeper.znode.acl.parent:root znode的acl,預設acl;
hbase.zookeeper.dns.interface:zk的dns介面,預設default;
hbase.zookeeper.dns.nameserver:zk的dns服務地址,預設default;
hbase.zookeeper.peerport:zk的peer之間的通訊埠,預設是2888;
hbase.zookeeper.leaderport:zk選leader的通訊埠,預設是3888;
hbase.zookeeper.useMulti:zk支援多重update,要求zk在3.4版本以上,預設是false;
hbase.config.read.zookeeper.config:讓hbaseconfig去讀zk的config,預設false,也不支援開啟,這個功能很搞笑~~個人觀點;
hbase.zookeeper.property.initLimit:zk的配置,同步的屬性個數限制,預設10個~~沒用;
hbase.zookeeper.property.syncLimit:zk的配置,同步時的每次請求的條數,預設5個;
hbase.zookeeper.property.dataDir:zk的配置,snapshot存放的目錄,預設是${hbase.tmp.dir}/zookeeper;
hbase.zookeeper.property.clientPort:zk的配置,client連zk的埠,預設2181;
hbase.zookeeper.property.maxClientCnxns:zk的配置,允許接入zk的最大併發連線數的限制,按ip分配,預設300;
hbase.client.write.buffer:htable客戶端寫緩衝區大小,預設是2097152BYTE,這個緩衝區就是為了寫資料的臨時存放,設定大了,浪費客戶端和服務端的儲存,設定小了,如果寫的資料多,太多的RPC又帶來網路開銷,官方給的一個服務端儲存耗費評估計算是:hbase.client.write.buffer*hbase.regionserver.handler.count,服務端的rs的處理handler個數也很關鍵;
hbase.client.pause:pause時長,在hbase發生get或其他操作fail掉的時候進行pause的時間長度,預設��100;
hbase.client.retries.number:發生操作fail時的重試次數,結合上一個指標一起來控制總的重試時間,預設是35;
hbase.client.max.total.tasks:一個HTable例項可以提交給叢集的最大併發任務數,預設是100;
hbase.client.max.perserver.tasks:一個HTable例項給一臺regionserver提交的最大併發任務數,預設是5;
hbase.client.max.perregion.tasks:客戶端連線一臺region的最大連線數,換句話說,當你有這麼多個連線在region時,新的操作不被髮送直到有操作完成,預設是1;
hbase.client.scanner.caching:做scanner的next操作時(如果再本地client沒找到)快取的資料行數,這個值的設定也需要權衡,快取的多則快,但吃記憶體,快取的少則需要多的拉資料, 需要注意的事項是如果兩次呼叫的時間差大於scanner的timeout,則不要設定該值,預設是100;
hbase.client.keyvalue.maxsize:一個KeyValue例項的最大大小,這是儲存檔案中一個entry的容量上限,合理的設定這個值可以控制regionserver的split,split不會拆keyvalue,所以把keyvalue的大小設定為regionserver大小的一個比例分數(可除)是個不錯的選擇,預設是10485760;
hbase.client.scanner.timeout.period:結合剛才的caching做的一個,scanner的超時時間,預設是60000毫秒;
hbase.client.localityCheck.threadPoolSize:做localityCheck的執行緒池大小,預設是2;
hbase.bulkload.retries.number:做bulk load的最大重試次數,預設是0,即代表不斷重試;
hbase.balancer.period:Master執行balancer的週期,預設是300000毫秒;
hbase.regions.slop:如果有regionserver的region數目超過average+(average*slop),則rebalance,預設是0.2;
hbase.server.thread.wakefrequency:服務執行緒的sleep時間,預設10000毫秒,比如log roller;
hbase.server.versionfile.writeattempts:退出前寫 version file的重試次數,預設3,每次嘗試的間隔由上一個引數控制;
hbase.hregion.memstore.flush.size:Memstore寫磁碟的flush閾值,超過這個大小就flush,預設是134217728;
hbase.hregion.preclose.flush.size:如果一個region的memstore的大小等於或超過這個引數的量,在關閉region時(放置關閉flag),要提前flush,然後region關閉下線,預設大小是5242880;
hbase.hregion.memstore.block.multiplier:如果memstore的大小滿足hbase.hregion.block.memstore * hbase.hregion.flush.size個byte,那麼阻塞update,這個配置可以避免不必要的長時間split或者compact,甚至是OOME,預設是2;
hbase.hregion.memstore.mslab.enabled:開啟MemStore-Local Allocation Buffer,這個配置可以避免在高寫入的情況下的堆記憶體碎片,可以降低在大堆情況下的stop-the-world GC頻率,預設是true;
hbase.hregion.max.filesize:HStoreFile的最大尺寸,換句話說,當一個region裡的列族的任意一個HStoreFile超過這個大小,那麼region進行split,預設是10737418240;
hbase.hregion.majorcompaction:一個region的所有HStoreFile進行major compact的時間週期,預設是604800000 毫秒(7天);
hbase.hregion.majorcompaction.jitter:major compaction的發生抖動範圍,這麼理解比較容易,就是說上一個引數不是一個嚴格週期,會有個抖動,這個引數就是這個抖動的比例,預設是0.5;
hbase.hstore.compactionThreshold:一個HStore儲存HStoreFile的個數閾值,超過這個閾值則所有的HStoreFile會被寫到一個新的HStore,需要平衡取捨,預設是3;
hbase.hstore.blockingStoreFiles:一個HStore儲存HStoreFile阻塞update的閾值,超過這個閾值,HStore就進行compaction,直到做完才允許update,預設是10;
hbase.hstore.blockingWaitTime:一個更強力的配置,配合上一個引數,當HStore阻塞update時,超過這個時間限制,阻塞取消,就算compaction沒有完成,update也不會再被阻塞,預設是90000毫秒;
hbase.hstore.compaction.max:每個minor compaction的HStoreFile個數上限,預設是10;
hbase.hstore.compaction.kv.max:在flushing或者compacting時允許的最大keyvalue個數,如果有大的KeyValue或者OOME的話則配置一個小的值,如果行數多且小則配置大值,預設是10;
hbase.storescanner.parallel.seek.threads:如果並行查詢開啟的執行緒池大小,預設是10;
hfile.block.cache.size:一個配置比例,允許最大堆的對應比例的記憶體作為HFile和HStoreFile的block cache,預設是0.4,即40%,設定為0則disable這個比例,不推薦這麼做;
hfile.block.index.cacheonwrite:在index寫入的時候允許put無根(non-root)的多級索引塊到block cache裡,預設是false;
hfile.index.block.max.size:在多級索引的樹形結構裡,如果任何一層的block index達到這個配置大小,則block寫出,同時替換上新的block,預設是131072;
hfile.format.version:新檔案的HFile 格式版本,設定為1來測試向後相容,預設是2;
hfile.block.bloom.cacheonwrite:對於組合布隆過濾器的內聯block開啟cache-on-write,預設是false;
io.storefile.bloom.block.size:一個聯合布隆過濾器的單一塊(chunk)的大小,這個值是一個逼近值,預設是131072;
hbase.rs.cacheblocksonwrite:當一個HFile block完成時是否寫入block cache,預設是false;
hbase.rpc.server.engine:hbase 做rpc server的排程管理類,實現自org.apache.hadoop.ipc.RpcServerEngine,預設是org.apache.hadoop.hbase.ipc.ProtobufRpcServerEngine;
hbase.rpc.timeout:Hbase client發起遠端呼叫時的超時時限,使用ping來確認連線,但是最終會丟擲一個TimeoutException,預設值是60000;
hbase.rpc.shortoperation.timeout:另一個版本的hbase.rpc.timeout,控制短操作的超時時限,比如region server 彙報master的操作的超時時限可以設定小,這樣有利於master的failover,預設是10000;
hbase.ipc.client.tcpnodelay:預設是true,具體就是在tcp socket連線時設定 no delay;
hbase.master.keytab.file:kerberos keytab 檔案的全路徑名,用來為HMaster做log,無預設值;
hbase.master.kerberos.principal:執行HMaster程序時需要kerberos的principal name,這個配置就是這個name的值,形如:hbase/[email protected];
hbase.regionserver.keytab.file:kerberos keytab 檔案的全路徑名,用來為HRegionServer做log,無預設值;
hbase.regionserver.kerberos.principal:執行HRegionServer程序時需要kerberos的principal name,這個配置就是這個name的值,形如:hbase/[email protected];
hadoop.policy.file:RPC伺服器做許可權認證時需要的安全策略配置檔案,在Hbase security開啟後使用,預設是habse-policy.xml;
hbase.superuser:Hbase security 開啟後的超級使用者配置,一系列由逗號隔開的user或者group;
hbase.auth.key.update.interval:Hbase security開啟後服務端更新認證key的間隔時間:預設是86400000毫秒;
hbase.auth.token.max.lifetime:Hbase security開啟後,認證token下發後的生存週期,預設是604800000毫秒;
hbase.ipc.client.fallback-to-simple-auth-allowed:client使用安全連線去連結一臺非安全伺服器時,伺服器提示client切換到SASL SIMPLE認證模式(非安全),如果設定為true,則client同意切換到非安全連線,如果false,則退出連線;
hbase.coprocessor.region.classes:逗號分隔的Coprocessores列表,會被載入到預設所有表上。在自己實現了一個Coprocessor後,將其新增到Hbase的classpath並加入全限定名。也可以延遲載入,由HTableDescriptor指定;
hbase.rest.port:Hbase REST伺服器的埠,預設是8080;
hbase.rest.readonly:定義REST伺服器啟動的模式,有兩種方式,false:所有http方法都將被通過-GET/PUT/POST/DELETE,true:只有get方法ok。預設值是false;
hbase.rest.threads.max:REST伺服器執行緒池的最大執行緒數,池滿的話新請求會自動排隊,限制這個配置可以控制伺服器的記憶體量,預防OOM,預設是100;
hbase.rest.threads.min:同上類似,最小執行緒數,為了確保伺服器的服務狀態,預設是2;
hbase.rest.support.proxyuser:使REST伺服器支援proxy-user 模式,預設是false;
hbase.defaults.for.version.skip:是否跳過hbase.defaults.for.version的檢查,預設是false;
hbase.coprocessor.master.classes:由HMaster程序載入的coprocessors,逗號分隔,全部實現org.apache.hadoop.hbase.coprocessor.MasterObserver,同coprocessor類似,加入classpath及全限定名;
hbase.coprocessor.abortonerror:如果coprocessor載入失敗或者初始化失敗或者丟擲Throwable物件,則主機退出。設定為false會讓系統繼續執行,但是coprocessor的狀態會不一致,所以一般debug時才會設定為false,預設是true;
hbase.online.schema.update.enable:設定true來允許線上schema變更,預設是true;
hbase.table.lock.enable:設定為true來允許在schema變更時zk鎖表,鎖表可以組織併發的schema變更導致的表狀態不一致,預設是true;
hbase.thrift.minWorkerThreads:執行緒池的core size,在達到這裡配置的量級後,新執行緒才會再新的連線創立時建立,預設是16;
hbase.thrift.maxWorkerThreads:顧名思義,最大執行緒數,達到這個數字後,伺服器開始drop連線,預設是1000;
hbase.thrift.maxQueuedRequests:Thrift連線佇列的最大數,如果執行緒池滿,會先在這個佇列中快取請求,快取上限就是該配置,預設是1000;
hbase.thrift.htablepool.size.max:Thrift伺服器上table pool的最大上限,預設是1000;
hbase.offheapcache.percentage:JVM引數-XX:MaxDirectMemorySize的百分比值,預設是0,即不開啟堆外分配;
hbase.data.umask.enable:開啟後,檔案在regionserver寫入時會 有許可權相關設定,預設是false不開啟;
hbase.data.umask:開啟上面一項配置後,檔案的許可權umask,預設是000;
hbase.metrics.showTableName:是否為每個指標顯示錶名字首,預設是true;
hbase.metrics.exposeOperationTimes:是否進行關於操作在使用時間維度的指標報告,比如GET PUT DELETE INCREMENT等,預設是true;
hbase.snapshot.enabled:是否允許snapshot被使用、儲存和克隆,預設是true;
hbase.snapshot.restore.take.failsafe.snapshot:在restore過程中,如果失敗則啟用snapshot替換,成功則刪除掉snapshot,預設開啟true;
hbase.snapshot.restore.failsafe.name:剛才所說過程中snapshot的名字,預設是hbase-failsafe-{snapshot.name}-{restore.timestamp};
hbase.server.compactchecker.interval.multiplier:檢查是否需要compact的時間間隔,一般情況是在比如memstore flush後或者其他事件觸發compact的,但是有時也需要不同的compact策略,所以需要週期性的檢查具體間隔=hbase.server.compactchecker.interval.multiplier * hbase.server.thread.wakefrequency,預設1000;
hbase.lease.recovery.timeout:在dfs 租約超時時限,超時則放棄,預設是900000;
hbase.lease.recovery.dfs.timeout:dfs恢復租約呼叫的超時時限,預設是64000;