大數(shù)據(jù)實(shí)時(shí)檢索場(chǎng)景化解決方案_第1頁(yè)
大數(shù)據(jù)實(shí)時(shí)檢索場(chǎng)景化解決方案_第2頁(yè)
大數(shù)據(jù)實(shí)時(shí)檢索場(chǎng)景化解決方案_第3頁(yè)
大數(shù)據(jù)實(shí)時(shí)檢索場(chǎng)景化解決方案_第4頁(yè)
大數(shù)據(jù)實(shí)時(shí)檢索場(chǎng)景化解決方案_第5頁(yè)
已閱讀5頁(yè),還剩86頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

H13-723大數(shù)據(jù)HCIP-BigDataDeveloperV2.0中文V2.0張新旗/zwx7018442019.06.30黃浩洋hwx690472新開(kāi)發(fā)黃浩洋hwx6904722020.11.28張新旗/zwx701844汪孟德/wwx711842大數(shù)據(jù)實(shí)時(shí)檢索場(chǎng)景化解決方案隨著社會(huì)和科學(xué)地發(fā)展,各行業(yè)積累的數(shù)據(jù)量急劇增加,用戶(hù)對(duì)搜索時(shí)延的要求變得更高,如金融行業(yè)查詢(xún)個(gè)人征信、交易記錄等信息,公安部門(mén)查詢(xún)?nèi)藛T信息、社交關(guān)系等。從大量而繁雜的數(shù)據(jù)中快速獲取想要的數(shù)據(jù),是當(dāng)下急需解決的問(wèn)題。學(xué)習(xí)完本課程,您能夠掌握:實(shí)時(shí)檢索的應(yīng)用場(chǎng)景實(shí)時(shí)檢索采用的技術(shù)方案實(shí)時(shí)檢索的實(shí)際案例實(shí)時(shí)檢索場(chǎng)景應(yīng)用實(shí)時(shí)檢索技術(shù)介紹實(shí)時(shí)檢索實(shí)際案例實(shí)時(shí)檢索的概念實(shí)時(shí)檢索就是根據(jù)關(guān)鍵詞對(duì)系統(tǒng)內(nèi)的一些信息進(jìn)行快速搜索,實(shí)現(xiàn)即搜即得的效果,強(qiáng)調(diào)的是實(shí)時(shí)低延遲。其能夠方便人們快速拿到搜索的結(jié)果,而這些內(nèi)容往往才是人們真正關(guān)心的、可用的數(shù)據(jù)。行業(yè)應(yīng)用

-

金融根據(jù)ID(日志類(lèi)型、卡號(hào)等)和時(shí)間段進(jìn)行查詢(xún)。查詢(xún)交易憑證,追溯交易,以及查詢(xún)客戶(hù)信用記錄,幫助客戶(hù)快速借款等。整合多方數(shù)據(jù),形成關(guān)系網(wǎng)絡(luò),查詢(xún)關(guān)聯(lián)關(guān)系,可用于反洗錢(qián)、風(fēng)控等場(chǎng)景。金融系統(tǒng)信貸系統(tǒng)信用卡系統(tǒng)企業(yè)征信系統(tǒng)日志庫(kù)交易記錄庫(kù)征信記錄庫(kù)網(wǎng)銀日志個(gè)人征信系統(tǒng)專(zhuān)題庫(kù)日志信息查詢(xún)交易記錄查詢(xún)信用記錄查詢(xún)反洗錢(qián)分析資金流向網(wǎng)絡(luò)場(chǎng)景特征上述兩個(gè)場(chǎng)景典型的業(yè)務(wù)特點(diǎn):高并發(fā)查詢(xún)速度快查詢(xún)條件簡(jiǎn)單存在海量視頻和圖片等小文件檢索性能要求高檢索需要在秒級(jí)響應(yīng),不承擔(dān)復(fù)雜查詢(xún)和統(tǒng)計(jì)類(lèi)查詢(xún)高并發(fā)查詢(xún)通常有大于100的并發(fā)查詢(xún)數(shù)據(jù)量大PB級(jí)數(shù)據(jù)量,集群規(guī)模在1000節(jié)點(diǎn)以上。對(duì)圖數(shù)據(jù)庫(kù)的場(chǎng)景,點(diǎn)個(gè)數(shù)在10億以上,邊個(gè)數(shù)在100億以上支持結(jié)構(gòu)化和非結(jié)構(gòu)化需要同時(shí)保存結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù),經(jīng)常用來(lái)對(duì)圖片等小文件進(jìn)行檢索高效的數(shù)據(jù)加載數(shù)據(jù)加載要求高,每小時(shí)可以加載TB級(jí)數(shù)據(jù)支持圖檢索支持檢索圖數(shù)據(jù),支持圖標(biāo)準(zhǔn)查詢(xún)接口核心訴求解決方案業(yè)務(wù)應(yīng)用實(shí)時(shí)檢索業(yè)務(wù)話(huà)費(fèi)查詢(xún)?nèi)罩静樵?xún)軌跡查詢(xún)實(shí)時(shí)檢索平臺(tái)源數(shù)據(jù)實(shí)時(shí)檢索引擎ElasticSearchHBase流式數(shù)據(jù)文件數(shù)據(jù)GES(可選)數(shù)據(jù)采集批量加載(Loader/Spark/第三方加載

)實(shí)時(shí)加載(SparkStreaming/第三方采集)GES導(dǎo)入工具圖數(shù)據(jù)實(shí)時(shí)檢索引擎中各組件的聯(lián)系與定位主鍵查詢(xún)非主鍵查詢(xún)文檔檢索海量數(shù)據(jù)實(shí)時(shí)搜索圖查詢(xún)分析HBase√FIHD可支持二級(jí)索引√√ElasticSearch√√√√海量數(shù)據(jù)性能不如HBase,性?xún)r(jià)比低√熱數(shù)據(jù)實(shí)時(shí)GES√數(shù)據(jù)存儲(chǔ)在HBase和ElasticSearch√復(fù)雜圖查詢(xún)近實(shí)時(shí)√(多選題)___加___的組合滿(mǎn)足了大部分的用戶(hù)實(shí)時(shí)查詢(xún)?cè)V求?()MapReduceHBaseElasticSearchHive(判斷題)ElasticSearch能夠支持文檔檢索?()正確錯(cuò)誤

