




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
H13-723大數(shù)據(jù)HCIP-BigDataDeveloperV2.0中文V2.0張新旗/zwx7018442019.06.30黃浩洋hwx690472新開發(fā)黃浩洋hwx6904722020.11.28張新旗/zwx701844汪孟德/wwx711842大數(shù)據(jù)實時檢索場景化解決方案隨著社會和科學地發(fā)展,各行業(yè)積累的數(shù)據(jù)量急劇增加,用戶對搜索時延的要求變得更高,如金融行業(yè)查詢個人征信、交易記錄等信息,公安部門查詢人員信息、社交關系等。從大量而繁雜的數(shù)據(jù)中快速獲取想要的數(shù)據(jù),是當下急需解決的問題。學習完本課程,您能夠掌握:實時檢索的應用場景實時檢索采用的技術方案實時檢索的實際案例實時檢索場景應用實時檢索技術介紹實時檢索實際案例實時檢索的概念實時檢索就是根據(jù)關鍵詞對系統(tǒng)內的一些信息進行快速搜索,實現(xiàn)即搜即得的效果,強調的是實時低延遲。其能夠方便人們快速拿到搜索的結果,而這些內容往往才是人們真正關心的、可用的數(shù)據(jù)。行業(yè)應用
-
金融根據(jù)ID(日志類型、卡號等)和時間段進行查詢。查詢交易憑證,追溯交易,以及查詢客戶信用記錄,幫助客戶快速借款等。整合多方數(shù)據(jù),形成關系網絡,查詢關聯(lián)關系,可用于反洗錢、風控等場景。金融系統(tǒng)信貸系統(tǒng)信用卡系統(tǒng)企業(yè)征信系統(tǒng)日志庫交易記錄庫征信記錄庫網銀日志個人征信系統(tǒng)專題庫日志信息查詢交易記錄查詢信用記錄查詢反洗錢分析資金流向網絡場景特征上述兩個場景典型的業(yè)務特點:高并發(fā)查詢速度快查詢條件簡單存在海量視頻和圖片等小文件檢索性能要求高檢索需要在秒級響應,不承擔復雜查詢和統(tǒng)計類查詢高并發(fā)查詢通常有大于100的并發(fā)查詢數(shù)據(jù)量大PB級數(shù)據(jù)量,集群規(guī)模在1000節(jié)點以上。對圖數(shù)據(jù)庫的場景,點個數(shù)在10億以上,邊個數(shù)在100億以上支持結構化和非結構化需要同時保存結構化數(shù)據(jù)和非結構化數(shù)據(jù),經常用來對圖片等小文件進行檢索高效的數(shù)據(jù)加載數(shù)據(jù)加載要求高,每小時可以加載TB級數(shù)據(jù)支持圖檢索支持檢索圖數(shù)據(jù),支持圖標準查詢接口核心訴求解決方案業(yè)務應用實時檢索業(yè)務話費查詢日志查詢軌跡查詢實時檢索平臺源數(shù)據(jù)實時檢索引擎ElasticSearchHBase流式數(shù)據(jù)文件數(shù)據(jù)GES(可選)數(shù)據(jù)采集批量加載(Loader/Spark/第三方加載
)實時加載(SparkStreaming/第三方采集)GES導入工具圖數(shù)據(jù)實時檢索引擎中各組件的聯(lián)系與定位主鍵查詢非主鍵查詢文檔檢索海量數(shù)據(jù)實時搜索圖查詢分析HBase√FIHD可支持二級索引√√ElasticSearch√√√√海量數(shù)據(jù)性能不如HBase,性價比低√熱數(shù)據(jù)實時GES√數(shù)據(jù)存儲在HBase和ElasticSearch√復雜圖查詢近實時√(多選題)___加___的組合滿足了大部分的用戶實時查詢訴求?()MapReduceHBaseElasticSearchHive(判斷題)ElasticSearch能夠支持文檔檢索?()正確錯誤
(多選題)實時檢索解決方案能夠滿足哪些需求?()多級索引查詢圖查詢查詢延遲很大文檔檢索海量數(shù)據(jù)存儲
實時檢索場景應用實時檢索技術介紹HBase
ElasticSearchGES實時檢索配置方案HBase簡介HBase是一個分布式的NoSQL數(shù)據(jù)庫,其特點高可靠、高性能、面向列、可伸縮:適合存儲大表數(shù)據(jù),并且可實時讀寫大表數(shù)據(jù);表結構稀疏;數(shù)據(jù)底層存儲于HadoopHDFS分布式文件系統(tǒng);利用ZooKeeper作為協(xié)同服務。HBase應用場景HBase適合具有如下需求的應用:海量數(shù)據(jù)(TB、PB);不需要完全擁有傳統(tǒng)關系型數(shù)據(jù)庫所具備的ACID特性;高吞吐量;需要在海量數(shù)據(jù)中實現(xiàn)高效的隨機讀?。恍枰芎玫男阅苌炜s能力;能夠同時處理結構化和非結構化的數(shù)據(jù)。HBase系統(tǒng)架構ClientZooKeeperHMasterHRegionServerHRegionStoreMemStoreStoreStoreFileStoreFile……StoreFile…HLogHBase…DFSClientDataNodeDataNodeDataNodeDataNodeDataNode…HRegionServerHRegionStoreStoreStoreFileStoreFile……StoreFile…HLog…DFSClient……HDFSHFileHFileHFileHFileHFileHFileMemStoreMemStoreMemStoreHBase存儲模型HBase的底層數(shù)據(jù)以KeyValue的形式存在,KeyValue具有特定的格式。KeyValue中擁有時間戳、類型等關鍵信息。同一個Key值可以關聯(lián)多個Value,每一個KeyValue都擁有一個Qualifier標識。即使是Key值相同,Qualifier也相同的多個KeyValue,也可能有多個版本,此時使用時間戳來區(qū)分,這就是同一條數(shù)據(jù)記錄的多版本。IDNameAddressPhoneValue-ID01Key-01Value-Name01Key-01Value-Phone01Key-01Value-Address01Key-01HBase緩存機制HBase提供2種類型的緩存結構:MemStore和BlockCache。MemStore:HBase數(shù)據(jù)先寫入HLog之中,并同時寫入MemStore,待滿足一定條件后將MemStore中數(shù)據(jù)刷到磁盤,能提升HBase的寫性能和讀性能。BlockCache:HBase會將一次文件查找的Block塊緩存到Cache中,以便后續(xù)同一請求或者相鄰數(shù)據(jù)查找請求,可以直接從內存中獲取,避免IO操作。HBase緩存機制HBase提供2種類型的緩存結構:MemStore和BlockCache。MemStore:HBase數(shù)據(jù)先寫入HLog之中,并同時寫入MemStore,待滿足一定條件后將MemStore中數(shù)據(jù)刷到磁盤,能提升HBase的寫性能和讀性能。BlockCache:HBase會將一次文件查找的Block塊緩存到Cache中,以便后續(xù)同一請求或者相鄰數(shù)據(jù)查找請求,可以直接從內存中獲取,避免IO操作。HBaseBloomFilter
BloomFilter用來優(yōu)化一些隨機讀取的場景,即Get場景。它可以被用來快速的判斷一條數(shù)據(jù)在一個大的數(shù)據(jù)集合中是否存在。BloomFilter在判斷一個數(shù)據(jù)是否存在時,擁有一定的誤判率。但對于“該條數(shù)據(jù)不存在”的判斷結果是可信的。HBase的BloomFilter的相關數(shù)據(jù),被保存在HFile中。111100000000000……x111100000000000……abcd
HBase客戶端HBase提供客戶端命令的方式供使用人員對數(shù)據(jù)庫進行各種操作。提供表的增刪改查,表快照備份等。#進入HBase客戶端>hbaseshell#查看幫助命令>help#查看列表信息>list#創(chuàng)建表,指導列族>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查詢數(shù)據(jù)>get'my_tb','20190501'SQLOnHBaseApachePhoenix將SQL查詢編譯為一系列HBase掃描。可以為小型查詢提供毫秒級的性能,或者為數(shù)千萬行提供數(shù)秒的性能。其他SQL使用方式還有:Hive、SparkSQL等。PhoenixSQL支持的部分語法: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語法參見:http:///languageSQLOnHBaseApachePhoenix將SQL查詢編譯為一系列HBase掃描??梢詾樾⌒筒樵兲峁┖撩爰壍男阅?,或者為數(shù)千萬行提供數(shù)秒的性能。其他SQL使用方式還有:Hive、SparkSQL等。PhoenixSQL支持的部分語法: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語法參見:http:///languageAPI使用-創(chuàng)建刪除表通過org.apache.hadoop.hbase.client.Admin實例的createTable方法來創(chuàng)建表,并指定表名、列族名。通過org.apache.hadoop.hbase.client.Admin實例的deleteTable方法來刪除表。Adminadmin=conn.getAdmin();admin.createTable(tableName);Adminadmin=conn.getAdmin();//先停用表
admin.disableTable(tableName);//執(zhí)行刪除admin.deleteTable(tableName);API使用-插入刪除數(shù)據(jù)HBase通過Table實例的put方法來插入數(shù)據(jù),可以是一行數(shù)據(jù)也可以是數(shù)據(jù)集。HBase通過Table實例的delete方法來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)建一個Delete對象Deletedelete=newDelete(rowKey);//表對象的delete方法傳入delete對象為參數(shù),提交刪除請求table.delete(delete);API使用-Get讀取數(shù)據(jù)要從表中讀取一條數(shù)據(jù),首先需要實例化該表對應的Table實例,然后創(chuàng)建一個Get對象。也可以為Get對象設定參數(shù)值,如列族的名稱和列的名稱。查詢到的行數(shù)據(jù)存儲在Result對象中,Result中可以存儲多個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ù),首先需要實例化該表對應的Table實例,然后創(chuàng)建一個Scan對象,并針對查詢條件設置Scan對象的參數(shù)值,為了提高查詢效率,最好指定StartRow和StopRow。查詢結果的多行數(shù)據(jù)保存在ResultScanner對象中,每行數(shù)據(jù)以Result對象形式存儲,Result中存儲了多個Cell。Tabletable=conn.getTable(tableName);//創(chuàng)建Scan對象.Scanscan=newScan();//添加列族和列名scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"));//設置緩存大小,也可設置起始結束的rowkey等scan.setCaching(1000);//提交Scan請求ResultScannerrScanner=table.getScanner(scan);//解析處理結果for(Resultr=rScanner.next();r!=null;r=rScanner.next()){for(Cellcell:r.rawCells()){Example}}API使用-過濾器FilterHBaseFilter主要在Scan和Get過程中進行數(shù)據(jù)過濾,通過設置一些過濾條件來實現(xiàn),如設置RowKey,列名或者列值的過濾條件。Tabletable=conn.getTable(tableName);Scanscan=newScan();scan.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"));//創(chuàng)建過濾對象,單列值過濾器,參數(shù)為列族、列名、過濾列值“XuBing”SingleColumnValueFilterfilter=newSingleColumnValueFilter(Bytes.toBytes("info"),Bytes.toBytes("name"),CompareOp.EQUAL,Bytes.toBytes("XuBing"));//為scan對象設置過濾器對象,即掃描設置過濾條件scan.setFilter(filter);//提交掃描請求ResultScannerrScanner=table.getScanner(scan);//解析處理結果for(Resultr=rScanner.next();r!=null;r=rScanner.next()){for(Cellcell:r.rawCells()){Example}}HBase性能優(yōu)化-
表設計Region:區(qū)域。預先創(chuàng)建多個Region,當數(shù)據(jù)寫入HBase時,會按照RowKey對應Region分區(qū)情況,在集群內做數(shù)據(jù)的負載均衡。RowKey:行鍵。滿足實際業(yè)務需求情況下,長度越小越好,考慮散列性(連續(xù)的RowKey易導致負載不均衡)。散列存儲可采用取反或Hash來實現(xiàn)。ColumnFamily:列簇。一張表里不要定義太多的列簇,因為某個列簇在flush的時候,它鄰近的列簇也會因關聯(lián)效應被觸發(fā)flush,最終導致系統(tǒng)產生更多的I/O。MaxVersion:最大版本數(shù)量。如果只需要保存最新版本的數(shù)據(jù),那么可以設置最大版本數(shù)為1。TimeToLive:數(shù)據(jù)存活時間(秒)。例如只需要存儲最近兩天的數(shù)據(jù),那么可以設置存活時間為2*24*60*60。HBase性能優(yōu)化-
寫表操作Table參數(shù):WriteBuffer:實際寫入數(shù)據(jù)量的多少來設置Table客戶端的寫buffer大小;WALFlag:對于相對不太重要的數(shù)據(jù),(謹慎使用)放棄寫WAL日志,從而提高數(shù)據(jù)寫入的性能。批量寫:通過調用Table實例的put(List)批量寫入多行記錄,只需一次網絡I/O開銷,可以明顯的提升寫性能。HBase性能優(yōu)化-
讀表操作ScannerCaching配置:Scan時指定需要的列簇或者列,可以減少網絡傳輸數(shù)據(jù)量;在HBase的conf配置掃描器緩存;通過調用Scan實例的setCaching(intcaching)進行配置。批量讀:通過調用Table實例的get(List)批量讀取多行記錄,只需一次網絡I/O開銷,可以明顯的提升讀性能。(多選題)HBase架構中包含哪些?()HMasterHRegionServerClientResourceManager(多選題)哪些方式能夠操作HBase的數(shù)據(jù)?()客戶端命令PhoenixSQLJavaAPIHiveSQL(多選題)以下哪些場景不能使用HBase作為存儲系統(tǒng)?()需要ACID特性海量數(shù)據(jù)存儲主鍵查詢大文件,視頻等
實時檢索場景應用實時檢索技術介紹HBaseElasticSearchGES實時檢索配置方案ElasticSearch簡介ElasticSearch是一個高性能,基于Lucene的全文檢索服務,是一個分布式的Restful風格的搜索和數(shù)據(jù)分析引擎,也可以作為NoSQL數(shù)據(jù)庫使用:對Lucene進行了擴展;原型環(huán)境和生產環(huán)境可無縫切換;能夠水平擴展;支持結構化和非結構化數(shù)據(jù)。ElasticSearch特點高性能擴展性相關度可靠性ElasticSearch應用場景用于日志搜索和分析、時空檢索、時序檢索、智能搜索等場景:檢索的數(shù)據(jù)類型復雜:如需要查詢的數(shù)據(jù)有結構化數(shù)據(jù)、半結構化數(shù)據(jù)、非結構化數(shù)據(jù)等,ElasticSearch可以對以上數(shù)據(jù)類型進行清洗、分詞、建立倒排索引等一系列操作,然后提供全文檢索的能力;檢索條件多樣化:全文檢索條件可以包括詞或短語;邊寫邊讀:寫入的數(shù)據(jù)可以實時的進行檢索。ElasticSearch生態(tài)圈用戶接入層數(shù)據(jù)持久化與分析層數(shù)據(jù)接入層插件擴展層ELK/ELKB提供了一整套解決方案,并且都是開源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。ElasticSearch整體結構……Zookeeper集群Client磁盤讀取索引文件獲取集群信息文件索引和搜索操作更新集群信息EsMaster磁盤磁盤Replica0Shard1Replica1Shard0Replica0Replica1EsNode1EsNode9……ReplicasShardsClusterElasticSearch核心概念IndexTypeDocumentMapping索引,是ElasticSearch中一個邏輯命名空間。文檔,是可以被索引的基本單位。文檔類型,用于存儲不同類型的文檔。映射,用來約束字段的類型。ElasticSearch內部架構GatewayLocalFileSystemShared
FileSystemHadoopHDFSDistribute
LuceneDirectoryIndexModuleSearchModuleMappingRiverDisoveryModuleScriptingPluginsjspythonJMXTransportThriftHttpRestfulStyleAPIJavaPluginsJMXgroovyElasticSearch緩存機制ElasticSearch緩存主要分三種:QueryCache、FielddataCache、RequestCache。QueryCache:屬于Node級別的緩存,是對一個查詢中包含的過濾器執(zhí)行結果進行緩存;FielddataCache:Fielddata是專門針對分詞的字段在查詢期間的數(shù)據(jù)結構的緩存;RequestCache:Shard級別的緩存,是為了緩存“分片級”的本地結果集。ElasticSearch倒排索引正排索引:是通過Key尋找Value,即從關鍵點出發(fā),然后再通過關鍵點找到信息中滿足搜索條件的特定信息。倒排索引:ElasticSearch所采用得排序方式,是通過Value找Key。而在全文搜索中Value就是要搜索的關鍵詞,通過Value找到對應的文檔。ElasticSearch倒排索引-
效果圖通過倒排索引進行搜索,就是通過關鍵詞查詢對應的文檔編號,再通過文檔編號找文檔,類似于查字典,或通過查書目錄查指定頁碼書的內容。杰瑞喜歡看哪吒鬧?!璂oc1Doc1Doc1Doc1…………Doc2Doc2…………………………ElasticSearch索引流程客戶端發(fā)送索引請求給任意節(jié)點后,該節(jié)點判斷索引分片位置并轉發(fā)到對應的分片節(jié)點,分片節(jié)點執(zhí)行請求后再并行發(fā)送至其余節(jié)點執(zhí)行,其余節(jié)點全部執(zhí)行成功后返會給用戶執(zhí)行成功信息。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster1233ClientElasticSearch批量索引流程客戶端發(fā)送批量索引請求至任意節(jié)點后,節(jié)點將轉發(fā)請求至對應主分片節(jié)點,主分片節(jié)點按序操作,完成一個操作后再發(fā)送給其余復制節(jié)點執(zhí)行。復制節(jié)點操作完成報告給主分片節(jié)點,主分片節(jié)點報告給請求節(jié)點并返回至客戶端。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster12333ClientElasticSearch搜索流程節(jié)點收到所有待檢索的數(shù)據(jù)后,發(fā)送請求給數(shù)據(jù)相關的分片,收到請求的分片節(jié)點會讀取數(shù)據(jù)并返回給檢索節(jié)點,檢索節(jié)點匯總結果并返回給客戶端。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster123ClientElasticSearch批量搜索流程客戶端發(fā)送批量搜索請求至任意節(jié)點,該節(jié)點為每個分片分別構建一個多條數(shù)據(jù)檢索請求,然后轉發(fā)至主分片或副本分片。當所有請求執(zhí)行完成后,請求節(jié)點匯總記錄并返回給客戶端。R0Node1-MasterP1R0Node2R1P0Node3R1Cluster122Client客戶端curl命令ElasticSearch可在客戶端通過curl命令發(fā)起Http請求來對數(shù)據(jù)進行操作??梢酝ㄟ^GET,POST,PUT,DELETE,HEAD等請求命令實現(xiàn)對文檔和索引增刪改查。獲取集群健康狀態(tài):新建索引:寫入數(shù)據(jù):查詢數(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/索引名/文檔類型/索引ID?pretty'-H'Content-Type:application/json'-d'{}'curl-XGET'http://ip:httpport/索引名/文檔類型/索引ID?pretty'ElasticSearchSQL使用ElasticSearch官方自發(fā)布6.3.0版本后正式支持SQL功能,內置SQL特性也兼容JDBC協(xié)議。第三方SQL插件來操作ElasticSearch。POST/_sql?format=txt{
"query":"SELECT*FROMlibraryWHERErelease_date<'2019-01-01'"}sql>SELECT*FROMlibraryWHERErelease_date<'2019-01-01';JavaAPI操作ElasticSearch使用JavaAPI操作ElasticSearch有多種方式:TransportClient:官方原生客戶端,其作為ES集群的一個節(jié)點的角色存在,全部操作功能均支持。RestClient:官方新推API,屬于高級API,基于HttpRestful請求,可移值性更高。TransportClient-獲取集群客戶端需要獲取TransportClient客戶端,通過設置IP和端口連接到特定的ElasticSearch集群。//集群相關設置Settingssettings=Settings.builder().put("",CLUSTER_NAME).put("client.transport.sniff",false).build();//根據(jù)集群IP、端口和設置獲取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-
設置索引mapping先構造mapping通過索引管理的IndicesAdminClient來設置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-查詢結果根據(jù)輸入條件查詢結果:QueryBuildermatch=QueryBuilders.queryStringQuery(text);SearchRequestBuildersearch=getClient().prepareSearch().setQuery(match);//搜索返回搜索結果SearchResponseresponse=search.get();//命中的文檔SearchHitshits=response.getHits();RestClient
-獲取集群客戶端獲取RestClient客戶端,通過設置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)建/刪除索引通過put請求創(chuàng)建指定索引。通過delete請求刪除指定索引。HttpEntityentity=newNStringEntity(jsonString,ContentType.APPLICATION_JSON);Responseresponse=restClient.performRequest("PUT","/"+index,params,entity);Responsersp=restClient.performRequest("DELETE","/"+index+"?&pretty=true");RestClient-查詢文檔索引信息通過get請求查詢指定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)建好后,就無法調整分片的數(shù)量,而ElasticSearch一個分片實際上對應一個存儲數(shù)據(jù)Lucene索引,Lucene索引的讀寫會占用很多的系統(tǒng)資源,因此,分片副本數(shù)需要合理的配置:分片數(shù)不超過節(jié)點數(shù)的3倍,用較少的分片獲得更佳的性能;副本數(shù)建議設置為1,過多的副本需要更多存儲空間;分片最大容量不要超過ElasticSearch推薦的最大JVM堆空間32G。ElasticSearch性能優(yōu)化-快速平衡集群擴容后新舊節(jié)點之間數(shù)據(jù)不均衡,可通過修改參數(shù)加快數(shù)據(jù)平衡過程。參數(shù)使用完畢后,需要修改回默認值。參數(shù)默認值建議值cluster.routing.allocation.cluster_concurrent_rebalance2實例個數(shù)indices.recovery.max_bytes_per_sec40mb1G+(填空題)ElasticSearch中____是可以被索引的基本單位。(多選題)以下哪些不是ElasticSearch的特點?()邊寫邊讀低性能倒排索引不可擴展伸縮(判斷題)ElasticSearch不可以通過SQL來使用?()對錯實時檢索場景應用實時檢索技術介紹HBaseElasticSearchGES實時檢索實際案例GES簡介GES基于HBase和ElasticSearch的分布式圖數(shù)據(jù)庫,將數(shù)據(jù)構建成屬性圖模型進行存儲,提供強大的圖查詢、分析、遍歷能力。具有以下特點:提供多實例部署,可橫向擴展;提供屬性圖模型的建模方案,可以將數(shù)據(jù)映射成圖進行存儲;提供靈活的圖元數(shù)據(jù)更新、修改;提供易用的Rest接口,方便數(shù)據(jù)的查詢分析;提供強大的Gremlin圖遍歷功能,可實現(xiàn)復雜的業(yè)務邏輯。GES特點大規(guī)模高性能查詢分析一體簡單易用單機圖VS華為分布式圖數(shù)據(jù)庫能力單機圖華為分布式圖查詢性能實時數(shù)據(jù)查詢有優(yōu)勢成本高海量數(shù)據(jù)查詢有優(yōu)勢成本低遍歷性能導入性能模糊搜索需要對接外部組件對接HD生態(tài)搜索組件計算框架需要對接外部組件對接HD生態(tài)計算框架GES應用場景金融工業(yè)社交分析物流和網規(guī)GES技術架構接口層GremlinAPI:兼容ApacheTinkerPopGremlin,提供開源標準圖交互式查詢語言接口;RESTAPI:提供包括圖查詢、圖修改、圖管理和華為增強的在線分析算法在內的全套接口;REST接口是對開源標準Gremlin接口的補充;計算層提供圖數(shù)據(jù)庫核心引擎,包括數(shù)據(jù)管理、元數(shù)據(jù)管理等;后端存儲和索引接口適配層;存儲層分布式KV存儲:提供海量圖數(shù)據(jù)存儲能力;集成分布式搜索引擎ElasticSearch,提供模糊檢索,全文檢索等能力;技術架構特點:大數(shù)據(jù)生態(tài),易擴展,高性能GES圖核心引擎分布式數(shù)據(jù)存儲HBase分布式搜索引擎ElasticSearch存儲層TinkerPopGremlinConsole接入層LoadBalancer應用層業(yè)務系統(tǒng)RESTAPIGremlinAPI(Java&CLI)計算層用戶接入GES技術原理GES通過圖數(shù)據(jù)庫核心引擎將其數(shù)據(jù)通過分布式計算框架導入HBase和ElasticSearch進行存儲:基于HBase的分布式存儲機制,能夠處理海量數(shù)據(jù);基于Spark的分布式內存計算技術,支持數(shù)據(jù)快速導入;基于ElasticSearch的索引機制,能夠根據(jù)索引快速查詢數(shù)據(jù)?;靖拍?圖Graph圖是一種數(shù)據(jù)結構,其在生活中最直觀的體現(xiàn)就是社交關系圖。圖的概念中存在點、邊、屬性等概念。基本概念-Vertex和VertexLabelVertex:節(jié)點/頂點,用于表示現(xiàn)實世界中的實體對象。VertexLabel:節(jié)點的類型,用于表示現(xiàn)實世界中的實體類型,比如“人”,“電話”。在GES中,每一個節(jié)點有且只有一個VertexLabel。當不顯式指定VertexLabel時,采用默認的VertexLabel。漢堡大米手機人車基本概念-Edge和EdgeLabelEdge:邊,用于表示頂點間的聯(lián)系。GES的邊都是單向邊,如果需要雙向邊,則通過兩條相反方向的單向邊組成。GES不存在無向邊。EdgeLabel:邊的類型,用于表示現(xiàn)實世界中的關系類型,比如“屬于關系”、“認識/朋友關系”等。擁有喜好朋友朋友基本概念-Property和PropertyKeyProperty:屬性,用于表示頂點的附加信息,采用KeyValue結構。Key就是PropertyKey,Value就是具體的值。PropertyKey:屬性的類型,比如“姓名”,“年齡”,“電話號碼”等。手機人車入網時間品牌型號顏色姓名年齡身份證愛好品牌型號耗油量總行程顏色GESREST接口簡介接口適用于GES2.8.1版本,提供給基于GES平臺做二次開發(fā)的開發(fā)人員使用。GESAPI向上層應用提供統(tǒng)一的訪問入口,通過高度靈活的RESTAPI接口,封裝GES平臺的統(tǒng)一操作。HTTP請求方在和服務器建立連接并發(fā)出HTTP請求后,不能在該連接上再發(fā)出其他請求,必須等待所發(fā)請求的響應,之后才可以繼續(xù)發(fā)請求。請求分為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é)點根據(jù)點id查詢點創(chuàng)建邊根據(jù)邊id查詢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)點全圖查詢邊全圖查詢查詢出節(jié)點到節(jié)點的全路徑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)為點屬性name創(chuàng)建內置索引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時,TextType為空
keyTextTypeList1.add(keyTextType);graphIndexReqObj.setKeyTextTypeList(keyTextTypeList1);api.addGraphIndex(graphIndexReqObj,graphName);Gremlin簡介Gremlin是ApacheTinkerPop框架下的圖遍歷語言。Gremlin是一種函數(shù)式數(shù)據(jù)流語言,用戶可以使用簡潔的方式實現(xiàn)對復雜的屬性圖(propertygraph)的遍歷或查詢。每個Gremlin遍歷由一系列步驟(可能存在嵌套)組成,每一步都在數(shù)據(jù)流(datastream
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 技能培訓:安全搬運課件
- 生產經營單位安全生產主體責任專項培訓課件
- 大學物理角動量定理
- 電梯安全事故盤點及應急知識
- 2024年農作物種子繁育員考試歷年考題一起查試題及答案
- 游泳救生員職業(yè)相關的重要試題及答案
- 2025簽訂房屋租賃合同后搬出會有什么后果
- 2024模具設計師資格考試大綱要點試題及答案
- 證券從業(yè)資格證備考計劃的制定與實施試題及答案
- 證券從業(yè)資格考試技巧與試題及答案
- 認識浮力+阿基米德原理
- 食堂改造與裝修設計方案
- 關于公司企業(yè)進行人員總量控制的實施方案
- 物流運輸托運單模板
- 防止電力生產重大事故地二十五項反措
- 油田結垢機理及防治技術
- 蘇教版五年級數(shù)學下冊第三單元測試題及答案一
- 天然氣管道工程施工設計方案方案
- 變電站第二種工作票(范本)
- 抗滑樁設計計算(驗算)Word版
- 全球價值鏈與中國貿易增加值核算報告
評論
0/150
提交評論