❶ HBase存儲架構
上圖是HBase的存儲架構圖。
由上圖可以知道,客戶端是通過Zookeeper找到HMaster,然後再與具體的Hregionserver進行溝通讀寫數據的。
具體到物理實現,細節包括以下這些:
首先要清楚HBase在hdfs中的存儲路徑,以及各個目錄的作用。在hbase-site.xml 文件中,配置項 <name> hbase.rootdir</name> 默認 「/hbase」,就是hbase在hdfs中的存儲根路徑。以下是hbase0.96版本的個路徑作用。1.0以後的版本請參考這里: https://blog.bcmeng.com/post/hbase-hdfs.html
1、 /hbase/.archive
HBase 在做 Split或者 compact 操作完成之後,會將 HFile 移到.archive 目錄中,然後將之前的 hfile 刪除掉,該目錄由 HMaster 上的一個定時任務定期去清理。
2、 /hbase/.corrupt
存儲HBase損壞的日誌文件,一般都是為空的。
3、 /hbase/.hbck
HBase 運維過程中偶爾會遇到元數據不一致的情況,這時候會用到提供的 hbck 工具去修復,修復過程中會使用該目錄作為臨時過度緩沖。
4、 /hbase/logs
HBase 是支持 WAL(Write Ahead Log) 的,HBase 會在第一次啟動之初會給每一台 RegionServer 在.log 下創建一個目錄,若客戶端如果開啟WAL 模式,會先將數據寫入一份到.log 下,當 RegionServer crash 或者目錄達到一定大小,會開啟 replay 模式,類似 Mysql 的 binlog。
5、 /hbase/oldlogs
當.logs 文件夾中的 HLog 沒用之後會 move 到.oldlogs 中,HMaster 會定期去清理。
6、 /hbase/.snapshot
hbase若開啟了 snapshot 功能之後,對某一個用戶表建立一個 snapshot 之後,snapshot 都存儲在該目錄下,如對表test 做了一個 名為sp_test 的snapshot,就會在/hbase/.snapshot/目錄下創建一個sp_test 文件夾,snapshot 之後的所有寫入都是記錄在這個 snapshot 之上。
7、 /hbase/.tmp
當對表做創建或者刪除操作的時候,會將表move 到該 tmp 目錄下,然後再去做處理操作。
8、 /hbase/hbase.id
它是一個文件,存儲集群唯一的 cluster id 號,是一個 uuid。
9、 /hbase/hbase.version
同樣也是一個文件,存儲集群的版本號,貌似是加密的,看不到,只能通過web-ui 才能正確顯示出來
10、 -ROOT-
該表是一張的HBase表,只是它存儲的是.META.表的信息。通過HFile文件的解析腳本 hbase org.apache.hadoop.hbase.io.hfile.HFile -e -p -f 可以查看其存儲的內容,如下所示:
以上可以看出,-ROOT-表記錄的.META.表的所在機器是dchbase2,與web界面看到的一致:
11、 .META.
通過以上表能找到.META.表的信息,該表也是一張hbase表,通過以上命令,解析其中一個region:
以上可以看出,adt_app_channel表的數據記錄在dchbase3這台reginserver上,也與界面一致,如果有多個region,則會在表名後面加上rowkey的范圍:
通過以上描述,只要找到-ROOT-表的信息,就能根據rowkey找到對應的數據,那-ROOT-在哪裡找呢?從本文一開始的圖中可以知道,就是在zookeeper中找的。進入zookeeper命令行界面:
可以看出-ROOT-表存儲在 dchbase3 機器中,對應界面如下:
以上就是HBase客戶端根據指定的rowkey從zookeeper開始找到對應的數據的過程。
那在Region下HBase是如何存儲數據的呢?
以下就具體操作一張表,查詢對應的HFile文件,看HBase的數據存儲過程。
在HBase創建一張表 test7,並插入一些數據,如下命令:
查看wal日誌,通過 hbase org.apache.hadoop.hbase.regionserver.wal.HLog --mp -p 命令可以解析HLog文件,內容如下:
查看HFile文件,內容如下:
由此可見,HFile文件就是存儲HBase的KV對,其中Key的各個欄位包含了的信息如下:
由於hbase把cf和column都存儲在HFile中,所以在設計的時候,這兩個欄位應該盡量短,以減少存儲空間。
但刪除一條記錄的時候,HBase會怎麼操作呢?執行以下命令:
刪除了rowkey為200的記錄,查看hdfs,原來的HFile並沒有改變,而是生成了一個新的HFile,內容如下:
所以在HBase中,刪除一條記錄並不是修改HFile裡面的內容,而是寫新的文件,待HBase做合並的時候,把這些文件合並成一個HFile,用時間比較新的文件覆蓋舊的文件。HBase這樣做的根本原因是,HDFS不支持修改文件。
❷ 漫談工業大數據9:開源工業大數據軟體簡介(上)
今天真是一個美好的時代,有無數的開源系統可以為我們提供服務,現在有許多開發軟體可以用到工業大數據中,當然很多系統還不成熟,應用到工業中還需要小心,並且需要開發人員對其進行一定的優化和調整。下面就簡單介紹一些開源的大數據工具軟體,看看有哪些能夠應用到工業大數據領域。
下面這張圖是我根據網上流傳的一張開源大數據軟體分類圖整理的:
我們可以把開源大數據軟體分成幾類,有一些可以逐步應用到工業大數據領域,下面就一一介紹一下這些軟體。(以下系統介紹大都來源於網路)
1、數據存儲類
(1)關系資料庫MySQL
這個就不用太多介紹了吧,關系型資料庫領域應用最廣泛的開源軟體,目前屬於 Oracle 旗下產品。
(2)文件資料庫Hadoop
Hadoop是大數據時代的明星產品,它最大的成就在於實現了一個分布式文件系統(Hadoop Distributed FileSystem),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的硬體上,而且它提供高吞吐量來訪問應用程序的數據,適合那些有著超大數據集的應用程序。
Hadoop可以在工業大數據應用中用來作為底層的基礎資料庫,由於它採用了分布式部署的方式,如果是私有雲部署,適用於大型企業集團。如果是公有雲的話,可以用來存儲文檔、視頻、圖像等資料。
(3)列資料庫Hbase
HBase是一個分布式的、面向列的開源資料庫,HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關系資料庫,它是一個適合於非結構化數據存儲的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。
基於Hbase開發的OpenTSDB,可以存儲所有的時序(無須采樣)來構建一個分布式、可伸縮的時間序列資料庫。它支持秒級數據採集所有metrics,支持永久存儲,可以做容量規劃,並很容易的接入到現有的報警系統里。
這樣的話,它就可以替代在工業領域用得最多的實時資料庫。
(4)文檔資料庫MongoDB
MongoDB是一個介於關系資料庫和非關系資料庫之間的產品,是非關系資料庫當中功能最豐富,最像關系資料庫的。他支持的數據結構非常鬆散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似於面向對象的查詢語言,幾乎可以實現類似關系資料庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
MongoDB適合於存儲工業大數據中的各類文檔,包括各類圖紙、文檔等。
(5)圖資料庫Neo4j/OrientDB
圖資料庫不是存放圖片的,是基於圖的形式構建的數據系統。
Neo4j是一個高性能的,NOSQL圖形資料庫,它將結構化數據存儲在網路上而不是表中。它是一個嵌入式的、基於磁碟的、具備完全的事務特性的Java持久化引擎,但是它將結構化數據存儲在網路(從數學角度叫做圖)上而不是表中。Neo4j也可以被看作是一個高性能的圖引擎,該引擎具有成熟資料庫的所有特性。程序員工作在一個面向對象的、靈活的網路結構下而不是嚴格、靜態的表中——但是他們可以享受到具備完全的事務特性、 企業級 的資料庫的所有好處。
OrientDB是兼具文檔資料庫的靈活性和圖形資料庫管理 鏈接 能力的可深層次擴展的文檔-圖形資料庫管理系統。可選無模式、全模式或混合模式下。支持許多高級特性,諸如ACID事務、快速索引,原生和SQL查詢功能。可以JSON格式導入、導出文檔。若不執行昂貴的JOIN操作的話,如同關系資料庫可在幾毫秒內可檢索數以百記的鏈接文檔圖。
這些資料庫都可以用來存儲非結構化數據。
2、數據分析類
(1)批處理MapRece/Spark
MapRece是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Rece(歸約)",是它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式並行編程的情況下,將自己的程序運行在分布式系統上。 當前的軟體實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定並發的Rece(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
Apache Spark 是專為大規模數據處理而設計的快速通用的計算引擎。Spark 是一種與 Hadoop 相似的開源集群計算環境,但是兩者之間還存在一些不同之處,這些有用的不同之處使 Spark 在某些工作負載方面表現得更加優越,換句話說,Spark 啟用了內存分布數據集,除了能夠提供互動式查詢外,它還可以優化迭代工作負載。盡管創建 Spark 是為了支持分布式數據集上的迭代作業,但是實際上它是對 Hadoop 的補充,可以在 Hadoop 文件系統中並行運行。
這些大數據的明星產品可以用來做工業大數據的處理。
(2)流處理Storm
Storm是一個開源的分布式實時計算系統,可以簡單、可靠的處理大量的數據流。Storm有很多使用場景:如實時分析,在線機器學習,持續計算,分布式RPC,ETL等等。Storm支持水平擴展,具有高容錯性,保證每個消息都會得到處理,而且處理速度很快(在一個小集群中,每個結點每秒可以處理數以百萬計的消息)。Storm的部署和運維都很便捷,而且更為重要的是可以使用任意編程語言來開發應用。
(3)圖處理Giraph
Giraph是什麼?Giraph是Apache基金會開源項目之一,被定義為迭代式圖處理系統。他架構在Hadoop之上,提供了圖處理介面,專門處理大數據的圖問題。
Giraph的存在很有必要,現在的大數據的圖問題又很多,例如表達人與人之間的關系的有社交網路,搜索引擎需要經常計算網頁與網頁之間的關系,而map-rece介面不太適合實現圖演算法。
Giraph主要用於分析用戶或者內容之間的聯系或重要性。
(4)並行計算MPI/OpenCL
OpenCL(全稱Open Computing Language,開放運算語言)是第一個面向 異構系統 通用目的並行編程的開放式、免費標准,也是一個統一的編程環境,便於軟體開發人員為高性能計算 伺服器 、桌面計算系統、手持設備編寫高效輕便的代碼,而且廣泛適用於多核心處理器(CPU)、圖形處理器(GPU)、Cell類型架構以及數字信號處理器(DSP)等其他並行處理器,在 游戲 、 娛樂 、科研、醫療等各種領域都有廣闊的發展前景。
(5)分析框架Hive
Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供簡單的sql查詢功能,可以將sql語句轉換為MapRece任務進行運行。 其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapRece統計,不必開發專門的MapRece應用,十分適合數據倉庫的統計分析。
(6)分析框架Pig
Apache Pig 是apache平台下的一個免費開源項目,Pig為大型數據集的處理提供了更高層次的抽象,很多時候數據的處理需要多個MapRece過程才能實現,使得數據處理過程與該模式匹配可能很困難。有了Pig就能夠使用更豐富的數據結構。[2]
Pig LatinPig Latin 是一個相對簡單的語言,一條語句 就是一個操作,與資料庫的表類似,可以在關系資料庫中找到它(其中,元組代錶行,並且每個元組都由欄位組成)。
Pig 擁有大量的數據類型,不僅支持包、元組和映射等高級概念,還支持簡單的數據類型,如 int、long、float、double、chararray 和 bytearray。並且,還有一套完整的比較運算符,包括使用正則表達式的豐富匹配模式。
❸ 大數據知識點裡面的 HBase 是什麼意思
HBase是一個分布式的、面向列的開源資料庫,基於Hadoop生態圈,在NoSQL蓬勃發展的今天被國內外眾多公司選擇,應用於現代互聯網系統的不同業務。
HBase業務場景
1.標簽數據的存儲
標簽數據是稀疏矩陣的代表,描述了實體的各類屬性,主要應用於智能推薦、商務智能或營銷引擎等領域。
2. 車聯網數據的收集
車聯網系統是利用車載設備收集車輛運行時產生的各項數據,通過網路實時上傳,在平台進行動態分析和利用。
3. 交易記錄的保存
在移動支付領域,保證歷史交易記錄等敏感信息的安全性是一個重要的話題。當數據中心遭遇自然災害、外部攻擊時,必須保證這些信息不丟,而且從業務角度要保證RTO盡可能短、RPO盡可能為0。
HBase基於底層的HDFS作為存儲系統,HDFS實現了三副本策略,按照一定的規則將副本放在不同的節點或機架中,本身具有較高的容災能力。在工程實踐中,也產生了Region replica、主備集群、互備雙活等策略來盡可能進行災備並保證高可用。
❹ hbase資料庫存儲的特點有哪些
特點:(1)大:一個表可以有數十億行,上百萬列;
(2)無模式:每行都有一個可排序的主鍵和任意多的列,列可以根據需要動態的增加,同一張表中不同的行可以有截然不同的列;
(3)面向列:面向列(族)的存儲和許可權控制,列(族)獨立檢索;?
(4)稀疏:空(null)列並不佔用存儲空間,表可以設計的非常稀疏;
(5)數據多版本:每個單元中的數據可以有多個版本,默認情況下版本號自動分配,是單元格插入時的時間戳;
(6)數據類型單一:Hbase中的數據都是字元串,沒有類型。
❺ hbase與關系型資料庫的存儲方式有哪些不同
HBase與傳統關系資料庫的區別主要體現在以下幾個方面:1.數據類型。關系資料庫採用關系模型,具有豐富的數據類型和儲存方式。HBase則採用了更加簡單的數據模型,它把數據儲存為未經解釋的字元串,用戶可以把不同格式的結構化數據和非結構化數據都序列化成字元串保存到HBase中,用戶需要自己編寫程序把字元串解析成不同的數據類型。 2.數據操作。關系資料庫中包含了豐富的操作,如插入、刪除、更新、查詢等,其中會涉及復雜的多表連接,通常是藉助多個表之間的主外鍵關聯來實現的。HBase操作則不存在復雜的表與表之間的關系,只有簡單的插入、查詢、刪除、清空等,因為HBase在設計上就避免了復雜的表與表之。
列存儲不同於傳統的關系型資料庫,其數據在表中是按行存儲的,列方式所帶來的重要好處之一就是,由於查詢中的選擇規則是通過列來定義的,因此整個資料庫是自動索引化的。
按列存儲每個欄位的數據聚集存儲,在查詢只需要少數幾個欄位的時候,能大大減少讀取的數據量,一個欄位的數據聚集存儲,那就更容易為這種聚集存儲設計更好的壓縮/解壓演算法。
傳統的(Oracle)行存儲和(Hbase)列存儲的區別。
主要體現在以下幾個方面:1.數據類型。關系資料庫採用關系模型,具有豐富的數據類型和儲存方式。HBase則採用了更加簡單的數據模型,它把數據儲存為未經解釋的字元串,用戶可以把不同格式的結構化數據和非結構化數據都序列化成字元串保存到HBase中,用戶需要自己編寫程序把字元串解析成不同的數據類型。 2.數據操作。關系資料庫中包含了豐富的操作,如插入、刪除、更新、查詢等,其中會涉及復雜的多表連接,通常是藉助多個表之間的主外鍵關聯來實現的。HBase操作則不存在復雜的表與表之間的關系,只有簡單的插入、查詢、刪除、清空等,因為HBase在設計上就避免了復雜的表與表之間的關系,通常只採用單表的主鍵查詢。
❻ HBase是什麼呢,都有哪些特點呢
Hbase是一種NoSQL資料庫,這意味著它不像傳統的RDBMS資料庫那樣支持SQL作為查詢語言。Hbase是一種分布式存儲的資料庫,技術上來講,它更像是分布式存儲而不是分布式資料庫,它缺少很多RDBMS系統的特性,比如列類型,輔助索引,觸發器,和高級查詢語言等待
那Hbase有什麼特性呢?如下:
強讀寫一致,但是不是「最終一致性」的數據存儲,這使得它非常適合高速的計算聚合
自動分片,通過Region分散在集群中,當行數增長的時候,Region也會自動的切分和再分配
自動的故障轉移
Hadoop/HDFS集成,和HDFS開箱即用,不用太麻煩的銜接
豐富的「簡潔,高效」API,Thrift/REST API,Java API
塊緩存,布隆過濾器,可以高效的列查詢優化
操作管理,Hbase提供了內置的web界面來操作,還可以監控JMX指標
首先資料庫量要足夠多,如果有十億及百億行數據,那麼Hbase是一個很好的選項,如果只有幾百萬行甚至不到的數據量,RDBMS是一個很好的選擇。因為數據量小的話,真正能工作的機器量少,剩餘的機器都處於空閑的狀態
其次,如果你不需要輔助索引,靜態類型的列,事務等特性,一個已經用RDBMS的系統想要切換到Hbase,則需要重新設計系統。
最後,保證硬體資源足夠,每個HDFS集群在少於5個節點的時候,都不能表現的很好。因為HDFS默認的復制數量是3,再加上一個NameNode。
存儲業務數據:車輛GPS信息,司機點位信息,用戶操作信息,設備訪問信息。。。
存儲日誌數據:架構監控數據(登錄日誌,中間件訪問日誌,推送日誌,簡訊郵件發送記錄。。。),業務操作日誌信息
存儲業務附件:UDFS系統存儲圖像,視頻,文檔等附件信息
什麼時候用Hbase?
Hbase不適合解決所有的問題:
Hbase在單機環境也能運行,但是請在開發環境的時候使用。
內部應用
不過在公司使用的時候,一般不使用原生的Hbase API,使用原生的API會導致訪問不可監控,影響系統穩定性,以致於版本升級的不可控。
HFile
HFile是Hbase在HDFS中存儲數據的格式,它包含多層的索引,這樣在Hbase檢索數據的時候就不用完全的載入整個文件。索引的大小(keys的大小,數據量的大小)影響block的大小,在大數據集的情況下,block的大小設置為每個RegionServer 1GB也是常見的。
探討資料庫的數據存儲方式,其實就是探討數據如何在磁碟上進行有效的組織。因為我們通常以如何高效讀取和消費數據為目的,而不是數據存儲本身。
Hfile生成方式
起初,HFile中並沒有任何Block,數據還存在於MemStore中。
Flush發生時,創建HFile Writer,第一個空的Data Block出現,初始化後的Data Block中為Header部分預留了空間,Header部分用來存放一個Data Block的元數據信息。
而後,位於MemStore中的KeyValues被一個個append到位於內存中的第一個Data Block中:
註:如果配置了Data Block Encoding,則會在Append KeyValue的時候進行同步編碼,編碼後的數據不再是單純的KeyValue模式。Data Block Encoding是HBase為了降低KeyValue結構性膨脹而提供的內部編碼機制。
❼ 監控系統為什麼採用時間序列資料庫
思極有容時序資料庫正是普華公司面對這一高速增長的物聯網大數據市場和技術挑戰推出的創新性的大數據處理產品,它不依賴任何第三方軟體,也不是優化或包裝了一個開源的資料庫或流式計算產品,而是在吸取眾多傳統關系型資料庫、NoSQL資料庫、流式計算引擎、消息隊列等軟體的優點之後自主開發的產品,在時序空間大數據處理上,有著自己獨到的優勢。
· 10倍以上的性能提升:定義了創新的數據存儲結構,單核每秒就能處理至少2萬次請求,插入數百萬個數據點,讀出一千萬以上數據點,比現有通用資料庫快了十倍以上。
· 硬體或雲服務成本降至1/5:由於超強性能,計算資源不到通用大數據方案的1/5;通過列式存儲和先進的壓縮演算法,存儲空間不到通用資料庫的1/10。
· 全棧時序數據處理引擎:將資料庫、消息隊列、緩存、流式計算等功能融合一起,應用無需再集成Kafka/Redis/HBase/HDFS等軟體,大幅降低應用開發和維護的復雜度成本。
· 強大的分析功能:無論是十年前還是一秒鍾前的數據,指定時間范圍即可查詢。數據可在時間軸上或多個設備上進行聚合。臨時查詢可通過Shell, Python, R, Matlab隨時進行。
· 與第三方工具無縫連接:不用一行代碼,即可與Telegraf, Grafana, Matlab, R等工具集成。後續將支持MQTT, OPC等工具, 與BI工具也能夠無縫連接。
· 零運維成本、零學習成本:安裝、集群一秒搞定,無需分庫分表,實時備份。支持標准SQL語句,支持JDBC, RESTful連接, 支持Python/Java/C/C++/Go等開發語言, 與MySQL相似,零學習成本。
採用思極有容時序資料庫,可將典型的物聯網、車聯網、工業互聯網大數據平台的整體成本降至現有的1/5。同樣的硬體資源,思極有容時序資料庫能將系統處理能力和容量增加五倍以上。
同時,相比HBase等資料庫,使用普華思極有容時序資料庫來存儲有以下優勢:
1. 存儲空間大幅節省,估計不到HBase的1/10
2. 伺服器資源大幅節省,估計不到1/5
3. 查詢速度提高至少10倍
4. 提供異地容災備份方案
5. 支持通過標准SQL進行即席查詢
6. 數據超過保留時長,自動刪除
7. 零管理,安裝、部署、維護極其簡單,一鍵搞定
❽ hbase 的數據存儲及Region變化(flush compaction spilt)和性能調優
1. 對表做預分區處理(即在建表時指定Region數量和拆分邊界);
2.配置hbase.hregion.max.filesize為50GB
以fileServer為例,在使用默認的split策略-- 的情況下,16個預分區Region, 則單個Resion容量達到 min(32,50),即32GB時分裂。
3.修改Linux最大文件句柄數
因為hbase是以文件的形式存儲數據,最大文件句柄數影響著hbase的並發量。
用root許可權修改/etc/security/limits.conf文件,增加以下內容(前面的*不能忽略):
* soft nproc 10240
* hard nproc 10240
* soft nofile 10240
* hard nofile 10240
編輯/etc/pam.d/common-session,加入一行
session required pam_limits.so
編輯/etc/profile,加入
ulimit -SHn 51200
重新登陸,生效
4.HRegionServer掛掉異常和解決:
is not online on......
常規解決方案:
刪除zk中hbase的緩存
重啟hbase
使用上述解決方案後本次異常依舊存在,並且HMaster和HRegionServer都不斷的自動掛掉。
HMaster報錯:
解決方案:
新增配置(看情況決定使用不使用,建議在HMaster不能啟動時排除錯誤使用)(讓啟動hbase時只讓HMaster去進行日誌split,缺點是恢復數據時候速度慢):
<property>
<name>hbase.master.distributed.log.splitting</name>
<value>false</value>
</property>
刪除WAL文件(會丟數據):
6. RPC請求的最大線程數
hbase.regionserver.handler.count 默認是10,在伺服器測試時建議設置到50(經測試在單個Region Server時無用,單個RegionServer 最多在6個線程put時保持穩定)
7.日誌分割(hbase出錯後恢復數據)
MemStore中大量更新丟失時,對數據進行恢復時會做日誌分割
hbase.regionserver.hlog.splitlog.writer.threads 日誌分割的線程數, 默認為3 ,建議設定為10
8.Region Server頻繁掉線
出現Hbase Region Server頻繁掉線的情況,表現為在多線程put的情況下,忽然Hbase Region Server掉線
猜測是GC或者split過程中沒有及時和ZK通信,導致與ZK連接時間超時,zk返回dead region到master,當Hbase Region恢復正常後,找不到wal,產生如下報錯。
zookeeper.session.timeout :默認值是3分鍾
但是 hbase regionserver和zookeeper的timeout不是單方面決定的,是取決於hbase的zookeeper.session.timeout和zookeeper的MaxSessionTimeout中的最小值
配置hbase:
zookeeper.session.timeout
600000
配置zookeeper:
tickTime=30000
9.內存及GC優化
在測試的過程中依舊出現Hbase Region Server掉線的情況,報錯如下
2021-02-0318:49:14,091INFO[sync.0]wal.FSHLog: Slow sync cost:1955ms, current pipeline: []
2021-02-0318:49:14,091WARN[regionserver/botsc/192.168.0.107:16020.append-pool5-t1]wal.MetricsWAL: regionserver/botsc/192.168.0.107:16020.append-pool5-t1 took1953ms appending an edit to wal; len~=109
2021-02-0318:49:14,106ERROR[sync.3]wal.FSHLog:Errorsyncing, request close of WAL
java.io .IOException:io.grpc.StatusRuntimeException: CANCELLED: Failed to stream message
at seaweed.hdfs.SeaweedOutputStream.(SeaweedOutputStream.java:78)
at seaweed.hdfs.SeaweedOutputStream.(SeaweedOutputStream.java:263)
at seaweed.hdfs.SeaweedOutputStream.flushInternalAsync(SeaweedOutputStream.java:243)
at seaweed.hdfs.SeaweedOutputStream.flush(SeaweedOutputStream.java:129)
at java.io .FilterOutputStream.flush(FilterOutputStream.java:140)
at java.io .DataOutputStream.flush(DataOutputStream.java:123)
at org.apache.hadoop.hbase.regionserver.wal.ProtobufLogWriter.sync(ProtobufLogWriter.java:170)
at org.apache.hadoop.hbase.regionserver.wal.FSHLog$SyncRunner.run(FSHLog.java:1286)
at java.lang.Thread.run(Thread.java:748)
修改hbase的配置文件hbase-env.sh,GC優化如下:
export HBASE_HEAPSIZE=21384
export master_heapsize=8292
export regionserver_heapsize=21384
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC -XX:=60 -XX:+UseParNewGC -XX:ParallelGCThreads=6"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE -Xmx8g -Xms8g -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:=70"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS $HBASE_JMX_BASE -Xmx20g -Xms20g -Xmn1g -XX:+UseParNewGC
-XX:+UseConcMarkSweepGC -XX:=70"