1. 大數據解決方案主要用於存儲哪種類型的數據
大數據解決方案主要用於存儲二進制類型的數據。
數據還包括了結構化數據和非結構化數據,郵件,Word,圖片,音頻信息,視頻信息等各種類型數據,已經不是以往的關系型資料庫可以解決的了。非結構化數據的超大規模和增長,占總數據量的80~90%,比結構化數據增長快10倍到50倍,是傳統數據倉庫的10倍到50倍。
大數據特點:
海量數據有不同格式,第一種是結構化,我們常見的數據,還有半結據化網頁數據,還有非結構化視頻音頻數據。而且這些數據化他們處理方式是比較大的。數據類型繁多,如網路日誌、視頻、圖片、地理位置信息,等等。
2. 第三章 大數據存儲
一,HDFS的基本特徵與構架
1.基本特徵
(1)大規模數據分布存儲能力:以分布式存儲能力和良好的可擴展性。(基於大量分布節點上的本地文件系統,構建一個邏輯上具有巨大容量的分布式文件系統,並且整個文件系統的容量可隨集群中節點的增加而線性擴展)
(2)高並發訪問能力:提供很高的數據訪問寬頻(高數據吞吐率),並且可以把帶寬的大小等比例擴展到集群中的全部節點上
(3)強大的容錯能力:(設計理念中硬體故障被視作常態)保證在經常有節點發生硬體故障的情況下正確檢測硬體故障,並且能自動從故障中快速恢復,確保數據不丟失(採用多副本數據塊形式存儲)
(4)順序式文件訪問:(大數據批處理都是大量簡單數據記錄的順序處理)對順序讀進行了優化,支持大量數據的快速順序讀出,代價是對於隨機的訪問負載較高
(5)簡單的一致性模型(一次寫多次讀):支持大量數據的一次寫入,多次讀取;不支持已寫入數據的更新操作,但允許在文件尾部添加新的數據
(6)數據塊存儲模式:默認的塊大小是64MB。好處:減少元數據的數量,允許這些數據塊通過隨機方式選擇節點,分布存儲在不同地方
2.基本框架與工作過程
(1)基本組成結構與文件訪問過程
[1]HDFS;一個建立在一組分布式伺服器節點的本地文件系統之上的分布式文件系統(採用經典主-從結構)
[2]主控節點NameNode:
1)是一個主伺服器,用來管理整個文件系統的命名空間和元數據,以及處理來自外界的文件訪問請求
2)保存了文件系統的三中元數據
命名空間:整個分布式文件系統的目錄結構
數據塊與文件名的映射表
每個數據塊副本的位置信息,每一個數據塊默認有3個副本
[3]從節點DataNode:
1)用來實際存儲和管理文件的數據塊
2)為了防止數據丟失,每個數據塊默認有3個副本,且3個副本會分別復制在不同節點上,以避免一個節點失效造成一個數據塊的徹底丟失
[4]程序訪問文件時,實際文件數據流並不會通過NameNode傳送,而是從NameNode獲得所需訪問數據塊的存儲位置信息後,直接去訪問對應的DataNode獲取數據
[5]設計好處:
1)可以允許一個文件的數據能同時在不同DataNode上並發訪問,提高數據訪問的速度
2)減少NameNode的負擔,避免使NameNode成為數據訪問瓶頸
[6]基本訪問過程:
1)首先,用戶的應用程序通過HDFS的客戶端程序將文件名發送至NameNode
2)NameNode接收到文件名之後,在HDFS目錄中檢索文件名對應的數據塊,再根據數據塊信息找到保存數據塊的DataNode地址,講這些地址回送到客戶端
3)客戶端接收到這些DataNode地址之後,與這些DataNode並行的進行數據傳輸操作,同時將操作結果的相關日誌提交到NameNode
2.數據塊
(1)為了提高硬碟的效率,文件系統中最小的數據讀寫單元是數據塊
(2)HDFS數據塊的默認大小是64MB,實際部署中,可能會更多
(3)將數據塊設置大的原因是減少定址開銷的時間
(4)當應用發起數據傳輸請求:
[1]NameNode首先檢索文件對應的數據塊信息,找到數據塊對應的DataNode
[2]DataNode根據數據塊信息在自身的存儲中尋找相應的文件,進而與應用程序之間交換數據
[3]因為檢索過程是但進行,所以要增加數據塊大小,這樣就可以減少定址的頻度和時間開銷
3.命名空間
(1)文件命名遵循「目錄/子目錄/文件」格式
(2)通過命令行或者是API可以創建目錄,並且將文件保存在目錄中。可以對文件進行創建,刪除,重命名操作
(3)命令空間由NameNode管理。所有對命名空間的改動都會被記錄
(4)允許用戶配置文件在HDFS上保存的副本數量,保存的副本數稱作「副本因子」
4.通信協議
(1)採用TCP協議作為底層的支撐協議
(2)應用協議
[1]應用可以向NameNode主動發起TCP連接
[2]應用和NameNode交互協議稱為Client協議
[3]NameNode和DataNode交互的協議稱為DataNode協議
(3)用戶和DataNode的交互是通過發起遠程調用(RPC),並由NameNode響應來完成的。另外,NameNode不會主動發起遠程過程調用請求
5.客戶端:是用戶和HDFS通信最常見的渠道,部署的HDFS都會提供客戶端
二,HDFS可靠性設計
1.HDFS數據塊多副本存儲設計
(1)採用了在系統中保存多個副本的方式保存數據,且同一個數據塊的多個副本會存放在不同節點上
(2)優點:
[1]採用多副本,可以讓客戶從不同數據塊中讀取數據,加快傳輸速度
[2]HDFS的DataNode之間通過網路傳輸數據,如果採用多個副本可以判斷數據傳輸是否出錯
[3]多副本可以保證某個DataNode失效的情況下,不會丟失數據
2.可靠性的設計實現
(1)安全模式:
[1]HDFS啟動時,NameNode進入安全模式
[2]處於安全模式的NameNode不能做任何文本操作,甚至內部的副本創建不允許
[3]NameNode需要和各個DataNode通信,獲得其中保存的數據塊信息,並對數據塊信息進行檢查
[4]只有通過了NameNode檢查,一個數據塊被認為安全。當被認為安全的數據塊所佔比例達到某個閾值,NameNode退出
(2)SecondaryNmaeNode
[1]使用它來備份NameNode元數據,以便在其失效時能從中恢復出其上的元數據
[2]它充當NameNode的一個副本,本身並不處理任何請求。
[3]作用:周期性保存NameNode的元數據
(3)心跳包和副本重新創建
[1]心跳包:位於HDFS核心的NameNode,通過周期性的活動檢查DataNode的活動
[2]檢測到DataNode失效,保存在其上的數據不可用。則其上保存的副本需要重新創建這個副本,放到另外可用的地方
(4)數據一致性
[1]採用了數據校驗和機制
[2]創建文件時,HDFS會為這個文件生成一個校驗和,校驗和文件和文件本身保存在同一空間上,
[3]傳輸數據時會將數據與校驗和一起傳輸,應用收到數據後可以進行校驗
(5)租約
[1]防止同一個文件被多個人寫入數據
[2]NameNode保證同一個文件只會發放一個允許的租約,可以有效防止出現多人寫入的情況
(6)回滾
三,HDFS文件存儲組織與讀寫
1.文件數據的存儲組織
(1)NameNode目錄結構
[1]藉助本地文件系統來保存數據,保存文件夾位置由配置選項({dfs.name.dir}/{/tmp/dfs/name})決定
[2]在NameNode的${dfs.name.dir}之下有3個文件夾和1個文件:
1)current目錄:
文件VERSION:保存了當前運行的HDFS版本信息
FsImages:是整個系統的空間鏡像文件
Edit:EditLog編輯文件
Fstime:上一次檢查點時間
2)previous.checkpoint目錄:和上一個一致,但是保存的是上一次檢查點的內容
3)image目錄:舊版本的FsImage存儲位置
4)in_use.look:NameNode鎖,只在NameNode有效(啟動並且能和DataNode正常交互)時存在。
(2)DataNode目錄結構
[1]藉助本地文件系統來保存數據。保存文件夾位置由配置選項{dfs.data.dir}決定
[2]在其之下有4個子目錄和2個文件
1)current目錄:已經成功寫入的數據塊,以及一些系統需要的文件
a)文件VERSION:保存了當前運行的HDFS版本信息
b)subdirXX:當同一目錄下文件超過一定限制,新建一個目錄,保存多出來的數據塊和元數據
2)tmp目錄和blockBeingWritten目錄:正在寫入的數據塊,是HDFS系統內部副本創建時引發的寫入操作對應的數據塊
3)detach目錄:用於DataNode升級
4)Storage目錄:防止版本不同帶來風險
5)in_user.lock文件:DataNode鎖。只有在DataNode有效時存在。
(3)CheckPointNode目錄結構:和上一個基本一致
2.數據的讀寫過程
(1)數據讀取過程
[1]首先,客戶端調用FileSystem實例的open方法,獲得這個文件對應的輸入流,在HDFS中就是DFSInputStream
[2]構造第一步的輸入流時,通過RPC遠程調用NameNode可以獲得NameNode中此文件對應的數據塊保存位置,包括這個文件副本的保存位置(註:在輸入流中會按照網路拓撲結構,根據與客戶端距離對DataNode進行簡單排序)
[3]-[4]獲得此輸入流後,客戶端調用READ方法讀取數據。輸入流選擇最近的DFSInputStream會根據前面的排序結果,選擇最近的DataNode建立連接並讀取數據。
[5]如果已達到數據塊末端,關閉這個DataNode的連接,然後重新查找下一個數據塊
[6]客戶端調用close,關閉輸入流DFSInputStream
(2)數據輸入過程
[1]-[2]:客戶端調用FileSystem實例的create方法,創建文件。檢查後,在NameNode添加文件信息,創建結束之後,HDFS會返回一個輸出流DFSDataOutputStream給客戶端
[3]調用輸出流的write方法向HDFS中對應的文件寫入數據。
數據首先會被分包,這些分包會寫入一個輸出流的內部隊列Data隊列中,接收完整數據分包,輸出流回想NameNode申請保存文件和副本數據塊的若干個DataNode
[4]DFSDataOutputStream會(根據網路拓撲結構排序)將數據傳輸給距離上最短的DataNode,這個節點接收到數據包後傳給下一個。數據在各節點之間通過管道流通,減少傳輸開銷
[5]數據節點位於不同機器上,數據需要通過網路發送。(為保證數據節點數據正確,接收到數據的節點要向發送者發送確認包)
[6]執行3-5知道數據全部寫完,DFSDataInputStream繼續等待知道所有數據寫入完畢並確認,調用complete方法通知NameNode文件寫入完成
[7]NameNode接收到complete消息之後,等待相應數量的副本寫入完畢後,告知客戶端
傳輸過程,當某個DataNode失效,HDFS執行:
1)關閉數據傳輸的管道
2)將等待ACK隊列的數據放到Data隊列頭部
3)更新正常DataNode中所有數據塊版本。當失效的DataNode重啟,之前的數據塊會因為版本不對被清除
4)在傳輸管道中刪除失效的DataNode,重新建立管道並發送數據包
4.HDFS文件系統操作命令
(1)HDFS啟動與關閉
[1]啟動過程:
1)進入到NameNode對應節點的Hadoop安裝目錄
2)執行啟動腳本:bin/start-dfs.sh
[2]關閉過程:bin/stop-dfs.sh
(2)文件操作命令格式與注意事項
[1]基本命令格式:
1)bin/hadoop dfs-cmd <args> args-> scheme://authority/path
2)args參數基本格式前面是scheme,authority是機器地址和對應埠
a)本地文件,scheme是file
b)HDFS上文件,scheme是hdfs
(3)文件操作基本格式
[1]hadoop dfs-cat URL [URL ...]
[2]作用:將參數所指示文件內容輸出到stdout
3. 日誌管理大數據分析,合規就是這么簡單
本篇文章將討論 SIEM 解決方案一個非常重要的因素:集成合規性管理。
現如今,數據泄露的情況越來越嚴重,企業每天還要面對各種各樣的網路攻擊,並且合規要求也越來越嚴格。
Log360 通過提供一系列功能,幫助企業合規管理日誌:
預定義的合規性報表:
Log360提供了多個預定義 合規性報表 ,包括PCI DSS、SOX、HIPAA、FISMA、GLBA、ISO 27001、GDPR以及信息安全等級保護(ISLP)合規性報表。您可以根據需要查看或導出報表。
自定義合規性報表:
由於隨時可能發布新的法規,而且一些企業也有內部需求,所以Log360允許您通過幾個簡單的步驟來構建自定義合規性報表。
安全控制的建立:
合規性規則不僅僅是處理審計報表所定義的一組報表,該規則要求您具有嚴格的安全機制,以幫助您及早發現安全事件,並證明您已經採取了所有必要的措施來保護您的網路免受攻擊。
Log360幫助您建立以下安全機制:
事件檢測機制:
高級安全事件檢測方法可以幫助您在事件的早期階段進行檢測,對於發現的事件都提供了詳細的文檔,您可以證明您擁有嚴格的事件檢測機制。
數據發現:
合規性策略要求您不斷地在您的網路中監視個人身份信息(PII),並採取措施始終保持其安全性。Log360的自動數據發現功能可以幫助您做到這一點,主頁也提供了關於所有已發現數據的必要信息。
詳細報告:
Log360記錄所有事件調查的詳細搜索報告,可以很方便的以您喜歡的格式導出。
事件管理 :
事件管理記錄可以幫助您證明您在處理所有安全事件時都盡職盡責。
安全日誌歸檔:
大多數合規性策略都要求您在指定的最短時間內安全地歸檔日誌,因為將來的調查可能需要這些日誌。
Log360提供了靈活的歸檔選項,使您能夠以自定義的間隔自動歸檔日誌,並根據需要存儲日誌。使用MD5校驗對存檔進行安全加密,MD5是文件計算唯一的哈希值。
如果以任何方式修改存檔文件,那麼該值也會隨之變化,您可以使用它來證明它們沒有被篡改。歷史日誌導入功能還允許您根據需要導入和搜索歸檔日誌。
Log360是一個完整的SIEM解決方案,它幫助企業滿足各種審計、安全和合規性需求,並展示了Log360如何憑借其強大的SIEM功能在競爭對手中脫穎而出。
點擊下方了解更多,可以了解Log360更多功能!
4. 大數據存儲與應用特點及技術路線分析
大數據存儲與應用特點及技術路線分析
大數據時代,數據呈爆炸式增長。從存儲服務的發展趨勢來看,一方面,對數據的存儲量的需求越來越大;另一方面,對數據的有效管理提出了更高的要求。大數據對存儲設備的容量、讀寫性能、可靠性、擴展性等都提出了更高的要求,需要充分考慮功能集成度、數據安全性、數據穩定性,系統可擴展性、性能及成本各方面因素。
大數據存儲與應用的特點分析
「大數據」是由數量巨大、結構復雜、類型眾多數據構成的數據集合,是基於雲計算的數據處理與應用模式,通過數據的整合共享,交叉復用形成的智力資源和知識服務能力。其常見特點可以概括為3V:Volume、Velocity、Variety(規模大、速度快、多樣性)。
大數據具有數據規模大(Volume)且增長速度快的特性,其數據規模已經從PB級別增長到EB級別,並且仍在不斷地根據實際應用的需求和企業的再發展繼續擴容,飛速向著ZB(ZETA-BYTE)的規模進軍。以國內最大的電子商務企業淘寶為例,根據淘寶網的數據顯示,至2011年底,淘寶網最高單日獨立用戶訪問量超過1.2億人,比2010年同期增長120%,注冊用戶數量超過4億,在線商品數量達到8億,頁面瀏覽量達到20億規模,淘寶網每天產生4億條產品信息,每天活躍數據量已經超過50TB.所以大數據的存儲或者處理系統不僅能夠滿足當前數據規模需求,更需要有很強的可擴展性以滿足快速增長的需求。
(1)大數據的存儲及處理不僅在於規模之大,更加要求其傳輸及處理的響應速度快(Velocity)。
相對於以往較小規模的數據處理,在數據中心處理大規模數據時,需要服務集群有很高的吞吐量才能夠讓巨量的數據在應用開發人員「可接受」的時間內完成任務。這不僅是對於各種應用層面的計算性能要求,更加是對大數據存儲管理系統的讀寫吞吐量的要求。例如個人用戶在網站選購自己感興趣的貨物,網站則根據用戶的購買或者瀏覽網頁行為實時進行相關廣告的推薦,這需要應用的實時反饋;又例如電子商務網站的數據分析師根據購物者在當季搜索較為熱門的關鍵詞,為商家提供推薦的貨物關鍵字,面對每日上億的訪問記錄要求機器學習演算法在幾天內給出較為准確的推薦,否則就丟失了其失效性;更或者是計程車行駛在城市的道路上,通過GPS反饋的信息及監控設備實時路況信息,大數據處理系統需要不斷地給出較為便捷路徑的選擇。這些都要求大數據的應用層可以最快的速度,最高的帶寬從存儲介質中獲得相關海量的數據。另外一方面,海量數據存儲管理系統與傳統的資料庫管理系統,或者基於磁帶的備份系統之間也在發生數據交換,雖然這種交換實時性不高可以離線完成,但是由於數據規模的龐大,較低的數據傳輸帶寬也會降低數據傳輸的效率,而造成數據遷移瓶頸。因此大數據的存儲與處理的速度或是帶寬是其性能上的重要指標。
(2)大數據由於其來源的不同,具有數據多樣性的特點。
所謂多樣性,一是指數據結構化程度,二是指存儲格式,三是存儲介質多樣性。對於傳統的資料庫,其存儲的數據都是結構化數據,格式規整,相反大數據來源於日誌、歷史數據、用戶行為記錄等等,有的是結構化數據,而更多的是半結構化或者非結構化數據,這也正是傳統資料庫存儲技術無法適應大數據存儲的重要原因之一。所謂存儲格式,也正是由於其數據來源不同,應用演算法繁多,數據結構化程度不同,其格式也多種多樣。例如有的是以文本文件格式存儲,有的則是網頁文件,有的是一些被序列化後的比特流文件等等。所謂存儲介質多樣性是指硬體的兼容,大數據應用需要滿足不同的響應速度需求,因此其數據管理提倡分層管理機制,例如較為實時或者流數據的響應可以直接從內存或者Flash(SSD)中存取,而離線的批處理可以建立在帶有多塊磁碟的存儲伺服器上,有的可以存放在傳統的SAN或者NAS網路存儲設備上,而備份數據甚至可以存放在磁帶機上。因而大數據的存儲或者處理系統必須對多種數據及軟硬體平台有較好的兼容性來適應各種應用演算法或者數據提取轉換與載入(ETL)。
大數據存儲技術路線最典型的共有三種:
第一種是採用MPP架構的新型資料庫集群,重點面向行業大數據,採用Shared Nothing架構,通過列存儲、粗粒度索引等多項大數據處理技術,再結合MPP架構高效的分布式計算模式,完成對分析類應用的支撐,運行環境多為低成本 PC Server,具有高性能和高擴展性的特點,在企業分析類應用領域獲得極其廣泛的應用。
這類MPP產品可以有效支撐PB級別的結構化數據分析,這是傳統資料庫技術無法勝任的。對於企業新一代的數據倉庫和結構化數據分析,目前最佳選擇是MPP資料庫。
第二種是基於Hadoop的技術擴展和封裝,圍繞Hadoop衍生出相關的大數據技術,應對傳統關系型資料庫較難處理的數據和場景,例如針對非結構化數據的存儲和計算等,充分利用Hadoop開源的優勢,伴隨相關技術的不斷進步,其應用場景也將逐步擴大,目前最為典型的應用場景就是通過擴展和封裝 Hadoop來實現對互聯網大數據存儲、分析的支撐。這裡面有幾十種NoSQL技術,也在進一步的細分。對於非結構、半結構化數據處理、復雜的ETL流程、復雜的數據挖掘和計算模型,Hadoop平台更擅長。
第三種是大數據一體機,這是一種專為大數據的分析處理而設計的軟、硬體結合的產品,由一組集成的伺服器、存儲設備、操作系統、資料庫管理系統以及為數據查詢、處理、分析用途而特別預先安裝及優化的軟體組成,高性能大數據一體機具有良好的穩定性和縱向擴展性。
以上是小編為大家分享的關於大數據存儲與應用特點及技術路線分析的相關內容,更多信息可以關注環球青藤分享更多干貨
5. ElasticSearch性能優化實踐(JVM調優+ES調優)
近一年內對公司的 ELK 日誌系統做過性能優化,也對 SkyWalking 使用的 ES 存儲進行過性能優化,在此做一些總結。本篇主要是講 ES 在 ELK 架構中作為日誌存儲時的性能優化方案。
隨著接入ELK的應用越來越多, 每日新增索引約 230 個,新增 document 約 3000萬到 5000萬 。
每日上午和下午是日誌上傳高峰期,在 Kibana 上查看日誌,發現問題:
(1) 日誌會有 5-40 分鍾的延遲
(2) 有很多日誌丟失,無法查到判羨
數據先是存放在 ES 的內存 buffer,然後執行 refresh 操作寫入到操作系統的內存緩存 os cache,此後數據就可以被搜索到。
所以,日誌延遲可能是我們的數據積壓在 buffer 中沒有進入 os cache 。
查看日誌發現很多 write 拒絕執行的情況
從日誌中可以看出 ES 的 write 線程池已經滿負荷,執行任務的線程已經達到最大16個線程,而200容量的隊列也已經放不下新的task。
查看線程池的情況也可以看出 write 線程池有很多寫入的任務
所以我們需要優化 ES 的 write 的性能。
ES 的優化悔侍分為很多方面,我們要根據使用場景考慮對 ES 的要求。
根據個人實踐經驗,列舉三種不同場景下的特點 :
這三類場景的特點如下:
關於實時性
可以從三方面進行優化:JVM性能調優、ES性能調優、控制數據來源
可以從三方面進行優化:JVM 性能調優、ES 性能調優、控制數據來源
第一步是 JVM 調優。
因為 ES 是依賴於 JVM 運行,沒有合理的設置 JVM 參數,將浪費資源,甚至導致 ES 很容易 OOM 而崩潰。
(1) 查看 GC 日誌
(2) 使用 jstat 看下每秒的 GC 情況
用下面幾種方式都可查看新、老年代內存大小
(1) 使用 jstat -gc pid 查看 Eden 區、老年代空間大小
(2) 使用 jmap -heap pid 查看 Eden 區、老年代空間大小
(3) 查看 GC 日誌中的 GC 明細
上面的幾種方式都查詢出,新生代總內存約1081M,即1G左右;老年代總內存為19864000K,約19G。新、老比例約1:19,出乎意料。
這真是一個容易踩坑的地方。
如果沒有顯示設置新生代大小,JVM 在使用 CMS 收集器時會自動調參,新生代的大小在沒有設置的情況下是通過計算得出的,其大小可能與 NewRatio 的默認配置沒什麼關系而與 ParallelGCThreads 的配置有一定的碧沖吵關系。
所以: 新生代大小有不確定性,最好配置 JVM 參數 -XX:NewSize、-XX:MaxNewSize 或者 -xmn ,免得遇到一些奇怪的 GC,讓人措手不及。
新生代過小,老年代過大的影響
32G 的內存,分配 20G 給堆內存是不妥當的,所以調整為總內存的50%,即16G。
修改 elasticsearch 的 jvm.options 文件
設置要求:
因為指定新生代空間大小,導致 JVM 自動調參只分配了 1G 內存給新生代。
修改 elasticsearch 的 jvm.options 文件,加上
老年代則自動分配 16G-8G=8G 內存,新生代老年代的比例為 1:1。修改後每次 Young GC 頻率更低,且每次 GC 後只有少數數據會進入老年代。
ES默認使用的垃圾回收器是:老年代(CMS)+ 新生代(ParNew)。如果是JDK1.9,ES 默認使用G1垃圾回收器。
因為使用的是 JDK1.8,所以並未切換垃圾回收器。後續如果再有性能問題再切換G1垃圾回收器,測試是否有更好的性能。
優化前
每秒列印一次 GC 數據。可以看出,年輕代增長速度很快,幾秒鍾年輕代就滿了,導致 Young GC 觸發很頻繁,幾秒鍾就會觸發一次。而每次 Young GC 很大可能有存活對象進入老年代,而且,存活對象多的時候(看上圖中第一個紅框中的old gc數據),有(51.44-51.08)/100 * 19000M = 約68M。每次進入老年代的對象較多,加上頻繁的 Young GC,會導致新老年代的分代模式失去了作用,相當於老年代取代了新生代來存放近期內生成的對象。當老年代滿了,觸發 Full GC,存活的對象也會很多,因為這些對象很可能還是近期加入的,還存活著,所以一次 Full GC 回收對象不多。而這會惡性循環,老年代很快又滿了,又 Full GC,又殘留一大部分存活的,又很容易滿了,所以導致一直頻繁 Full GC。
優化後
每秒列印一次 GC 數據。可以看出,新生代增長速度慢了許多,至少要60秒才會滿,如上圖紅框中數據,進入老年代的對象約(15.68-15.60)/100 * 10000 = 8M,非常的少。所以要很久才會觸發一次 Full GC 。而且等到 Full GC 時,老年代裡很多對象都是存活了很久的,一般都是不會被引用,所以很大一部分會被回收掉,留一個比較干凈的老年代空間,可以繼續放很多對象。
ES 啟動後,運行14個小時
優化前
Young GC 每次的時間是不長的,從上面監控數據中可以看出每次GC時長 1467.995/27276 約等於 0.05秒。那一秒鍾有多少時間實在處理Young GC ? 計算公式:1467秒/ (60秒×60分 14小時)= 約0.028秒,也就是100秒中就有2.8秒在Young GC,也就是有2.8S的停頓,這對性能還是有很大消耗的。同時也可以算出多久一次Young GC, 方程是: 60秒×60分*14小時/ 27276次 = 1次/X秒,計算得出X = 0.54,也就是0.54秒就會有一次Young GC,可見 Young GC 頻率非常頻繁。
優化後
Young GC 次數只有修改前的十分之一,Young GC 時間也是約八分之一。Full GC 的次數也是只有原來的八分之一,GC 時間大約是四分之一。
GC 對系統的影響大大降低,性能已經得到很大的提升。
上面已經分析過ES作為日誌存儲時的特性是:高並發寫、讀少、接受30秒內的延時、可容忍部分日誌數據丟失。
下面我們針對這些特性對ES進行調優。
本人整理了一下數據寫入的底層原理
refresh
ES 接收數據請求時先存入 ES 的內存中,默認每隔一秒會從內存 buffer 中將數據寫入操作系統緩存 os cache,這個過程叫做 refresh;
到了 os cache 數據就能被搜索到(所以我們才說 ES 是近實時的,因為1s 的延遲後執行 refresh 便可讓數據被搜索到)
fsync
translog 會每隔5秒或者在一個變更請求完成之後執行一次 fsync 操作,將 translog 從緩存刷入磁碟,這個操作比較耗時,如果對數據一致性要求不是跟高時建議將索引改為非同步,如果節點宕機時會有5秒數據丟失;
flush
ES 默認每隔30分鍾會將 os cache 中的數據刷入磁碟同時清空 translog 日誌文件,這個過程叫做 flush。
merge
ES 的一個 index 由多個 shard 組成,而一個 shard 其實就是一個 Lucene 的 index ,它又由多個 segment 組成,且 Lucene 會不斷地把一些小的 segment 合並成一個大的 segment ,這個過程被稱為 段merge 。執行索引操作時, ES會先生成小的segment ,ES 有離線的邏輯對小的 segment 進行合並,優化查詢性能。但是合並過程中會消耗較多磁碟 IO,會影響查詢性能。
為了保證不丟失數據,就要保護 translog 文件的安全:
該方式提高數據安全性的同時, 降低了一點性能.
==> 頻繁地執行 fsync 操作, 可能會產生阻塞導致部分操作耗時較久. 如果允許部分數據丟失, 可設置非同步刷新 translog 來提高效率,還有降低 flush 的閥值,優化如下:
寫入 Lucene 的數據,並不是實時可搜索的,ES 必須通過 refresh 的過程把內存中的數據轉換成 Lucene 的完整 segment 後,才可以被搜索。
默認1秒後,寫入的數據可以很快被查詢到,但勢必會產生大量的 segment,檢索性能會受到影響。所以,加大時長可以降低系統開銷。對於日誌搜索來說,實時性要求不是那麼高,設置為5秒或者10s;對於SkyWalking,實時性要求更低一些,我們可以設置為30s。
設置如下:
index.merge.scheler.max_thread_count 控制並發的 merge 線程數,如果存儲是並發性能較好的 SSD,可以用系統默認的 max(1, min(4, availableProcessors / 2)),當節點配置的 cpu 核數較高時,merge 佔用的資源可能會偏高,影響集群的性能,普通磁碟的話設為1,發生磁碟 IO 堵塞。設置max_thread_count 後,會有 max_thread_count + 2 個線程同時進行磁碟操作,也就是設置為 1 允許3個線程。
設置如下:
該方式可對已經生成的索引做修改,但是對於後續新建的索引不生效,所以我們可以製作 ES 模板,新建的索引按模板創建索引。
因為我們的業務日誌是按天維度創建索引,索引名稱示例:user-service-prod-2020.12.12,所以用通配符 202 ..*匹配對應要創建的業務日誌索引。
前文已經提到過,write 線程池滿負荷,導致拒絕任務,而有的數據無法寫入。
而經過上面的優化後,拒絕的情況少了很多,但是還是有拒絕任務的情況。
所以我們還需要優化write線程池。
從 prometheus 監控中可以看到線程池的情況:
為了更直觀看到ES線程池的運行情況,我們安裝了 elasticsearch_exporter 收集 ES 的指標數據到 prometheus,再通過 grafana 進行查看。
經過上面的各種優化,拒絕的數據量少了很多,但是還是存在拒絕的情況,如下圖:
write 線程池如何設置:
參考: ElasticSearch線程池
write 線程池採用 fixed 類型的線程池,也就是核心線程數與最大線程數值相同。線程數默認等於 cpu 核數,可設置的最大值只能是 cpu 核數加1,也就是16核CPU,能設置的線程數最大值為17。
優化的方案:
config/elasticsearch.yml文件增加配置
優化後效果
Swap 交換分區 :
參考: ElasticSearch官方解釋為什麼要禁用交換內存
有三種方式可以實現 ES 不使用Swap分區
執行命令
可以臨時禁用 Swap 內存,但是操作系統重啟後失效
執行下列命令
正常情況下不會使用 Swap,除非緊急情況下才會 Swap。
config/elasticsearch.yml 文件增加配置
分片
索引的大小取決於分片與段的大小,分片過小,可能導致段過小,進而導致開銷增加;分片過大可能導致分片頻繁 Merge,產生大量 IO 操作,影響寫入性能。
因為我們每個索引的大小在15G以下,而默認是5個分片,沒有必要這么多,所以調整為3個。
分片的設置我們也可以配置在索引模板。
副本數
減少集群副本分片數,過多副本會導致 ES 內部寫擴大。副本數默認為1,如果某索引所在的1個節點宕機,擁有副本的另一台機器擁有索引備份數據,可以讓索引數據正常使用。但是數據寫入副本會影響寫入性能。對於日誌數據,有1個副本即可。對於大數據量的索引,可以設置副本數為0,減少對性能的影響。
分片的設置我們也可以配置在索引模板。
有的應用1天生成10G日誌,而一般的應用只有幾百到1G。一天生成10G日誌一般是因為部分應用日誌使用不當,很多大數量的日誌可以不打,比如大數據量的列表查詢介面、報表數據、debug 級別日誌等數據是不用上傳到日誌伺服器,這些 即影響日誌存儲的性能,更影響應用自身性能 。
優化後的兩周內ELK性能良好,沒有使用上的問題:
參考
6. 如何對大數據量日誌表做分析
對大數據量日誌表做分析。
內容的分析的話就只能藉助軟體比對分析,
對標題分析的話就可以直接通過程序查找。
最後辦法就是人工一個個排查了。
7. 大數據中的日誌數據包括哪些
日誌數據的類型包括:1.錯誤日誌(errorlog);2.慢查詢日誌(slow query log) ;3.一般查詢日誌(general log);4.二進制日誌(binlog);5.中繼日誌(relay log);。
日誌一般分成Undo與Redo:Undo一般用於事務的取消與回滾,記錄的是數據被修改前的值;Redo一般用於恢復已確認但未寫入資料庫的數據,記錄的是數據修改後的值。例如:資料庫忽然斷電重啟,資料庫啟動時一般要做一致性檢查,會把已寫到Redo的數據但未寫入資料庫的數據重做一遍。
大數據以容量大、類型多、存取速度快、應用價值高為主要特徵的數據集合,最早應用於IT行業,目前正快速發展為對數量巨大、來源分散、格式多樣的數據進行採集、存儲和關聯分析,從中發現新知識、創造新價值、提升新能力的新一代信息技術和服務業態。大數據必須採用分布式架構,對海量數據進行分布式數據挖掘,因此必須依託雲計算的分布式處理、分布式資料庫和雲存儲、虛擬化技術。
8. 態勢感知,懂的人不用解釋,現在對於態勢感知更多的是信息網路的安全態勢感知,
大數據時代,除在信息網路的安全方面外,在無人機、無人駕駛、氣象分析、軍事、交通軌道等等方面,態勢感知的應用研究日益廣泛和必要!
一般來說,態勢感知在大規模系統環境中,對能夠引起系統狀態發生變化的安全要素進行獲取、理解、顯示以及預測未來的發展趨勢。聯合作戰、網路中心戰的提出,推動了態勢感知的產生和不斷發展,作為實現態勢感知的重要平台和物質基礎,態勢圖對數據和信息復雜的需求和特性構成了突出的大數據問題.從大數據的高度思考,解決態勢感知面臨的信息處理難題,是研究聯合作戰態勢感知的重要方法.通過分析聯合作戰態勢感知的數據類型、結構和特點,得出態勢感知面臨著大數據挑戰的結論.初步探討了可能需要解決的問題和前沿信息技術的應用需求,最後對關鍵數據和信息處理技術進行了研究.該研究對於「大數據」在軍事信息處理和數據化決策等領域的研究具有重要探索價值。
相關參考(摘錄網上):
1 引言
隨著計算機和通信技術的迅速發展, 計算機網路的應用越來越廣泛, 其規模越來越龐大, 多層面的網路安全威脅和安全風險也在不斷增加, 網路病毒、 Dos/DDos攻擊等構成的威脅和損失越來越大, 網路攻擊行為向著分布化、 規模化、 復雜化等趨勢發展, 僅僅依靠防火牆、 入侵檢測、 防病毒、 訪問控制等單一的網路安全防護技術, 已不能滿足網路安全的需求, 迫切需要新的技術, 及時發現網路中的異常事件, 實時掌握網路安全狀況, 將之前很多時候亡羊補牢的事中、 事後處理,轉向事前自動評估預測, 降低網路安全風險, 提高網路安全防護能力。
網路安全態勢感知技術能夠綜合各方面的安全因素, 從整體上動態反映網路安全狀況, 並對網路安全的發展趨勢進行預測和預警。 大數據技術特有的海量存儲、 並行計算、 高效查詢等特點, 為大規模網路安全態勢感知技術的突破創造了機遇, 藉助大數據分析, 對成千上萬的網路日誌等信息進行自動分析處理與深度挖掘, 對網路的安全狀態進行分析評價, 感知網路中的異常事件與整體安全態勢。
2 網路安全態勢相關概念
2.1 網路態勢感知
態勢感知(Situation Awareness, SA) 的概念是1988年Endsley提出的, 態勢感知是在一定時間和空間內對環境因素的獲取, 理解和對未來短期的預測。 整個態勢感知過程可由圖1所示的三級模型直觀地表示出來。
所謂網路態勢是指由各種網路設備運行狀況、 網路行為以及用戶行為等因素所構成的整個網路當前狀態和變化趨勢。
網路態勢感知(Cyberspace Situation Awareness,CSA) 是1999年Tim Bass首次提出的, 網路態勢感知是在大規模網路環境中, 對能夠引起網路態勢發生變化的安全要素進行獲取、 理解、 顯示以及預測最近的發展趨勢攔談。
態勢是一種狀態、 一種趨勢, 是整體和全局的概念, 任何單一的情況或狀態都不能稱之為態勢。 因此對態勢的理解特別強調環境性、 動態性和整體性, 環境性是指態勢感知的應用環境是在一個較大的范圍內具有一定規模的網路; 動態性是態勢隨時間不斷變化, 態勢信息不僅包括過去和當前的狀態, 還要對未來的趨勢做出預測; 整體性是態勢各實體間相互關系的體現,某些網路實體狀態發生變化, 會影山睜響到其他網路實體的狀態, 進而影響整個網路的態勢。
2.2 網路安全態勢感知
網路安全態勢感知就是利用數據融合、 數據挖掘、智能分析和可視化等技術, 直觀顯示網路環境的實時安全狀況, 為網路安全提供保障。 藉助網路安全態勢感知, 網路監管人員可以及時了解網路的狀態、 受攻擊情況、 攻擊來源以及哪些服務易受到攻擊等情況, 對發起攻擊的網路採取措施; 網路用戶可以清楚地掌握所在網路的安全狀態和趨勢, 做好相應的防範准備, 避免和減少網路中病毒和惡意攻擊帶來的損失; 應急響應組織也可以從網 絡安全態勢中了解所服務網 絡的安全狀況和發展趨勢, 為 制定有預見性的應急預案提供基礎。
3 網路安全態勢感知相關技術
對於大規模網路而言, 一方面網路節點眾多、 分支復雜、 數據流量大, 存在多種異構網路環境和應用平台; 另一方面網路攻擊技術和手段呈平台化、 集成化和自 動化的發展趨勢, 網路攻擊具有更強的隱蔽性和更長的潛伏時間, 網路威脅不斷增多且造成的損失不斷增逗衡歲大。 為了實時、 准確地顯示整個網路安全態勢狀況, 檢測出潛在、 惡意的攻擊行為, 網路安全態勢感知要在對網路資源進行要素採集的基礎上, 通過數據預處理、 網路安全態勢特徵提取、 態勢評估、 態勢預測和態勢展示等過程來完成, 這其中涉及許多相關的技術問題, 主要包括數據融合技術、 數據挖掘技術、 特徵提取技術、 態勢預測技術和可視化技術等。
3.1 數據融合技術
由於網路空間態勢感知的數據來自眾多的網路設備, 其數據格式、 數據內容、 數據質量千差萬別, 存儲形式各異, 表達的語義也不盡相同。 如果能夠將這些使用不同途徑、 來源於不同網路位置、 具有不同格式的數據進行預處理, 並在此基礎上進行歸一化融合操作,就可以為網路安全態勢感知提供更為全面、 精準的數據源, 從而得到更為准確的網路態勢。 數據融合技術是一個多級、 多層面的數據處理過程, 主要完成對來自網路中具有相似或不同特徵模式的多源信息進行互補集成, 完成對數據的自動監測、 關聯、 相關、 估計及組合等處理, 從而得到更為准確、 可靠的結論。 數據融合按信息抽象程度可分為從低到高的三個層次: 數據級融合、 特徵級融合和決策級融合, 其中特徵級融合和決策級融合在態勢感知中具有較為廣泛的應用。
3.2 數據挖掘技術
網路安全態勢感知將採集的大量網路設備的數據經過數據融合處理後, 轉化為格式統一的數據單元。這些數據單元數量龐大, 攜帶的信息眾多, 有用信息與無用信息魚龍混雜, 難以辨識。 要掌握相對准確、 實時的網路安全態勢, 必須剔除干擾信息。 數據挖掘就是指從大量的數據中挖掘出有用的信息, 即從大量的、 不完全的、 有雜訊的、 模糊的、 隨機的實際應用數據中發現隱含的、 規律的、 事先未知的, 但又有潛在用處的並且最終可理解的信息和知識的非平凡過程( NontrivialProcess) [1 ]。 數據挖掘可分為描述性挖掘和預測性挖掘, 描述性挖掘用於刻畫資料庫中數據的一般特性; 預測性挖掘在當前數據上進行推斷, 並加以預測。 數據挖掘方法主要有: 關聯分析法、 序列模式分析法、 分類分析法和聚類分析法。 關聯分析法用於挖掘數據之間的聯系; 序列模式分析法側重於分析數據間的因果關系;分類分析法通過對預先定義好的類建立分析模型, 對數據進行分類, 常用的模型有決策樹模型、 貝葉斯分類模型、 神經網路模型等; 聚類分析不依賴預先定義好的類, 它的劃分是未知的, 常用的方法有模糊聚類法、 動態聚類法、 基於密度的方法等。
3.3 特徵提取技術
網路安全態勢特徵提取技術是通過一系列數學方法處理, 將大規模網路安全信息歸並融合成一組或者幾組在一定值域范圍內的數值, 這些數值具有表現網路實時運行狀況的一系列特徵, 用以反映網路安全狀況和受威脅程度等情況。 網路安全態勢特徵提取是網路安全態勢評估和預測的基礎, 對整個態勢評估和預測有著重要的影響, 網路安全態勢特徵提取方法主要有層次分析法、 模糊層次分析法、 德爾菲法和綜合分析法。
3.4 態勢預測技術
網路安全態勢預測就是根據網路運行狀況發展變化的實際數據和歷史資料, 運用科學的理論、 方法和各種經驗、 判斷、 知識去推測、 估計、 分析其在未來一定時期內可能的變化情況, 是網路安全態勢感知的一個重要組成部分。 網路在不同時刻的安全態勢彼此相關, 安全態勢的變化有一定的內部規律, 這種規律可以預測網路在將來時刻的安全態勢, 從而可以有預見性地進行安全策略的配置, 實現動態的網路安全管理, 預防大規模網路安全事件的發生。 網路安全態勢預測方法主要有神經網路預測法、 時間序列預測法、 基於灰色理論預測法。
3.5 可視化技術
網路安全態勢生成是依據大量數據的分析結果來顯示當前狀態和未來趨勢, 而通過傳統的文本或簡單圖形表示, 使得尋找有用、 關鍵的信息非常困難。 可視化技術是利用計算機圖形學和圖像處理技術, 將數據轉換成圖形或圖像在屏幕上顯示出來, 並進行交互處理的理論、 方法和技術。 它涉及計算機圖形學、 圖像處理、 計算機視覺、 計算機輔助設計等多個領域。 目前已有很多研究將可視化技術和可視化工具應用於態勢感知領域, 在網路安全態勢感知的每一個階段都充分利用可視化方法, 將網路安全態勢合並為連貫的網路安全態勢圖, 快速發現網路安全威脅, 直觀把握網路安全狀況。
4 基於多源日誌的網路安全態勢感知
隨著網 絡規模的 擴大以及網 絡攻擊復雜度的增加, 入侵檢測、 防火牆、 防病毒、 安全審計等眾多的安全設備在網路中得到廣泛的應用, 雖然這些安全設備對網路安全發揮了一定的作用, 但存在著很大的局限,主要表現在: 一是各安全設備的海量報警和日誌, 語義級別低, 冗餘度高, 佔用存儲空間大, 且存在大量的誤報, 導致真實報警信息被淹沒。 二是各安全設備大多功能單一, 產生的報警信息格式各不相同, 難以進行綜合分析整理, 無法實現信息共享和數據交互, 致使各安全設備的總體防護效能無法得以充分的發揮。 三是各安全設備的處理結果僅能單一體現網路某方面的運行狀況, 難以提供全面直觀的網路整體安全狀況和趨勢信息。 為了有效克服這些網路安全管理的局限, 我們提出了基於多源日誌的網路安全態勢感知。
4.1 基於多源日誌的網路安全態勢感知要素獲取
基於多源日誌的網路安全態勢感知是對部署在網路中的多種安全設備提供的日誌信息進行提取、 分析和處理, 實現對網路態勢狀況進行實時監控, 對潛在的、惡意的網路攻擊行為進行識別和預警, 充分發揮各安全設備的整體效能, 提高網路安全管理能力。
基於多源日誌的網路安全態勢感知主要採集網路入口處防火牆日誌、 入侵檢測日誌, 網路中關鍵主機日誌以及主機漏洞信息, 通過融合分析這些來自不同設備的日誌信息, 全面深刻地挖掘出真實有效的網路安全態勢相關信息, 與僅基於單一日誌源分析網路的安全態
勢相比, 可以提高網路安全態勢的全面性和准確性。
4.2 利用大數據進行多源日誌分析處理
基於多源日誌的網路安全態勢感知採集了多種安全設備上以多樣的檢測方式和事件報告機制生成的海量數據, 而這些原始的日 志信息存在海量、 冗餘和錯誤等缺陷, 不能作為態勢感知的直接信息來源, 必須進行關聯分析和數據融合等處理。 採用什麼樣的技術才能快速分析處理這些海量且格式多樣的數據?
大數據的出現, 擴展了計算和存儲資源, 大數據自身擁有的Variety支持多類型數據格式、 Volume大數據量存儲、Velocity快速處理三大特徵, 恰巧是基於多源日誌的網路安全態勢感知分析處理所需要的。 大數據的多類型數據格式, 可以使網路安全態勢感知獲取更多類型的日誌數據, 包括網路與安全設備的日誌、 網路運行情況信息、 業務與應用的日誌記錄等; 大數據的大數據量存儲正是海量日誌存儲與處理所需要的; 大數據的快速處理為高速網路流量的深度安全分析提供了技術支持, 為高智能模型演算法提供計算資源。 因此, 我們利用大數據所提供的基礎平台和大數據量處理的技術支撐, 進行網路安全態勢的分析處理。
關聯分析。 網路中的防火牆日誌和入侵檢測日誌都是對進入網路的安全事件的流量的刻畫, 針對某一個可能的攻擊事件, 會產生大量的日誌和相關報警記錄,這些記錄存在著很多的冗餘和關聯, 因此首先要對得到的原始日誌進行單源上的關聯分析, 把海量的原始日誌轉換為直觀的、 能夠為人所理解的、 可能對網路造成危害的安全事件。 基於多源日誌的網路安全態勢感知採用基於相似度的報警關聯, 可以較好地控制關聯後的報警數量, 有利於減少復雜度。 其處理過程是: 首先提取報警日誌中的主要屬性, 形成原始報警; 再通過重復報警聚合, 生成聚合報警; 對聚合報警的各個屬性定義相似度的計算方法, 並分配權重; 計算兩個聚合報警的相似度, 通過與相似度閥值的比較, 來決定是否對聚合報警進行超報警; 最終輸出屬於同一類報警的地址范圍和報警信息, 生成安全事件。
融合分析。 多源日誌存在冗餘性、 互補性等特點,態勢感知藉助數據融合技術, 能夠使得多個數據源之間取長補短, 從而為感知過程提供保障, 以便更准確地生成安全態勢。 經過單源日誌報警關聯過程, 分別得到各自的安全事件。 而對於來自防火牆和入侵檢測日誌的的多源安全事件, 採用D-S證據理論(由Dempster於1967年提出, 後由Shafer於1976年加以推廣和發展而得名) 方法進行融合判別, 對安全事件的可信度進行評估, 進一步提高准確率, 減少誤報。 D-S證據理論應用到安全事件融合的基本思路: 首先研究一種切實可行的初始信任分配方法, 對防火牆和入侵檢測分配信息度函數; 然後通過D-S的合成規則, 得到融合之後的安全事件的可信度。
態勢要素分析。 通過對網路入口處安全設備日 志的安全分析, 得到的只是進入目 標網路的可能的攻擊信息, 而真正對網路安全狀況產生決定性影響的安全事件, 則需要通過綜合分析攻擊知識庫和具體的網路環境進行最終確認。 主要分為三個步驟: 一是通過對大量網路攻擊實例的研究, 得到可用的攻擊知識庫, 主要包括各種網路攻擊的原理、 特點, 以及它們的作用環境等; 二是分析關鍵主機上存在的系統漏洞和承載的服務的可能漏洞, 建立當前網路環境的漏洞知識庫, 分析當前網路環境的拓撲結構、 性能指標等, 得到網路環境知識庫; 三是通過漏洞知識庫來確認安全事件的有效性, 也即對當前網路產生影響的網路攻擊事件。 在網路安全事件生成和攻擊事件確認的過程中, 提取出用於對整個網路安全態勢進行評估的態勢要素, 主要包括整個網路面臨的安全威脅、 分支網路面臨的安全威脅、 主機受到的安全威脅以及這些威脅的程度等。
5 結語
為了解決日益嚴重的網路安全威脅和挑戰, 將態勢感知技術應用於網路安全中, 不僅能夠全面掌握當前網路安全狀態, 還可以預測未來網路安全趨勢。 本文在介紹網路安全態勢相關概念和技術的基礎上, 對基於多源日誌的網路安全態勢感知進行了探討, 著重對基於多源日誌的網路安全態勢感知要素獲取, 以及利用大數據進行多源日誌的關聯分析、 融合分析和態勢要素分析等內容進行了研究, 對於態勢評估、 態勢預測和態勢展示等相關內容, 還有待於進一步探討和研究。
9. [hive]一種基於Hive日誌分析的大數據存儲優化方法_王正也_百度文庫
一種基於Hive日誌分析的大數據存儲優化方法 王正也 網路文庫
http://wenku..com/link?url=-
2 一種基於Hive日誌的大數據存儲優化方法
2.1 優化方法概述
Hive作為Hadoop開源分布式平台下的數據倉庫工具,他的作用是HDFS上存儲的結構化數據,根據使用者的需求將其映射出數據表,並可以向用戶提供類似SQL的HiveQL查詢功能,並將用戶提交的Query轉換成Map-Rece任務執行。Hive的優點是提供類SQL的查詢介面,快速實現數據的統計分析功能,而不必編寫專用的Map-Rece任務。而也正是因為如此,通用的Hive數據倉庫,沒有進行專用化的優化設計,其查詢分析效率也有很大的優化空間[4]。
文章根據常用的HiveQL的查詢日誌分析和根據現有的數據存儲結構的關聯特性提出一種通用的Hive數據存儲的優化方法。
本策略認為優化一個專用的Hive海量數據倉庫分為以下幾個步驟: 1. 分析常用查詢日誌,根據使用人員習慣定製數據分區結構。 2. 使用專用的優化過的列式存儲結構作為數據導入格式。 3. 根據數據表,和表中欄位的實際物理意義合並壓縮重復欄位和數據表。 4. 根據數據表中欄位實際的取值優化欄位的存儲類型。 5. 編寫UDF,在不改變用戶使用習慣的基礎上,應用上述優化。 其中1.2.兩點在數據導入階段進行優化,3.4.5.是在對數據表欄位和表結構的優化,需要配合UDF來進行。通過上述優化過程可以大大節省HiveQL的查詢時間以及HDFS上數據的佔用空間。
2.2 根據查詢日誌進行分區優化
Hive的日誌記錄了Hive的運行狀況,為本文分析操作者的使用習慣提供了很大的幫助。可以通過編寫Hive的EXPAIN功能進行日誌的分析,利用Hive的EXPLAIN功能,本文可以得到查詢語句的抽象語法樹(ABSTRACT SYNTAX TREE),通過抽象語法樹,本文可以快速得到查詢語句的語法結構。
例如,以下一條語句SELECT col1, SUM(col2) FROM tab1 GROUP BY col1的通過EXPLAIN命令本文可以得到如下結果:
ABSTRACT SYNTAX TREE:
(TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME tab1))) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL col1)) (TOK_SELEXPR (TOK_FUNCTION sum (TOK_TABLE_OR_COL col2)))) (TOK_GROUPBY (TOK_TABLE_OR_COL col1))))
可以通過使用正則表達式抓取特徵數據,得到該語句的語法結構,同時通過編寫Shell腳本,批量執行EXPLAIN命令,可以很快的理解到使用者的常用語法習慣,為後文的分區優化提供了數據支持。 通過對使用者常用欄位進行分區(partition),帶來的便利是大大的節省了一些常用查詢的在硬碟中讀取數據所消耗的時間。 通常在沒有進行過優化的Hive系統中,每次查詢提交之後,Hive要對輸入數據進行全盤掃描滿足條件的的項目,通過合理的劃分分區,在單次任務提交後,可以按照任務的限定條件只掃描某些關鍵分區的數據,大大提高的Hive查詢執行的效率。
2.3 選取合適的Hive數據存儲格式
在Hive中數據表創建時需要指定文件存儲格式,在Hive0.90版本中,常用的數據格式分為TEXTFILE、SEQUNCEFILE、RCFILE和用戶自定格式等幾種,以上格式的主要區別在行式存儲與列式存儲,不同壓縮演算法等方面的區別。根據Hive數據表格的特性,和通過Hive日誌觀察到的用戶使用習慣等特性,通過選擇合適的文件存儲格式,可以大大提高查詢效率,減少查詢耗費時間。
4 結論
本文給出了一種基於Hive日誌分析的大數據存儲優化方法,通過實際測試可以看出,使用該優化方法的Hive數據存儲系統無論從磁碟空間利用率還是從查詢效率上都得到和很大提升。
10. 大數據存儲的三種方式
1、不斷加密:任何類型的數據對於任何一個企業來說都是至關重要的,而且通常被認為是私有的,並且在他們自己掌控的范圍內是安全的。
然而,黑客攻擊經常被覆蓋在業務故障中,最新的網路攻擊活動在新聞報道不斷充斥。因此,許多公司感到很難感到安全,尤其是當一些行業巨頭經常成為攻擊目標時。隨著企業為保護資產全面開展工作,加密技術成為打擊網路威脅的可行途徑。
2、倉庫存儲:大數據似乎難以管理,就像一個永無休止統計數據的復雜的漩渦。因此,將信息精簡到單一的公司位置似乎是明智的,這是一個倉庫,其中所有的數據和伺服器都可以被充分地規劃指定。然而,有些報告指出了反對這種方法的論據,指出即使是最大的存儲中心,大數據的指數增長也不再能維持。
3、備份服務雲端:大數據管理和存儲正在迅速脫離物理機器的范疇,並迅速進入數字領域。除了所有技術的發展,大數據增長得更快,以這樣的速度,世界上所有的機器和倉庫都無法完全容納它。
由於雲存儲服務推動了數字化轉型,雲計算的應用越來越繁榮。數據在一個位置不再受到風險控制,並隨時隨地可以訪問,大型雲計算公司將會更多地訪問基本統計信息。數據可以在這些服務上進行備份,這意味著一次網路攻擊不會消除多年的業務增長和發展。