(多選題)實(shí)時(shí)檢索解決方案能夠滿(mǎn)足哪些需求?()多級(jí)索引查詢(xún)圖查詢(xún)查詢(xún)延遲很大文檔檢索海量數(shù)據(jù)存儲(chǔ)

實(shí)時(shí)檢索場(chǎng)景應(yīng)用實(shí)時(shí)檢索技術(shù)介紹HBase

ElasticSearchGES實(shí)時(shí)檢索配置方案HBase簡(jiǎn)介HBase是一個(gè)分布式的NoSQL數(shù)據(jù)庫(kù),其特點(diǎn)高可靠、高性能、面向列、可伸縮:適合存儲(chǔ)大表數(shù)據(jù),并且可實(shí)時(shí)讀寫(xiě)大表數(shù)據(jù);表結(jié)構(gòu)稀疏;數(shù)據(jù)底層存儲(chǔ)于HadoopHDFS分布式文件系統(tǒng);利用ZooKeeper作為協(xié)同服務(wù)。HBase應(yīng)用場(chǎng)景HBase適合具有如下需求的應(yīng)用:海量數(shù)據(jù)(TB、PB);不需要完全擁有傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)所具備的ACID特性;高吞吐量;需要在海量數(shù)據(jù)中實(shí)現(xiàn)高效的隨機(jī)讀??;需要很好的性能伸縮能力;能夠同時(shí)處理結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)。HBase系統(tǒng)架構(gòu)ClientZooKeeperHMasterHRegionServerHRegionStoreMemStoreStoreStoreFileStoreFile……StoreFile…HLogHBase…DFSClientDataNodeDataNodeDataNodeDataNodeDataNode…HRegionServerHRegionStoreStoreStoreFileStoreFile……StoreFile…HLog…DFSClient……HDFSHFileHFileHFileHFileHFileHFileMemStoreMemStoreMemStoreHBase存儲(chǔ)模型HBase的底層數(shù)據(jù)以KeyValue的形式存在,KeyValue具有特定的格式。KeyValue中擁有時(shí)間戳、類(lèi)型等關(guān)鍵信息。同一個(gè)Key值可以關(guān)聯(lián)多個(gè)Value,每一個(gè)KeyValue都擁有一個(gè)Qualifier標(biāo)識(shí)。即使是Key值相同,Qualifier也相同的多個(gè)KeyValue,也可能有多個(gè)版本,此時(shí)使用時(shí)間戳來(lái)區(qū)分,這就是同一條數(shù)據(jù)記錄的多版本。IDNameAddressPhoneValue-ID01Key-01Value-Name01Key-01Value-Phone01Key-01Value-Address01Key-01HBase緩存機(jī)制HBase提供2種類(lèi)型的緩存結(jié)構(gòu):MemStore和BlockCache。MemStore:HBase數(shù)據(jù)先寫(xiě)入HLog之中,并同時(shí)寫(xiě)入MemStore,待滿(mǎn)足一定條件后將MemStore中數(shù)據(jù)刷到磁盤(pán),能提升HBase的寫(xiě)性能和讀性能。BlockCache:HBase會(huì)將一次文件查找的Block塊緩存到Cache中,以便后續(xù)同一請(qǐng)求或者相鄰數(shù)據(jù)查找請(qǐng)求,可以直接從內(nèi)存中獲取,避免IO操作。HBase緩存機(jī)制HBase提供2種類(lèi)型的緩存結(jié)構(gòu):MemStore和BlockCache。MemStore:HBase數(shù)據(jù)先寫(xiě)入HLog之中,并同時(shí)寫(xiě)入MemStore,待滿(mǎn)足一定條件后將MemStore中數(shù)據(jù)刷到磁盤(pán),能提升HBase的寫(xiě)性能和讀性能。BlockCache:HBase會(huì)將一次文件查找的Block塊緩存到Cache中,以便后續(xù)同一請(qǐng)求或者相鄰數(shù)據(jù)查找請(qǐng)求,可以直接從內(nèi)存中獲取,避免IO操作。HBaseBloomFilter

BloomFilter用來(lái)優(yōu)化一些隨機(jī)讀取的場(chǎng)景,即Get場(chǎng)景。它可以被用來(lái)快速的判斷一條數(shù)據(jù)在一個(gè)大的數(shù)據(jù)集合中是否存在。BloomFilter在判斷一個(gè)數(shù)據(jù)是否存在時(shí),擁有一定的誤判率。但對(duì)于“該條數(shù)據(jù)不存在”的判斷結(jié)果是可信的。HBase的BloomFilter的相關(guān)數(shù)據(jù),被保存在HFile中。111100000000000……x111100000000000……abcd

HBase客戶(hù)端HBase提供客戶(hù)端命令的方式供使用人員對(duì)數(shù)據(jù)庫(kù)進(jìn)行各種操作。提供表的增刪改查,表快照備份等。#進(jìn)入HBase客戶(hù)端>hbaseshell#查看幫助命令>help#查看列表信息>list#創(chuàng)建表,指導(dǎo)列族>create'my_tb','info'#創(chuàng)建命名空間>create_namespace'ns'#查看命名空間的表>list_namespace_tables'ns'#插入數(shù)據(jù)>put'my_tb','20190501','info:name','ez'#掃描表數(shù)據(jù)>scan'my_tb'#get查詢(xún)數(shù)據(jù)>get'my_tb','20190501'SQLOnHBaseApachePhoenix將SQL查詢(xún)編譯為一系列HBase掃描。可以為小型查詢(xún)提供毫秒級(jí)的性能,或者為數(shù)千萬(wàn)行提供數(shù)秒的性能。其他SQL使用方式還有:Hive、SparkSQL等。PhoenixSQL支持的部分語(yǔ)法:SELECT|UPSERTVALUES|UPSERTSELECTDELETE|CREATETABLE|DROPTABLE|CREATEFUNCTION|DROPFUNCTION|CREATEVIEWDROPVIEW|ALTER|CREATEINDEXDROPINDEX|ALTERINDEX|EXPLAIN|UPDATESTATISTICS|CREATESCHEMA|USEDROPSCHEMA|GRANT|REVOKESELECT*FROMTESTLIMIT1000;CREATETABLEmy_schema.my_table(idBIGINTnotnullprimarykey,dateDate);DELETEFROMTESTWHEREID=123;例如:Phoenix語(yǔ)法參見(jiàn):http:///languageSQLOnHBaseApachePhoenix將SQL查詢(xún)編譯為一系列HBase掃描??梢詾樾⌒筒樵?xún)提供毫秒級(jí)的性能,或者為數(shù)千萬(wàn)行提供數(shù)秒的性能。其他SQL使用方式還有:Hive、SparkSQL等。PhoenixSQL支持的部分語(yǔ)法:SELECT|UPSERTVALUES|UPSERTSELECTDELETE|CREATETABLE|DROPTABLE|CREATEFUNCTION|DROPFUNCTION|CREATEVIEWDROPVIEW|ALTER|CREATEINDEXDROPINDEX|ALTERINDEX|EXPLAIN|UPDATESTATISTICS|CREATESCHEMA|USEDROPSCHEMA|GRANT|REVOKESELECT*FROMTESTLIMIT1000;CREATETABLEmy_schema.my_table(idBIGINTnotnullprimarykey,dateDate);DELETEFROMTESTWHEREID=123;例如:Phoenix語(yǔ)法參見(jiàn):http:///languageAPI使用-創(chuàng)建刪除表通過(guò)org.apache.hadoop.hbase.client.Admin實(shí)例的createTable方法來(lái)創(chuàng)建表,并指定表名、列族名。通過(guò)org.apache.hadoop.hbase.client.Admin實(shí)例的deleteTable方法來(lái)刪除表。Adminadmin=conn.getAdmin();admin.createTable(tableName);Adminadmin=conn.getAdmin();//先停用表

admin.disableTable(tableName);//執(zhí)行刪除admin.deleteTable(tableName);API使用-插入刪除數(shù)據(jù)HBase通過(guò)Table實(shí)例的put方法來(lái)插入數(shù)據(jù),可以是一行數(shù)據(jù)也可以是數(shù)據(jù)集。HBase通過(guò)Table實(shí)例的delete方法來(lái)Delete數(shù)據(jù),可以是一行數(shù)據(jù)也可以是數(shù)據(jù)集。Tabletable=conn.getTable(tableName);List<Put>puts=newArrayList<Put>();Putput=newPut(Bytes.toBytes("012005000201"));put.addColumn(familyName,qualifiers[0],Bytes.toBytes("ZhangSan"));puts.add(put);table.put(puts);byte[]rowKey=Bytes.toBytes("012005000201");Tabletable=conn.getTable(tableName);//創(chuàng)建一個(gè)Delete對(duì)象Deletedelete=newDelete(rowKey);//表對(duì)象的delete方法傳入delete對(duì)象為參數(shù),提交刪除請(qǐng)求table.delete(delete);API使用-Get讀取數(shù)據(jù)要從表中讀取一條數(shù)據(jù),首先需要實(shí)例化該表對(duì)應(yīng)的Table實(shí)例,然后創(chuàng)建一個(gè)Get對(duì)象。也可以為Get對(duì)象設(shè)定參數(shù)值,如列族的名稱(chēng)和列的名稱(chēng)。查詢(xún)到的行數(shù)據(jù)存儲(chǔ)在Result對(duì)象中,Result中可以存儲(chǔ)多個(gè)Cell。byte[]familyName=Bytes.toBytes("info");byte[][]qualifier={Bytes.toBytes("name"),Bytes.toBytes("address")};byte[]rowKey=Bytes.toBytes("012005000201");Tabletable=conn.getTable(tableName);Getget=newGet(rowKey);get.addColumn(familyName,qualifier[0]);get.addColumn(familyName,qualifier[1]);Resultresult=table.get(get);for(Cellcell:result.rawCells()){Example}API使用-Scan讀取數(shù)據(jù)要從表中讀取數(shù)據(jù),首先需要實(shí)例化該表對(duì)應(yīng)的Table實(shí)例,然后創(chuàng)建一個(gè)Scan對(duì)象,并針對(duì)查詢(xún)條件設(shè)置Scan對(duì)象的參數(shù)值,為了提高查詢(xún)效率,最好指定StartRow和StopRow。查詢(xún)結(jié)果的多行數(shù)據(jù)保存在ResultScanner對(duì)象中,每行數(shù)據(jù)以Result對(duì)象形式存儲(chǔ),Result中存儲(chǔ)了多個(gè)Cell。Tabletable=conn.getTable(tableName);//創(chuàng)建Scan對(duì)象.Scanscan=newScan();//添加列族和列名scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"));//設(shè)置緩存大小,也可設(shè)置起始結(jié)束的rowkey等scan.setCaching(1000);//提交Scan請(qǐng)求ResultScannerrScanner=table.getScanner(scan);//解析處理結(jié)果for(Resultr=rScanner.next();r!=null;r=rScanner.next()){for(Cellcell:r.rawCells()){Example}}API使用-過(guò)濾器FilterHBaseFilter主要在Scan和Get過(guò)程中進(jìn)行數(shù)據(jù)過(guò)濾,通過(guò)設(shè)置一些過(guò)濾條件來(lái)實(shí)現(xiàn),如設(shè)置RowKey,列名或者列值的過(guò)濾條件。Tabletable=conn.getTable(tableName);Scanscan=newScan();scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"));//創(chuàng)建過(guò)濾對(duì)象,單列值過(guò)濾器,參數(shù)為列族、列名、過(guò)濾列值“XuBing”SingleColumnValueFilterfilter=newSingleColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("name"),CompareOp.EQUAL,Bytes.toBytes("XuBing"));//為scan對(duì)象設(shè)置過(guò)濾器對(duì)象,即掃描設(shè)置過(guò)濾條件scan.setFilter(filter);//提交掃描請(qǐng)求ResultScannerrScanner=table.getScanner(scan);//解析處理結(jié)果for(Resultr=rScanner.next();r!=null;r=rScanner.next()){for(Cellcell:r.rawCells()){Example}}HBase性能優(yōu)化-

表設(shè)計(jì)Region:區(qū)域。預(yù)先創(chuàng)建多個(gè)Region,當(dāng)數(shù)據(jù)寫(xiě)入HBase時(shí),會(huì)按照RowKey對(duì)應(yīng)Region分區(qū)情況,在集群內(nèi)做數(shù)據(jù)的負(fù)載均衡。RowKey:行鍵。滿(mǎn)足實(shí)際業(yè)務(wù)需求情況下,長(zhǎng)度越小越好,考慮散列性(連續(xù)的RowKey易導(dǎo)致負(fù)載不均衡)。散列存儲(chǔ)可采用取反或Hash來(lái)實(shí)現(xiàn)。ColumnFamily:列簇。一張表里不要定義太多的列簇,因?yàn)槟硞€(gè)列簇在flush的時(shí)候,它鄰近的列簇也會(huì)因關(guān)聯(lián)效應(yīng)被觸發(fā)flush,最終導(dǎo)致系統(tǒng)產(chǎn)生更多的I/O。MaxVersion:最大版本數(shù)量。如果只需要保存最新版本的數(shù)據(jù),那么可以設(shè)置最大版本數(shù)為1。TimeToLive:數(shù)據(jù)存活時(shí)間(秒)。例如只需要存儲(chǔ)最近兩天的數(shù)據(jù),那么可以設(shè)置存活時(shí)間為2*24*60*60。HBase性能優(yōu)化-

寫(xiě)表操作Table參數(shù):WriteBuffer:實(shí)際寫(xiě)入數(shù)據(jù)量的多少來(lái)設(shè)置Table客戶(hù)端的寫(xiě)buffer大小;WALFlag:對(duì)于相對(duì)不太重要的數(shù)據(jù),(謹(jǐn)慎使用)放棄寫(xiě)WAL日志,從而提高數(shù)據(jù)寫(xiě)入的性能。批量寫(xiě):通過(guò)調(diào)用Table實(shí)例的put(List)批量寫(xiě)入多行記錄,只需一次網(wǎng)絡(luò)I/O開(kāi)銷(xiāo),可以明顯的提升寫(xiě)性能。HBase性能優(yōu)化-

讀表操作ScannerCaching配置:Scan時(shí)指定需要的列簇或者列,可以減少網(wǎng)絡(luò)傳輸數(shù)據(jù)量;在HBase的conf配置掃描器緩存;通過(guò)調(diào)用Scan實(shí)例的setCaching(intcaching)進(jìn)行配置。批量讀:通過(guò)調(diào)用Table實(shí)例的get(List)批量讀取多行記錄,只需一次網(wǎng)絡(luò)I/O開(kāi)銷(xiāo),可以明顯的提升讀性能。(多選題)HBase架構(gòu)中包含哪些?()HMasterHRegionServerClientResourceManager(多選題)哪些方式能夠操作HBase的數(shù)據(jù)?()客戶(hù)端命令PhoenixSQLJavaAPIHiveSQL(多選題)以下哪些場(chǎng)景不能使用HBase作為存儲(chǔ)系統(tǒng)?()需要ACID特性海量數(shù)據(jù)存儲(chǔ)主鍵查詢(xún)大文件,視頻等

實(shí)時(shí)檢索場(chǎng)景應(yīng)用實(shí)時(shí)檢索技術(shù)介紹HBaseElasticSearchGES實(shí)時(shí)檢索配置方案ElasticSearch簡(jiǎn)介ElasticSearch是一個(gè)高性能,基于Lucene的全文檢索服務(wù),是一個(gè)分布式的Restful風(fēng)格的搜索和數(shù)據(jù)分析引擎,也可以作為NoSQL數(shù)據(jù)庫(kù)使用:對(duì)Lucene進(jìn)行了擴(kuò)展;原型環(huán)境和生產(chǎn)環(huán)境可無(wú)縫切換;能夠水平擴(kuò)展;支持結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。ElasticSearch特點(diǎn)高性能擴(kuò)展性相關(guān)度可靠性ElasticSearch應(yīng)用場(chǎng)景用于日志搜索和分析、時(shí)空檢索、時(shí)序檢索、智能搜索等場(chǎng)景:檢索的數(shù)據(jù)類(lèi)型復(fù)雜:如需要查詢(xún)的數(shù)據(jù)有結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)等,ElasticSearch可以對(duì)以上數(shù)據(jù)類(lèi)型進(jìn)行清洗、分詞、建立倒排索引等一系列操作,然后提供全文檢索的能力;檢索條件多樣化:全文檢索條件可以包括詞或短語(yǔ);邊寫(xiě)邊讀:寫(xiě)入的數(shù)據(jù)可以實(shí)時(shí)的進(jìn)行檢索。ElasticSearch生態(tài)圈用戶(hù)接入層數(shù)據(jù)持久化與分析層數(shù)據(jù)接入層插件擴(kuò)展層ELK/ELKB提供了一整套解決方案,并且都是開(kāi)源軟件,之間互相配合使用,完美銜接,高效的滿(mǎn)足了很多場(chǎng)合的應(yīng)用。ElasticSearch整體結(jié)構(gòu)……Zookeeper集群Client磁盤(pán)讀取索引文件獲取集群信息文件索引和搜索操作更新集群信息EsMaster磁盤(pán)磁盤(pán)Replica0Shard1Replica1Shard0Replica0Replica1EsNode1EsNode9……ReplicasShardsClusterElasticSearch核心概念I(lǐng)ndexTypeDocumentMapping索引,是ElasticSearch中一個(gè)邏輯命名空間。文檔,是可以被索引的基本單位。文檔類(lèi)型,用于存儲(chǔ)不同類(lèi)型的文檔。映射,用來(lái)約束字段的類(lèi)型。ElasticSearch內(nèi)部架構(gòu)GatewayLocalFileSystemShared

FileSystemHadoopHDFSDistribute

LuceneDirectoryIndexModuleSearchModuleMappingRiverDisoveryModuleScriptingPluginsjspythonJMXTransportThriftHttpRestfulStyleAPIJavaPluginsJMXgroovyElasticSearch緩存機(jī)制ElasticSearch緩存主要分三種:QueryCache、FielddataCache、RequestCache。QueryCache:屬于Node級(jí)別的緩存,是對(duì)一個(gè)查詢(xún)中包含的過(guò)濾器執(zhí)行結(jié)果進(jìn)行緩存;FielddataCache:Fielddata是專(zhuān)門(mén)針對(duì)分詞的字段在查詢(xún)期間的數(shù)據(jù)結(jié)構(gòu)的緩存;RequestCache:Shard級(jí)別的緩存,是為了緩存“分片級(jí)”的本地結(jié)果集。ElasticSearch倒排索引正排索引:是通過(guò)Key尋找Value,即從關(guān)鍵點(diǎn)出發(fā),然后再通過(guò)關(guān)鍵點(diǎn)找到信息中滿(mǎn)足搜索條件的特定信息。倒排索引:ElasticSearch所采用得排序方式,是通過(guò)Value找Key。而在全文搜索中Value就是要搜索的關(guān)鍵詞,通過(guò)Value找到對(duì)應(yīng)的文檔。ElasticSearch倒排索引-

效果圖通過(guò)倒排索引進(jìn)行搜索,就是通過(guò)關(guān)鍵詞查詢(xún)對(duì)應(yīng)的文檔編號(hào),再通過(guò)文檔編號(hào)找文檔,類(lèi)似于查字典,或通過(guò)查書(shū)目錄查指定頁(yè)碼書(shū)的內(nèi)容。杰瑞喜歡看哪吒鬧?!璂oc1Doc1Doc1Doc1…………Doc2Doc2…………………………ElasticSearch索引流程客戶(hù)端發(fā)送索引請(qǐng)求給任意節(jié)點(diǎn)后,該節(jié)點(diǎn)判斷索引分片位置并轉(zhuǎn)發(fā)到對(duì)應(yīng)的分片節(jié)點(diǎn),分片節(jié)點(diǎn)執(zhí)行請(qǐng)求后再并行發(fā)送至其余節(jié)點(diǎn)執(zhí)行,其余節(jié)點(diǎn)全部執(zhí)行成功后返會(huì)給用戶(hù)執(zhí)行成功信息。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster1233ClientElasticSearch批量索引流程客戶(hù)端發(fā)送批量索引請(qǐng)求至任意節(jié)點(diǎn)后,節(jié)點(diǎn)將轉(zhuǎn)發(fā)請(qǐng)求至對(duì)應(yīng)主分片節(jié)點(diǎn),主分片節(jié)點(diǎn)按序操作,完成一個(gè)操作后再發(fā)送給其余復(fù)制節(jié)點(diǎn)執(zhí)行。復(fù)制節(jié)點(diǎn)操作完成報(bào)告給主分片節(jié)點(diǎn),主分片節(jié)點(diǎn)報(bào)告給請(qǐng)求節(jié)點(diǎn)并返回至客戶(hù)端。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster12333ClientElasticSearch搜索流程節(jié)點(diǎn)收到所有待檢索的數(shù)據(jù)后,發(fā)送請(qǐng)求給數(shù)據(jù)相關(guān)的分片,收到請(qǐng)求的分片節(jié)點(diǎn)會(huì)讀取數(shù)據(jù)并返回給檢索節(jié)點(diǎn),檢索節(jié)點(diǎn)匯總結(jié)果并返回給客戶(hù)端。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster123ClientElasticSearch批量搜索流程客戶(hù)端發(fā)送批量搜索請(qǐng)求至任意節(jié)點(diǎn),該節(jié)點(diǎn)為每個(gè)分片分別構(gòu)建一個(gè)多條數(shù)據(jù)檢索請(qǐng)求,然后轉(zhuǎn)發(fā)至主分片或副本分片。當(dāng)所有請(qǐng)求執(zhí)行完成后,請(qǐng)求節(jié)點(diǎn)匯總記錄并返回給客戶(hù)端。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster122Client客戶(hù)端curl命令ElasticSearch可在客戶(hù)端通過(guò)curl命令發(fā)起Http請(qǐng)求來(lái)對(duì)數(shù)據(jù)進(jìn)行操作??梢酝ㄟ^(guò)GET,POST,PUT,DELETE,HEAD等請(qǐng)求命令實(shí)現(xiàn)對(duì)文檔和索引增刪改查。獲取集群健康狀態(tài):新建索引:寫(xiě)入數(shù)據(jù):查詢(xún)數(shù)據(jù):curl-XGET"http://ip:httpport/_cluster/health?pretty"

curl-XPUT'http://ip:httpport/索引名?pretty'-H'Content-Type:application/json'-d'{"settings":{"number_of_shards":分片數(shù)量,"number_of_replicas":副本數(shù)量}}'curl-XPOST'http://ip:httpport/索引名/文檔類(lèi)型/索引ID?pretty'-H'Content-Type:application/json'-d'{}'curl-XGET'http://ip:httpport/索引名/文檔類(lèi)型/索引ID?pretty'ElasticSearchSQL使用ElasticSearch官方自發(fā)布6.3.0版本后正式支持SQL功能,內(nèi)置SQL特性也兼容JDBC協(xié)議。第三方SQL插件來(lái)操作ElasticSearch。POST/_sql?format=txt{

"query":"SELECT*FROMlibraryWHERErelease_date<'2019-01-01'"}sql>SELECT*FROMlibraryWHERErelease_date<'2019-01-01';JavaAPI操作ElasticSearch使用JavaAPI操作ElasticSearch有多種方式:TransportClient:官方原生客戶(hù)端,其作為ES集群的一個(gè)節(jié)點(diǎn)的角色存在,全部操作功能均支持。RestClient:官方新推API,屬于高級(jí)API,基于HttpRestful請(qǐng)求,可移值性更高。TransportClient-獲取集群客戶(hù)端需要獲取TransportClient客戶(hù)端,通過(guò)設(shè)置IP和端口連接到特定的ElasticSearch集群。//集群相關(guān)設(shè)置Settingssettings=Settings.builder().put("",CLUSTER_NAME).put("client.transport.sniff",false).build();//根據(jù)集群IP、端口和設(shè)置獲取ClientTransportClientclient=newPreBuiltTransportClient(settings).addTransportAddress(newTransportAddress(InetAddress.getByName(HOSTNAME),TCP_PORT));TransportClient-

創(chuàng)建/刪除索引先獲取索引管理的IndicesAdminClient:創(chuàng)建索引:刪除索引:CreateIndexResponsecreateIndexResponse=getAdminClient().prepareCreate(indexName.toLowerCase())

.get();DeleteIndexResponsedeleteResponse=getAdminClient().prepareDelete(indexName.toLowerCase()).execute().actionGet();IndicesAdminClientgetAdminClient(){retrungetClient().admin().indices();}TransportClient-

設(shè)置索引mapping先構(gòu)造mapping通過(guò)索引管理的IndicesAdminClient來(lái)設(shè)置mappingResponseresponse=getAdminClient().preparePutMapping(indexName).setType(typeName).setSource(mapping,XContentType.JSON).get();JSONObjectmappingTypeJson=newJSONObject();JSONObjectpropertiesJson=newJSONObject();JSONObjectidJson=newJSONObject();idJson.put("type","keyword");propertiesJson.put("id",idJson);mappingTypeJson.put("properties",propertiesJson);TransportClient-查詢(xún)結(jié)果根據(jù)輸入條件查詢(xún)結(jié)果:QueryBuildermatch=QueryBuilders.queryStringQuery(text);SearchRequestBuildersearch=getClient().prepareSearch().setQuery(match);//搜索返回搜索結(jié)果SearchResponseresponse=search.get();//命中的文檔SearchHitshits=response.getHits();RestClient

-獲取集群客戶(hù)端獲取RestClient客戶(hù)端,通過(guò)設(shè)置IP和端口連接到特定的ElasticSearch集群。RestClientBuilderbuilder=RestClient.builder(newHttpHost(esClientIP,esClientIPPort,"http"));Header[]defaultHeaders=newHeader[]{example};builder=builder.setRequestConfigCallback(example).setMaxRetryTimeoutMillis(MaxRetryTimeoutMillis);builder.setDefaultHeaders(defaultHeaders);RestClientrestClient=builder.build();returnrestClient;RestClient-創(chuàng)建/刪除索引通過(guò)put請(qǐng)求創(chuàng)建指定索引。通過(guò)delete請(qǐng)求刪除指定索引。HttpEntityentity=newNStringEntity(jsonString,ContentType.APPLICATION_JSON);Responseresponse=restClient.performRequest("PUT","/"+index,params,entity);Responsersp=restClient.performRequest("DELETE","/"+index+"?&pretty=true");RestClient-查詢(xún)文檔索引信息通過(guò)get請(qǐng)求查詢(xún)指定index、type、id下的文檔信息。Map<String,String>params=Collections.singletonMap("pretty","true");Responsersp=restClient.performRequest("GET","/"+index+"/"+type+"/"+id,params);Assert.assertEquals(rsp.getStatusLine().getStatusCode(),HttpStatus.SC_OK);ElasticSearch性能優(yōu)化-

分片副本策略索引一旦創(chuàng)建好后,就無(wú)法調(diào)整分片的數(shù)量,而ElasticSearch一個(gè)分片實(shí)際上對(duì)應(yīng)一個(gè)存儲(chǔ)數(shù)據(jù)Lucene索引,Lucene索引的讀寫(xiě)會(huì)占用很多的系統(tǒng)資源,因此,分片副本數(shù)需要合理的配置:分片數(shù)不超過(guò)節(jié)點(diǎn)數(shù)的3倍,用較少的分片獲得更佳的性能;副本數(shù)建議設(shè)置為1,過(guò)多的副本需要更多存儲(chǔ)空間;分片最大容量不要超過(guò)ElasticSearch推薦的最大JVM堆空間32G。ElasticSearch性能優(yōu)化-快速平衡集群擴(kuò)容后新舊節(jié)點(diǎn)之間數(shù)據(jù)不均衡,可通過(guò)修改參數(shù)加快數(shù)據(jù)平衡過(guò)程。參數(shù)使用完畢后,需要修改回默認(rèn)值。參數(shù)默認(rèn)值建議值cluster.routing.allocation.cluster_concurrent_rebalance2實(shí)例個(gè)數(shù)indices.recovery.max_bytes_per_sec40mb1G+(填空題)ElasticSearch中____是可以被索引的基本單位。(多選題)以下哪些不是ElasticSearch的特點(diǎn)?()邊寫(xiě)邊讀低性能倒排索引不可擴(kuò)展伸縮(判斷題)ElasticSearch不可以通過(guò)SQL來(lái)使用?()對(duì)錯(cuò)實(shí)時(shí)檢索場(chǎng)景應(yīng)用實(shí)時(shí)檢索技術(shù)介紹HBaseElasticSearchGES實(shí)時(shí)檢索實(shí)際案例GES簡(jiǎn)介GES基于HBase和ElasticSearch的分布式圖數(shù)據(jù)庫(kù),將數(shù)據(jù)構(gòu)建成屬性圖模型進(jìn)行存儲(chǔ),提供強(qiáng)大的圖查詢(xún)、分析、遍歷能力。具有以下特點(diǎn):提供多實(shí)例部署,可橫向擴(kuò)展;提供屬性圖模型的建模方案,可以將數(shù)據(jù)映射成圖進(jìn)行存儲(chǔ);提供靈活的圖元數(shù)據(jù)更新、修改;提供易用的Rest接口,方便數(shù)據(jù)的查詢(xún)分析;提供強(qiáng)大的Gremlin圖遍歷功能,可實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)邏輯。GES特點(diǎn)大規(guī)模高性能查詢(xún)分析一體簡(jiǎn)單易用單機(jī)圖VS華為分布式圖數(shù)據(jù)庫(kù)能力單機(jī)圖華為分布式圖查詢(xún)性能實(shí)時(shí)數(shù)據(jù)查詢(xún)有優(yōu)勢(shì)成本高海量數(shù)據(jù)查詢(xún)有優(yōu)勢(shì)成本低遍歷性能導(dǎo)入性能模糊搜索需要對(duì)接外部組件對(duì)接HD生態(tài)搜索組件計(jì)算框架需要對(duì)接外部組件對(duì)接HD生態(tài)計(jì)算框架GES應(yīng)用場(chǎng)景金融工業(yè)社交分析物流和網(wǎng)規(guī)GES技術(shù)架構(gòu)接口層GremlinAPI:兼容ApacheTinkerPopGremlin,提供開(kāi)源標(biāo)準(zhǔn)圖交互式查詢(xún)語(yǔ)言接口;RESTAPI:提供包括圖查詢(xún)、圖修改、圖管理和華為增強(qiáng)的在線(xiàn)分析算法在內(nèi)的全套接口;REST接口是對(duì)開(kāi)源標(biāo)準(zhǔn)Gremlin接口的補(bǔ)充;計(jì)算層提供圖數(shù)據(jù)庫(kù)核心引擎,包括數(shù)據(jù)管理、元數(shù)據(jù)管理等;后端存儲(chǔ)和索引接口適配層;存儲(chǔ)層分布式KV存儲(chǔ):提供海量圖數(shù)據(jù)存儲(chǔ)能力;集成分布式搜索引擎ElasticSearch,提供模糊檢索,全文檢索等能力;技術(shù)架構(gòu)特點(diǎn):大數(shù)據(jù)生態(tài),易擴(kuò)展,高性能GES圖核心引擎分布式數(shù)據(jù)存儲(chǔ)HBase分布式搜索引擎ElasticSearch存儲(chǔ)層TinkerPopGremlinConsole接入層LoadBalancer應(yīng)用層業(yè)務(wù)系統(tǒng)RESTAPIGremlinAPI(Java&CLI)計(jì)算層用戶(hù)接入GES技術(shù)原理GES通過(guò)圖數(shù)據(jù)庫(kù)核心引擎將其數(shù)據(jù)通過(guò)分布式計(jì)算框架導(dǎo)入HBase和ElasticSearch進(jìn)行存儲(chǔ):基于HBase的分布式存儲(chǔ)機(jī)制,能夠處理海量數(shù)據(jù);基于Spark的分布式內(nèi)存計(jì)算技術(shù),支持?jǐn)?shù)據(jù)快速導(dǎo)入;基于ElasticSearch的索引機(jī)制,能夠根據(jù)索引快速查詢(xún)數(shù)據(jù)。基本概念-圖Graph圖是一種數(shù)據(jù)結(jié)構(gòu),其在生活中最直觀的體現(xiàn)就是社交關(guān)系圖。圖的概念中存在點(diǎn)、邊、屬性等概念?;靖拍?Vertex和VertexLabelVertex:節(jié)點(diǎn)/頂點(diǎn),用于表示現(xiàn)實(shí)世界中的實(shí)體對(duì)象。VertexLabel:節(jié)點(diǎn)的類(lèi)型,用于表示現(xiàn)實(shí)世界中的實(shí)體類(lèi)型,比如“人”,“電話(huà)”。在GES中,每一個(gè)節(jié)點(diǎn)有且只有一個(gè)VertexLabel。當(dāng)不顯式指定VertexLabel時(shí),采用默認(rèn)的VertexLabel。漢堡大米手機(jī)人車(chē)基本概念-Edge和EdgeLabelEdge:邊,用于表示頂點(diǎn)間的聯(lián)系。GES的邊都是單向邊,如果需要雙向邊,則通過(guò)兩條相反方向的單向邊組成。GES不存在無(wú)向邊。EdgeLabel:邊的類(lèi)型,用于表示現(xiàn)實(shí)世界中的關(guān)系類(lèi)型,比如“屬于關(guān)系”、“認(rèn)識(shí)/朋友關(guān)系”等。擁有喜好朋友朋友基本概念-Property和PropertyKeyProperty:屬性,用于表示頂點(diǎn)的附加信息,采用KeyValue結(jié)構(gòu)。Key就是PropertyKey,Value就是具體的值。PropertyKey:屬性的類(lèi)型,比如“姓名”,“年齡”,“電話(huà)號(hào)碼”等。手機(jī)人車(chē)入網(wǎng)時(shí)間品牌型號(hào)顏色姓名年齡身份證愛(ài)好品牌型號(hào)耗油量總行程顏色GESREST接口簡(jiǎn)介接口適用于GES2.8.1版本,提供給基于GES平臺(tái)做二次開(kāi)發(fā)的開(kāi)發(fā)人員使用。GESAPI向上層應(yīng)用提供統(tǒng)一的訪(fǎng)問(wèn)入口,通過(guò)高度靈活的RESTAPI接口,封裝GES平臺(tái)的統(tǒng)一操作。HTTP請(qǐng)求方在和服務(wù)器建立連接并發(fā)出HTTP請(qǐng)求后,不能在該連接上再發(fā)出其他請(qǐng)求,必須等待所發(fā)請(qǐng)求的響應(yīng),之后才可以繼續(xù)發(fā)請(qǐng)求。請(qǐng)求分為HEAD、GET、PUT、POST、DELETE。GESREST接口操作(1)創(chuàng)建圖刪除圖創(chuàng)建propertyKey創(chuàng)建vertexlabel創(chuàng)建edgelabelStringgraphName="GES";api.createGraph(graphName);StringgraphName="GES";api.deleteGraph(graphName);PropertyKeypropertyKey=newPropertyKey();propertyKey.setDataType(DataType.String);propertyKey.setName("name");api.addPropertyKey(propertyKey,graphName);api.addVertexLabel("person",graphName);api.addVertexLabel("phone",graphName);EdgeLabeledgeLabel=newEdgeLabel();edgeLabel.setName("friend");api.addEdgeLabel(edgeLabel,graphName);GESREST接口操作(2)創(chuàng)建節(jié)點(diǎn)根據(jù)點(diǎn)id查詢(xún)點(diǎn)創(chuàng)建邊根據(jù)邊id查詢(xún)AddVertexReqObjaddVertexReqObj=newAddVertexReqObj();api.addVertex(addVertexReqObj,graphName);StringvertexId=getVertexIdByProperty(api,graphName,"person","name","marko");api.queryVertex(vertexId,graphName);AddEdgeReqObjaddEdgeReqObj=newAddEdgeReqObj();api.addEdge(addEdgeReqObj,graphName);StringedgeId=getEdgeIdByProperty(api,graphName,"call","weight","0.6");api.queryEdge(edgeId,graphName);GESREST接口接口操作(3)點(diǎn)全圖查詢(xún)邊全圖查詢(xún)查詢(xún)出節(jié)點(diǎn)到節(jié)點(diǎn)的全路徑EdgeSearchReqObjedgeSearchReqObj=newEdgeSearchReqObj();api.searchEdge(edgeSearchReqObj,graphName);VertexSearchReqObjvertexSearchReqObj=newVertexSearchReqObj();api.searchVertex(vertexSearchReqObj,graphName);PathSearchReqObjpathSearchReqObj=newPathSearchReqObj();List<String>vertexIdList=newArrayList<>();vertexIdList.add(getVertexIdByProperty(api,graphName,"person","name","marko"));vertexIdList.add(getVertexIdByProperty(api,graphName,"person","name","blame"));pathSearchReqObj.setVertexIdList(vertexIdList);api.searchPath(pathSearchReqObj,graphName);GESREST接口接口操作(4)為點(diǎn)屬性name創(chuàng)建內(nèi)置索引GraphIndexReqObjgraphIndexReqObj=newGraphIndexReqObj();graphIndexReqObj.setElementCategory(ElementCategory.VERTEX);graphIndexReqObj.setName("name_index");graphIndexReqObj.setType(IndexType.COMPOSITE);List<KeyTextType>keyTextTypeList1=newArrayList<>();KeyTextTypekeyTextType=newKeyTextType();keyTextType.setName("name");keyTextType.setTextType("");//IndexType為COMPOSITE時(shí),TextType為空

keyTextTypeList1.add(keyTextType);graphIndexReqObj.setKeyTextTypeList(keyTextTypeList1);api.addGraphIndex(graphIndexReqObj,graphName);Gremlin簡(jiǎn)介Gremlin是ApacheTinkerPop框架下的圖遍歷語(yǔ)言。Gremlin是一種函數(shù)式數(shù)據(jù)流語(yǔ)言,用戶(hù)可以使用簡(jiǎn)潔的方式實(shí)現(xiàn)對(duì)復(fù)雜的屬性圖(propertygraph)的遍歷或查詢(xún)。每個(gè)Gremlin遍歷由一系列步驟(可能存在嵌套)組成,每一步都在數(shù)據(jù)流(datastream

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論