導航:首頁 > 凈水問答 > hbase過濾重復數據

hbase過濾重復數據

發布時間:2023-03-30 07:16:32

㈠ hbase中怎麼用java來過濾欄位

hbase提供了ListFilter過濾Listfilters=newArraList();Filterf1=newRowFilter();Filterf2=newAualifierFilter(.);filters.add(f1);filters.add(f2);FilterListfilterList=newFilterList(filters);Scan

㈡ hbase scan的startRow和endRow

舉一個場數扮罩景,安全領域的溯源分析,查詢維度包括ip,時間戳,埠,協議,可能根據前兩的維度的一個或者幾個進行原始日誌查詢,我們可以把原始日誌存儲到hbase中,而前面提到的幾個維度可以分別作為key的一部分。

首先我們應該考慮的是rowkey的設置,第一:散列或者反轉,保證數據會隨機分布到不同的region當中。第二:預分區,先對數據做一個基本的統計,比如我們預分十個區,我們可以統計一下每個區的startrow和endrow,這樣保證每個區的數據相當,另外這樣的好處是當我們根據rowkey查詢的時候,可以保證直接定位到某個分區。我們線上的數據就是採用薯鬧的第二種方式。

然後我們應該考慮rowkey的組成。分兩種情況,第一種情況:維度不是特別多,我們完全可以把各個維度分別作為rowkey的一部分,比如上文提到的需求,就是採用的這種方式,因為一共四個維度,相對來說比較少。第二種情況:維度過多,如果都作為rowkey的一部分的話長度太大,此時建議考慮二級索引,舉個例子:比如對於上面提到的四個維度,如果現在進行擴展,ip,埠,協議需要定位到源和目的,這樣的話,整個維度提升到了七個,此時就建議採用二級索引。

目前我們已經確定了hbase存儲,並且採用預分區的方式並且採用rowkey進行過濾查詢,那麼現在考慮rowkey的設計。從技術角度考慮,預分區的方式時間戳不能作為第一部分,這樣一定會出現數據傾斜的現象;從業務角度考慮,我們定位日誌的時候,首先需要定位ip,然後是埠,最後才是協議,也就是說我們的用戶去定位日誌的時候,如果定位到埠,那必須先定位ip,如果定位協議的話,必須先定位ip和埠。

綜上所述,我們的rowkey設計為ip+timestamp+port+prot

設計搞定之後,我們再考慮查詢的問題。我們知缺此道對於hbase的查詢,最快的方式就是get,這樣的話,可以迅速定位到一條數據。而get查詢其實就是scan的特殊情況,只是startRow和endRow一樣。所以此時我們可以採用scan+startRow+endRow的方式進行操作。

e.g

這樣的話就可以吧該范圍的數據查出來,當然我們可以再在內存中進行過濾

當著startRow和endRow需要注意一些情況。

請參考:https://www.cnblogs.com/llphhl/p/5719119.html

㈢ 為什麼elasticsearch和hbase的jar包沖突過濾不掉

其實就是將org.joda等4個可能有沖突的jar包通過maven-shade-plugin插件遷移後重新打個jar包從而使得在引入這個jar包時能夠使用該jar包自己的依賴而不是使用外部依賴。

這里笨小蔥一開始犯了個嚴重的錯誤,我一直以為只有guava這一個包沖突了,所以一開始並沒有做com.google.common的jar包遷移。所以在使用hbase時出現了如下錯誤:
Java.lang.IllegalAccessError: tried to access method com.google.common.base........
後來引入com.google.common後才解決問題。
pom文件配置完成後運行:
mvn clean install

然後看到build success的話表示打包成功,新的依賴包會在.m2文件的倉庫中。
下面回到原來的集成項目的pom文件中。引入該jar包: (注意這里需要排除掉es2.2.0的jar包,不然maven會將2.2.0的jar包打進去,造成沖突)

<dependency>
<groupId>my.elasticsearch</groupId>
<artifactId>es-shaded</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
</exclusions>
</dependency>

好啦,到這里測試一下會發現,沖突問題解決啦。

㈣ hbase採用了什麼樣的數據結構

HBase採用了類似Google Bigtable的數據模型,即一個稀疏的、分布式的、持久化的多維映射表,每個表都由行鍵、列族、列限定符和時間戳組成。
在底層實現上,HBase使用了基於Hadoop的分布式文件系統HDFS來存儲數據,並且使用了一搏皮搜種稱為LSM-Tree(Log-Structured Merge-Tree)的數據結構來管理數據。LSM-Tree是一種支持高寫入吞吐量的數據結構,它把數據分成多個層,每層採用不同的策略來管理數據,包括內存中的緩存、寫入磁碟的SSTable、和合並SSTable的操作。通過這種方式,HBase能夠支持高並發、高吞吐量的數據寫入,同時保證數據的一致性和可靠性。
另外,HBase還採用了Bloom Filter、MemStore和Compaction等技術來提高數據查詢效率和存儲效率。Bloom Filter是一種快速的數據過濾技術,可以幫助HBase快速地過濾掉無效的查詢請求,提高查詢效率。MemStore是一種緩存機制,可以幫助基歷HBase加速數據寫入,提高數據握中寫入效率。Compaction則是一種數據壓縮和合並技術,可以幫助HBase節省存儲空間,提高存儲效率。
綜上所述,HBase採用了LSM-Tree、Bloom Filter、MemStore和Compaction等多種數據結構和技術,以實現高並發、高吞吐量的分布式存儲和查詢功能。

㈤ 用happybase happy地查詢hbase數據

用happybase進行hbase中數據的增刪改查

前提:已經安裝happybase庫(pip install happybase),已有hbase環境並開啟thrift通訊埠(nohup hbase thrift start &),thrift默認埠為9090,10.10.30.200為hbase主機ip

scan方法:

參數:

row_start、row_stop:起始和終止rowkey,查詢兩rowkey間的數據

row_prefix:rowkey前綴。註:使用row_prefix的時候,row_start和row_stop不能使用

filter:要使用的過濾器(hbase 0.92版本及以上生效)

timestamp:按指定時間戳查詢

reverse:默認為False。為True時,scan結果按rowkey倒序排列

e.g:

put方法:

e.g:

△ 如put中改桐的rowkey已存在,則為修改數據

delete方法:

row:刪除rowkey為row的數據

columns:指定columns參數塌枯時,核衫坦刪除

e.g:

刪除rowkey為student2的name數據:

刪除成功:

batch方法:

1、批量操作

2、使用with管理批量

row方法及rows()方法,檢索指定rowkey的數據

檢索一條:

檢索多條:

返回結果:

e.g:

結果:

暫時就這些0v0

㈥ hbase清理數據 用setTimeRange 方法怎麼腳本實現

HBase是Google Bigtable的開源實現,它利用Hadoop HDFS作為其文件存儲系統,利用Hadoop MapRece來處理HBase中的海量數據,利用Zookeeper作為協同服務。

1. 簡介

HBase是一個分布式的、面向列的開源資料庫,源於google的一篇論文《bigtable:一個結構化數據的分布式存儲系統》。HBase是Google Bigtable的開源實現,它利用Hadoop HDFS作為其文件存儲系統攜逗,利用Hadoop MapRece來處理HBase中的海量數據,利用Zookeeper作為協同服務。

2. HBase的表結構

HBase以表的形式存儲數據。表有行和列組成。列劃分為若干個列族/列簇(column family)。

Row Key column-family1 column-family2 column-family3
column1 column2 column1 column2 column3 column1
key1
key2
key3

如上圖所示,key1,key2,key3是三條記錄的唯一的row key值,column-family1,column-family2,column-family3是三個列族,每個列族下又包括幾列。比如column-family1這個列族下包括兩列,名字是column1和column2,t1:abc,t2:gdxdf是由row key1和column-family1-column1唯一確定的一個單元cell。這個cell中有兩個數據,abc和gdxdf。兩個值的時間戳不一樣,分別是t1,t2, hbase會返回最新時間的值給請求者。
這些名詞的具體含義如下:
(1) Row Key
與nosql資料庫們一樣,row key是用來檢索記錄的主鍵。訪問hbase table中的行,只有三種方式:
(1.1) 通過單個row key訪問
(1.2) 通過row key的range
(1.3) 全表掃描
Row key行鍵 (Row key)可以是任意字元串(最大長度是 64KB,實際應用中長度一般為 10-100bytes),在hbase內部,row key保存為位元組數組。
存儲時,數據按照Row key的字典序(byte order)排序存儲。設計key時,要充分排序存儲這個特性,將經常一起讀取的行存儲放到一起。(位置相關性)
注意:
字典序對int排序的結果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作左填充。
行的一次讀寫是原子操作 (不論一次讀寫多少列)。這個設計決策能夠使用戶很容易的理解程序在對同一個行進行並發更新操作時的行為。
(2) 列族 column family
hbase表中的每個列,都歸屬與某個列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如courses:history , courses:math 都屬於 courses 這個列族。
訪問控制、磁碟和內存的使用統計都是在列族層面進行的。實際應用中,列族上的控制許可權能幫助我們管理不同類型的應用:我們允許一些應用可以添加新的基本數據、一些應用可以櫻隱祥讀取基本數據並創建繼承的列族、一些應用則只允許瀏覽數據(甚至可能因為隱私的原因不能瀏覽所有數據)。
(3) 單元 Cell
HBase中通過row和columns確定的為一個存貯單元稱為cell。由{row key, column( =<family> + <label>), version} 唯一確定的單元。cell中的數據是沒有類型的,全部是位元組碼形式存貯。
(4) 時間戳 timestamp
每個cell都保存著脊搏同一份數據的多個版本。版本通過時間戳來索引。時間戳的類型是 64位整型。時間戳可以由hbase(在數據寫入時自動 )賦值,此時時間戳是精確到毫秒的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程序要避免數據版本沖突,就必須自己生成具有唯一性的時間戳。每個cell中,不同版本的數據按照時間倒序排序,即最新的數據排在最前面。
為了避免數據存在過多版本造成的的管理 (包括存貯和索引)負擔,hbase提供了兩種數據版本回收方式。一是保存數據的最後n個版本,二是保存最近一段時間內的版本(比如最近七天)。用戶可以針對每個列族進行設置。
3. HBase shell的基本用法
hbase提供了一個shell的終端給用戶交互。使用命令hbase shell進入命令界面。通過執行 help可以看到命令的幫助信息。
以網上的一個學生成績表的例子來演示hbase的用法。
name grad course
math art
Tom 5 97 87
Jim 4 89 80
這里grad對於表來說是一個只有它自己的列族,course對於表來說是一個有兩個列的列族,這個列族由兩個列組成math和art,當然我們可以根據我們的需要在course中建立更多的列族,如computer,physics等相應的列添加入course列族。

㈦ HBase Split 簡介

Hbase Split 是一個很重要的功能,HBase 通過把數據分配到一定數量的 Region 來達到負載均衡的。當 Region 管理的羨芹數據過多時,可以通過手動或自動的方式觸發 HBase Split 將一個 Region 分裂成兩個新的子 Region,並對父 Region 進行清除處理(不會立即清除)。

HBase 為什麼需要 Split?
相比於傳統 RDBMS 對大數據表的擴展方式,HBase 天然支持自動分庫兄李畢分表,實現的基礎就是 Split 和 Rebalance。
Region 是管理一段連續的 Rowkey 的核心單元,當 Region 管理的 Rowkey 數量多時,或 HFile 文件較大時,都會影響到性能。

一個表剛被創建的時候,Hbase 默認分配一個 Region 給表,所有的讀寫請求都會訪問到一個 RegionServer 上的唯一一個 Region。這樣就達不到負載均衡的效果了,集群中的其他 RegionServer 就會處於空閑的狀態(考慮只有一個表的情況)。解決這個問題可以有兩種方法:

Hbase 自帶了兩種 pre-split 的演算法,分別是 HexStringSplit 和 UniformSplit 。HexStringSplit 適用於十六進制字元的 Rowkey(MD5)。UniformSplit 適用於隨機位元組組成的 Rowkey(Hash)。

HBase 中共有3種情況會觸發 HBase Split:

目前已經的支持觸發策略多達6種,每種觸發策略都有各自的適用場景,可以根據業務在表級別(Column family 級別)選擇不同的切分觸發策略。一般情況下使用默認切分策略即可。

Region split 的過程可以簡單的理解為:在 Region 中找到一個合適的 split point,在這個 split point 上將該 Region 的數據劃分為兩個新的 Region。當然這個過程的實現起來很復雜,Split 發生時,新創建的子 Region 不會立即將所有數據重新寫入新文件,而是會創建類似於符號鏈接文件的小文件,稱為引用文件(reference files),根據 split point,指向父存儲文件的頂部或底部(父 Region 的一半數據)。

下文引用官方博客對 HBase split 流程的解釋:

HBase 將整個切分過程包裝成了一個事務,為了保證切分事務的原子性。整個分裂事務過程分為三個階段:prepare – execute – (rollback)

再次強調,為了減少對業務的影響,Region 的 Split 並不涉及到數據遷移的操作,而只是創建了對父Region的指向。只有在做大合並的時候,才會將數據進行遷移。

整個region切分是一個比較復雜的過程,涉及子步驟,因此必須保證整個 Split 過程的事務性,即要麼完全成功,要麼完全未開始,在任何情況下也不能出現 Split 只完成一半的情況。為了實現事務性,Hbase 設計了使用狀態機(見 SplitTransaction 類)的方式保存切分過程中的每個子步驟狀態,這樣一旦出現異常,系統可以擾搏根據當前所處的狀態決定是否回滾,以及如何回滾。

目前實現中這些中間狀態都只存儲在內存中,因此一旦在切分過程中出現 RegionServer 宕機的情況,有可能會出現切分處於中間狀態的情況,也就是RIT狀態。這種情況下可使用 hbck 工具,根據實際情況查看並分析解決方案。

在2.0版本 HBase 實現了新的分布式事務框架 Procere V2(HBASE-12439),使用 HLog 存儲這種單機事務(DDL、Split、Move 等操作)的中間狀態。保證即使在事務執行過程中參與者發生了宕機,依然可以使用 HLog 作為協調者對事務進行回滾操作或重新提交。

根據文件名來判斷是否是 reference 文件:

執行 Region Split 過程不涉及數據的移動,所以可以很快完成。新生成的子 Region 文件中沒有任何用戶數據,而是一個 reference 文件,文件中存儲的是一些元數據信息,包括切分點的 Rowkey 等。引入了以下問題:

使用 Split 時有以下需要注意的:

Reference:
https://zh.hortonworks.com/blog/apache-hbase-region-splitting-and-merging/
http://hbase.apache.org/book.html

㈧ shell怎樣過濾掉hbase-site.xml文件中的注釋項

hbase接到命令後存下變化信息或者寫入失敗異常的拋出,默認情況下。執行寫入時會寫到兩個地方:預寫式日誌(write-ahead log,也稱hlog)和memstore,以保證數據持久化。memstore是內存里的寫入緩沖區。客戶端在寫的過程中不會與底層的hfile直接交互,當menstore寫滿時,會刷新到硬碟,生成一個新的hfile.hfile是hbase使用的底層存儲格式。menstore的大小由hbase-site.xml文件里的系統級屬性hbase.hregion.memstore.flush.size來定義。
hbase在讀操作上使用了lru緩存機制(blockcache),blockcache設計用來保存從hfile里讀入內存的頻繁訪問的數據,避免硬碟讀。每個列族都有自己的blockcache。blockcache中的block是hbase從硬碟完成一次讀取的數據單位。block是建立索引的最小數據單位,也是從硬碟讀取的最小數據單位。如果主要用於隨機查詢,小一點的block會好一些,但是會導致索引變大,消耗更多內存,如果主要執行順序掃描,大一點的block會好一些,block變大索引項變小,因此節省內存。
LRU是Least Recently Used 近期最少使用演算法。內存管理的一種頁面置換演算法,對於在內存中但又不用的數據塊(內存塊)叫做LRU,操作系統會根據哪些數據屬於LRU而將其移出內存而騰出空間來載入另外的數據。

㈨ hbase 多條件查詢or 怎麼過濾掉不需要查的列

hbase的region是按行劃分,而非按列,如果你讀取指定一行的所有列數據,regionServer雖然無法保證你的所有數據都在一個HFile中,但是至少是在一個Region中。但是具體的HFile所在的hdfs的節點那就不是HBase關心的事了,因為HBase的存儲是依賴與hdfs,所以底層存儲讀取的事會由NameNode操心,NameNode會考慮就近原則,而提供最高效的數據讀取策略。
你的數據傳輸是必然,但是HBase不會計算,計算是發生在你將想要的數據獲取到之後再自行進行計算的。你讀取大量數據必然會有大量數據傳輸,HBase只是將提供了一種高效的數據讀取策略,盡量減小數據傳輸量

㈩ hbase的過濾器有哪些

HBase為篩選數據提供了一組過濾器,通過這個過濾器可以在中的數據的多個維度(行,列,數據版本)上進行對數據的篩選操作,也就是說過濾器最終能夠篩選的數據能夠細化到具體的一個存儲單元格上(由行鍵,列明,時間戳定位)。通常來說,通過行鍵,值來篩選數據的應用場景較多。

1. RowFilter:篩選出匹配的所有的行,對於這個過濾器的應用場景,是非常直觀的:使用BinaryComparator可以篩選出具有某個行鍵的行,或者通過改變比較運算符(下面的例子中是CompareFilter.CompareOp.EQUAL)來篩選出符合某一條件的多條數據,以下就是篩選出行鍵為row1的一行數據:

[java]view plain

閱讀全文

與hbase過濾重復數據相關的資料

熱點內容
煙嘴過濾器堵了怎麼辦 瀏覽:372
污水處理加二氧化氯 瀏覽:877
濾芯上的標簽如何清除 瀏覽:449
大眾寶來6at變速箱濾芯在哪裡 瀏覽:789
哈爾濱道外污水處理廠 瀏覽:115
含煤廢水的主要成分 瀏覽:156
為什麼污水井噴 瀏覽:617
廣汽傳祺為什麼一萬公里換汽油濾芯 瀏覽:857
萬和凈水器提示保養需要換什麼 瀏覽:227
反滲透膜哪個品牌好 瀏覽:695
練焦工業廢水設計回用規范 瀏覽:212
乙二醇是蒸餾水嗎 瀏覽:320
為什麼水族館魚缸里的水沒有水垢 瀏覽:425
葡萄糖酸鈉廢水分散劑 瀏覽:352
嘉興污水排放標准最新 瀏覽:328
油煙凈化器保養表怎麼做 瀏覽:113
廣東滌綸紡粘無紡布過濾無紡布 瀏覽:50
茅台純凈水多少錢一瓶 瀏覽:797
瀝青廢水有什麼影響 瀏覽:663
agcen艾吉森空氣凈化器怎麼樣 瀏覽:272