W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
下面我們列出一些重要的配置。我們已經(jīng)將這部分分為必需的配置和值得推薦的配置。
請(qǐng)你參考本教程中HBase基礎(chǔ)條件中的操作系統(tǒng)和Hadoop部分的內(nèi)容!
如果您擁有一個(gè)包含大量區(qū)域的群集,那么在主服務(wù)器啟動(dòng)后,Regionserver可能會(huì)暫時(shí)地進(jìn)行檢查,而所有剩余的RegionServers落后。要簽入的第一臺(tái)服務(wù)器將被分配到所有不是最優(yōu)的區(qū)域。為防止出現(xiàn)上述情況,請(qǐng)將其hbase.master.wait.on.regionservers.mintostart屬性從其默認(rèn)值1中調(diào)高。
默認(rèn)的超時(shí)時(shí)間是三分鐘(以毫秒為單位)。這意味著,如果服務(wù)器崩潰,則在主服務(wù)器在三分鐘前發(fā)現(xiàn)崩潰并開(kāi)始恢復(fù)。您可能需要將超時(shí)調(diào)整到一分鐘甚至更短的時(shí)間,以便主服務(wù)器盡快通知故障。在更改此值之前,請(qǐng)確保您的JVM垃圾收集配置處于受控狀態(tài),否則,長(zhǎng)時(shí)間的垃圾回收會(huì)超出ZooKeeper會(huì)話(huà)超時(shí)時(shí)間,將取出您的RegionServer。(如果一個(gè)RegionServer長(zhǎng)時(shí)間處于GC狀態(tài),你可能需要在服務(wù)器上啟動(dòng)恢復(fù))。
要更改此配置,請(qǐng)編輯hbase-site.xml,將更改的文件復(fù)制到群集中并重新啟動(dòng)。
我們將這個(gè)值設(shè)置得很高,以避免不必要的麻煩。如果出現(xiàn)類(lèi)似“為什么我在執(zhí)行一個(gè)大規(guī)模數(shù)據(jù)導(dǎo)入的時(shí)候Region Server死掉啦”這樣的問(wèn)題,可以解釋的原因是:他們的JVM未被解析,并且正在運(yùn)行長(zhǎng)時(shí)間的GC操作。
見(jiàn)ZooKeeper。
這是“DataNode 停止提供服務(wù)之前允許失敗的卷數(shù)。默認(rèn)情況下,任何卷失敗都會(huì)導(dǎo)致 datanode 關(guān)閉”從HDFS-default.xml中的描述。您可能希望將其設(shè)置為可用磁盤(pán)數(shù)量的一半左右。
此設(shè)置定義了為應(yīng)答傳入的用戶(hù)表請(qǐng)求而保持打開(kāi)的線程數(shù)。經(jīng)驗(yàn)法則是,當(dāng)每個(gè)請(qǐng)求的有效載荷接近MB(大容量、掃描使用大緩存)時(shí)保持低數(shù)字,并且當(dāng)有效負(fù)載?。ǐ@取,小投入,ICV,刪除)時(shí)保持此數(shù)字為高。正在進(jìn)行的查詢(xún)的總大小受設(shè)置hbase.ipc.server.max.callqueue.size的限制。
如果這個(gè)數(shù)字的有效載荷很小,那么將這個(gè)數(shù)字設(shè)置為最大傳入客戶(hù)端數(shù)量是安全的,典型的例子是一個(gè)服務(wù)于網(wǎng)站的集群,因?yàn)閜ut通常不被緩沖,大部分操作都是獲取的。
保持此設(shè)置的高風(fēng)險(xiǎn)的原因是,當(dāng)前在區(qū)域服務(wù)器中發(fā)生的所有投入的總大小可能對(duì)其內(nèi)存造成太大的壓力,甚至?xí)|發(fā)OutOfMemoryError。在低內(nèi)存上運(yùn)行的RegionServer將觸發(fā)其JVM的垃圾收集器,以更頻繁的方式運(yùn)行,直到GC暫停變得明顯(原因是用于保留所有請(qǐng)求的有效載荷的所有內(nèi)存不能被丟棄,即便垃圾收集器正在進(jìn)行嘗試)。一段時(shí)間之后,整個(gè)群集吞吐量都會(huì)受到影響,因?yàn)槊總€(gè)碰到該RegionServer的請(qǐng)求都將花費(fèi)更長(zhǎng)的時(shí)間,這更加劇了問(wèn)題的嚴(yán)重性。
您可以通過(guò)rpc.logging查看某個(gè)RegionServer上是否有太多或太多的處理程序,然后跟蹤其日志(排隊(duì)請(qǐng)求消耗內(nèi)存)。
HBase提供了一個(gè)合理的,保守的配置,可以在幾乎所有人們可能想要測(cè)試的機(jī)器類(lèi)型上運(yùn)行。如果你有更大的機(jī)器 - HBase有8G或更大的堆 - 你可能會(huì)發(fā)現(xiàn)下面的配置選項(xiàng)很有幫助。
您應(yīng)該考慮啟用ColumnFamily壓縮。有幾個(gè)選項(xiàng)可以在大多數(shù)情況下都是通過(guò)減小StoreFiles的大小來(lái)提高性能,從而減少I(mǎi) / O。
請(qǐng)參閱“HBase壓縮”了解更多信息。
在發(fā)生RS故障的情況下,HBase使用wal恢復(fù)尚未刷新到磁盤(pán)的memstore數(shù)據(jù)。這些WAL文件應(yīng)該配置為略小于HDFS塊(默認(rèn)情況下,HDFS塊為64Mb,WAL文件為?60Mb)。
HBase也對(duì)WAL文件的數(shù)量有限制,旨在確保在恢復(fù)過(guò)程中不會(huì)有太多的數(shù)據(jù)需要重放。這個(gè)限制需要根據(jù)memstore配置進(jìn)行設(shè)置,以便所有必要的數(shù)據(jù)都可以適用。建議分配足夠多的WAL文件來(lái)存儲(chǔ)至少那么多的數(shù)據(jù)(當(dāng)所有的存儲(chǔ)都接近完整時(shí))。例如,對(duì)于16Gb RS堆,默認(rèn)的memstore設(shè)置(0.4)和默認(rèn)的WAL文件大?。?60Mb),16Gb * 0.4 / 60,WAL文件數(shù)的起點(diǎn)為?109。但是,由于所有的memstores不會(huì)一直占滿(mǎn),所以可以分配更少的WAL文件。
HBase通常會(huì)根據(jù)您的hbase-default.xml和hbase-site.xml 配置文件中的設(shè)置來(lái)處理您所在區(qū)域的分割。重要的設(shè)置包括:hbase.regionserver.region.split.policy,hbase.hregion.max.filesize,hbase.regionserver.regionSplitLimit。分割的一個(gè)簡(jiǎn)單的觀點(diǎn)是,當(dāng)一個(gè)區(qū)域發(fā)展到hbase.hregion.max.filesize時(shí),它被分割。對(duì)于大多數(shù)使用模式,您應(yīng)該使用自動(dòng)分割。有關(guān)手動(dòng)區(qū)域分割的更多信息,請(qǐng)參閱手動(dòng)區(qū)域分割決策。
不要讓HBase自動(dòng)分割你的區(qū)域,你可以選擇自己管理分割。HBase 0.90.0增加了這個(gè)功能。如果你知道你的密鑰空間,手動(dòng)管理分割就行,否則讓HBase為你分割。手動(dòng)分割可以減輕在負(fù)載下的區(qū)域創(chuàng)建和移動(dòng)。這也使得區(qū)域邊界是已知的和不變的(如果你禁用區(qū)域分割)。如果使用手動(dòng)分割,則可以更輕松地進(jìn)行交錯(cuò)式的基于時(shí)間的主要壓縮來(lái)分散網(wǎng)絡(luò)IO負(fù)載。
禁用自動(dòng)分割:要禁用自動(dòng)拆分,可以在集群配置或表配置中設(shè)置區(qū)域拆分策略:org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy
自動(dòng)分割建議:如果禁用自動(dòng)分割來(lái)診斷問(wèn)題或在數(shù)據(jù)快速增長(zhǎng)期間,建議在您的情況變得更加穩(wěn)定時(shí)重新啟用它們。
確定預(yù)分割區(qū)域的最佳數(shù)目:
預(yù)分割區(qū)域的最佳數(shù)量取決于您的應(yīng)用程序和環(huán)境。一個(gè)好的經(jīng)驗(yàn)法則是從每個(gè)服務(wù)器的10個(gè)預(yù)分割區(qū)域開(kāi)始,隨著時(shí)間的推移數(shù)據(jù)不斷增長(zhǎng)。盡量在區(qū)域太少的地方犯錯(cuò),稍后進(jìn)行滾動(dòng)分割更好。區(qū)域的最佳數(shù)量取決于您所在區(qū)域中最大的StoreFile。如果數(shù)據(jù)量增加,最大的StoreFile的大小將隨著時(shí)間增加。目標(biāo)是使最大的區(qū)域足夠大,壓實(shí)選擇算法僅在定時(shí)的主要壓實(shí)期間將其壓縮。否則,該集群可能會(huì)同時(shí)出現(xiàn)大量壓實(shí)區(qū)域的壓實(shí)風(fēng)暴。數(shù)據(jù)增長(zhǎng)導(dǎo)致壓縮風(fēng)暴,而不是人工分割決策,這一點(diǎn)很重要。
如果區(qū)域被分割成太多的區(qū)域,可以通過(guò)配置HConstants.MAJOR_COMPACTION_PERIOD來(lái)增加主要的壓縮間隔。HBase 0.90引入了org.apache.hadoop.hbase.util.RegionSplitter,它提供所有區(qū)域的網(wǎng)絡(luò)IO安全滾動(dòng)分割。
默認(rèn)情況下,主要的壓縮計(jì)劃在7天內(nèi)運(yùn)行一次。在HBase 0.96.x之前,默認(rèn)情況下主要的壓縮計(jì)劃是每天發(fā)生一次。
如果您需要精確控制主要壓縮的運(yùn)行時(shí)間和頻率,可以禁用托管的主要壓縮。請(qǐng)參閱“compaction.parameters表中的hbase.hregion.majorcompaction條目”的詳細(xì)信息。
不禁用主要壓縮:對(duì)于StoreFile清理來(lái)說(shuō),重要的壓縮是絕對(duì)必要的。不要完全禁用它們。您可以通過(guò)HBase shell或Admin API手動(dòng)運(yùn)行主要壓縮。
預(yù)測(cè)執(zhí)行MapReduce任務(wù)是默認(rèn)開(kāi)啟的,對(duì)于HBase集群,通常建議關(guān)閉系統(tǒng)級(jí)的推測(cè)執(zhí)行,除非您需要在特定情況下可以配置每個(gè)作業(yè)。將屬性 mapreduce.map.speculative 和 mapreduce.reduce.speculative 設(shè)置為 false。
平衡器(Balancer)是在主服務(wù)器上運(yùn)行的一個(gè)周期性操作,用于重新分配集群上的區(qū)域。它通過(guò)hbase.balancer.period配置,默認(rèn)為300000(5分鐘)。
有關(guān)LoadBalancer的更多信息,請(qǐng)參閱master.processes.loadbalancer。
不要關(guān)閉塊緩存(你可以通過(guò)設(shè)置hfile.block.cache.size為零來(lái)實(shí)現(xiàn))。這樣做沒(méi)有好處,因?yàn)镽egionServer將花費(fèi)所有的時(shí)間一次又一次地加載HFile索引。如果你的工作集是這樣配置塊緩存,那么沒(méi)有益處,最少應(yīng)保證hfile指數(shù)保存在塊緩存內(nèi)的大?。憧梢酝ㄟ^(guò)調(diào)查RegionServer UI粗略地了解你需要的大小;請(qǐng)參閱占網(wǎng)頁(yè)頂部附近的索引塊大?。?。
如果在對(duì)HBase的操作中出現(xiàn)大約40ms左右的延遲,請(qǐng)嘗試Nagles的設(shè)置。例如,請(qǐng)參閱用戶(hù)郵件列表線程,將緩存設(shè)置為1的不一致掃描性能以及其中所引用的設(shè)置tcpNoDelay來(lái)提高掃描速度的問(wèn)題。您也可以查看該文檔的尾部圖表:HBASE-7008 Set掃描緩存到一個(gè)更好的默認(rèn)位置,我們的Lars Hofhansl會(huì)嘗試使用Nagle打開(kāi)和關(guān)閉測(cè)量效果的各種數(shù)據(jù)大小。
這部分是關(guān)于在服務(wù)器出現(xiàn)故障后會(huì)使服務(wù)器恢復(fù)更快的配置。請(qǐng)參閱Deveraj Das和Nicolas Liochon博客文章:簡(jiǎn)介HBase平均恢復(fù)時(shí)間(MTTR)。
HBASE-8354強(qiáng)制Namenode使用lease恢復(fù)請(qǐng)求循環(huán)的問(wèn)題是混亂的,但在低超時(shí)以及如何引起更快的恢復(fù),包括引用添加到HDFS的修復(fù)程序方面,有很多好的討論。下面建議的配置是Varun的建議的提煉和測(cè)試,確保你在HDFS版本上運(yùn)行,所以你有他所提到的修補(bǔ)程序,并且他自己添加到HDFS,幫助HBase MTTR(例如HDFS-3703,HDFS-3712和HDFS-4791 -Hadoop 2確保有他們并且后期Hadoop 1有一些)。在RegionServer中設(shè)置以下內(nèi)容:
<property>
<name>hbase.lease.recovery.dfs.timeout</name>
<value>23000</value>
<description>How much time we allow elapse between calls to recover lease.
Should be larger than the dfs timeout.</description>
</property>
<property>
<name>dfs.client.socket-timeout</name>
<value>10000</value>
<description>Down the DFS timeout from 60 to 10 seconds.</description>
</property>
在NameNode/DataNode端,設(shè)置以下內(nèi)容來(lái)啟用HDFS-3703,HDFS-3912中引入的“staleness”:
<property>
<name>dfs.client.socket-timeout</name>
<value>10000</value>
<description>Down the DFS timeout from 60 to 10 seconds.</description>
</property>
<property>
<name>dfs.datanode.socket.write.timeout</name>
<value>10000</value>
<description>Down the DFS timeout from 8 * 60 to 10 seconds.</description>
</property>
<property>
<name>ipc.client.connect.timeout</name>
<value>3000</value>
<description>Down from 60 seconds to 3.</description>
</property>
<property>
<name>ipc.client.connect.max.retries.on.timeouts</name>
<value>2</value>
<description>Down from 45 seconds to 3 (2 == 3 retries).</description>
</property>
<property>
<name>dfs.namenode.avoid.read.stale.datanode</name>
<value>true</value>
<description>Enable stale state in hdfs</description>
</property>
<property>
<name>dfs.namenode.stale.datanode.interval</name>
<value>20000</value>
<description>Down from default 30 seconds</description>
</property>
<property>
<name>dfs.namenode.avoid.write.stale.datanode</name>
<value>true</value>
<description>Enable stale state in hdfs</description>
</property>
JMX(Java Management Extensions,Java管理擴(kuò)展)提供了內(nèi)置的工具,使您能夠監(jiān)視和管理Java VM。要啟用遠(yuǎn)程系統(tǒng)的監(jiān)視和管理,在啟動(dòng) Java VM 時(shí),您需要設(shè)置系統(tǒng)屬性com.sun.management.jmxremote.port(要啟用JMX RMI連接的端口號(hào))。從歷史上看,除了上面提到的端口之外,JMX還會(huì)打開(kāi)兩個(gè)附加的隨機(jī)TCP偵聽(tīng)端口,這可能會(huì)導(dǎo)致端口沖突問(wèn)題。
作為一種替代方法,您可以使用HBase提供的基于協(xié)處理器的JMX實(shí)現(xiàn)。要在0.99或更高版本中啟用它,請(qǐng)?jiān)趆base-site.xml中添加以下屬性:
<property>
<name>hbase.coprocessor.regionserver.classes</name>
<value>org.apache.hadoop.hbase.JMXListener</value>
</property>
不要同時(shí)為Java VM 設(shè)置com.sun.management.jmxremote.port
目前它支持Master和RegionServer Java VM。默認(rèn)情況下,JMX偵聽(tīng)TCP端口10102,您可以使用以下屬性進(jìn)一步配置端口:
<property>
<name>regionserver.rmi.registry.port</name>
<value>61130</value>
</property>
<property>
<name>regionserver.rmi.connector.port</name>
<value>61140</value>
</property>
在大多數(shù)情況下,注冊(cè)表端口可以與連接器端口共享,所以只需要配置regionserver.rmi.registry.port。但是,如果要使用SSL通信,則必須將2個(gè)端口配置為不同的值。
默認(rèn)情況下,密碼認(rèn)證和SSL通信被禁用。要啟用密碼驗(yàn)證,您需要像下面那樣更新hbase-env.sh:
export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=your_password_file \
-Dcom.sun.management.jmxremote.access.file=your_access_file"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE "
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE "
請(qǐng)參閱$ JRE_HOME/lib/management下面的示例password/access文件。
要使用密碼驗(yàn)證啟用SSL通信,請(qǐng)按照以下步驟操作:
#1. generate a key pair, stored in myKeyStore
keytool -genkey -alias jconsole -keystore myKeyStore
#2. export it to file jconsole.cert
keytool -export -alias jconsole -keystore myKeyStore -file jconsole.cert
#3. copy jconsole.cert to jconsole client machine, import it to jconsoleKeyStore
keytool -import -alias jconsole -keystore jconsoleKeyStore -file jconsole.cert
然后像下面這樣更新hbase-env.sh:
export HBASE_JMX_BASE="-Dcom.sun.management.jmxremote.ssl=true \
-Djavax.net.ssl.keyStore=/home/tianq/myKeyStore \
-Djavax.net.ssl.keyStorePassword=your_password_in_step_1 \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.password.file=your_password file \
-Dcom.sun.management.jmxremote.access.file=your_access_file"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE "
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE "
最后,使用密鑰存儲(chǔ)在客戶(hù)端上啟動(dòng) jconsole:
jconsole -J-Djavax.net.ssl.trustStore=/home/tianq/jconsoleKeyStore
要在主服務(wù)器上啟用HBase JMX實(shí)現(xiàn),還需要在hbase-site.xml中添加以下屬性:
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.JMXListener</value>
</property>
端口配置的相應(yīng)屬性為:master.rmi.registry.port(默認(rèn)為10101)和master.rmi.connector.port(默認(rèn)情況下與registry.port相同)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: