文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2017.03.030
中文引用格式: 余輝,黃永峰,胡萍. 微博輿情的Hadoop存儲和管理平臺設計與實現[J].電子技術應用,2017,43(3):120-123,131.
英文引用格式: Yu Hui,Huang Yongfeng,Hu Ping. Design and implementation of Hadoop based storage and management platform on the Weibo public opinion[J].Application of Electronic Technique,2017,43(3):120-123,131.
0 引言
隨著Internet技術的迅速發展,全球各大互聯網公司的網絡輿情監控系統也蓬勃發展起來,網絡輿情監控系統所獲得的數據量急速膨脹。傳統的網絡計算、并行計算、分布式計算等數據處理的方式越來越不能滿足快速查詢、存儲、處理日益增長的數據的需要[1]。在此基礎上云計算的概念應運而生。云計算的新穎之處在于它幾乎可以提供無限的廉價存儲和計算能力,未來存儲模式將改變目前的存儲模式,不再存放在個人計算機及服務器上,而是存放在云服務器中,同時所有的計算、存儲、處理工作也將在云服務器完成,這樣給企業及各廠商帶來很多便利,節省存儲設備和軟件應用的投入成本。本文將網絡中大量各種不同類型的存儲設備通過應用軟件集合起來協同工作,并且將關系型數據庫和非關系型數據庫聯合應用,設計出一個快速檢索查詢、海量數據存儲、批量數據處理的多層體系架構的系統,且對外提供數據存儲和業務訪問功能,保證數據的安全性,并節約存儲空間[2]。
1 相關技術
基于微博輿情的Hadoop存儲主要包括微博的數據結構和Hbase兩個部分。
1.1 微博數據結構
(1)數據的語義不同,非結構化數據內容不一,描述不同的問題?,F在對數據的非結構化管理通常以文件形式,保留原始的非結構化數據非常重要,可以針對不同的研究需求。但這導致對不同非結構化數據使用不同處理方案,最終時間會大大增加,無法快速獲得重要信息。而且用戶一般想專注于自己的研究模塊,不希望進行文件的預處理工作。
(2)數據格式不同,各網站基于不同的框架產生大量不同格式的數據,從而形成大量不同的非結構化數據。無法使用統一的方式來管理和使用這些數據。
1.2 Hbase
HBase是一個基于分布式文件系統HDFS、面向列、開源的數據庫。Hbase數據表由主鍵、列族、時間戳三部分組成。每個表都有一個主鍵、一個或多個列簇,每個列簇可以包含任意數量的列,且一個列族中的列名不能相同。HBase有多種數據導入方式,最直接的方法是在Java程序中獲取Hbase中的HTable類執行Hbase的客戶端API,進行數據的增、刪、改、查[3]。
在Hbase的概念中,RegionServer對應于集群中的一個節點,而一個RegionServer負責管理多個Region。一個Region代表一張表的一部分數據,所以在Hbase中的一張表可能會需要很多個Region來存儲其數據,但是每個Region中的數據并不是雜亂無章的,Hbase在管理Region時會給每個Region定義一個Rowkey的范圍,落在特定范圍內的數據將交給特定的Region,從而將負載分攤到多個節點上,充分利用分布式的優點[4]。另外,Hbase會自動的調節Region處在的位置,如果一個RegionServer變得Hot(大量的請求落在這個Server管理的Region上),Hbase就會把Region移動到相對空閑的節點,依次保證集群環境被充分利用。
2 基于Hadoop的微博數據存儲管理平臺的體系結構設計
本文根據微博數據的特點,采用Hadoop技術,建立了多層結構的存儲和管理架構,如圖1所示。基于Hadoop的微博數據存儲管理平臺的體系結構主要由五個層面組成:原始數據層、數據預處理層、數據存儲層、NewSQL轉換層、數據應用層。
(1)原始數據層:該主要是采集與保存新浪、搜狐、網易和騰訊等主流微博網站的原始數據。為保證微博數據的實時性,采用實時數據獲取工具每個小時自動對微博網址進行爬取,獲取前一個小時數據。
(2)數據預處理層:該層主要功能包括兩部分工作。一是數據抽取,利用數據挖掘技術從原始數據中抽取出有效的信息,包括用戶信息、微博信息以及用戶微博之間的相互關系等;二是進行數據清洗,主要將一些采集過程中出現的錯誤數據和不一致性數據過濾。
(3)數據存儲層:該層主要是用來存儲結構化數據和元數據。因此,在該層引入了Mysql和Hbase兩個數據庫。對清洗后的微博數據進行分析設計,采用分割、建立索引等方法成功加載進Hbase和Mysql數據庫。在具體實現中,使用HBase作為原始數據庫,而Mysql作為元數據。通過Mysql中的用戶信息和微博信息,快速獲取Hbase對應的用戶屬性、用戶關系、微博屬性、微博關系。能在毫秒中提取相關信息,從而實現高效的實時查詢。
(4)NewSQL層:該層主要為Hbase的客戶端API和二級索引。NewSQL層是Hbase和Mysql的SQL引擎層,在此層實現Mysql查詢Hbase數據的映射與轉換工作。具體來講在此層實現了兩種功能:一是Mysql的數據庫的獨立查詢,查詢微博總數、用戶總數、微博內容等基本信息;二是Mysql的數據庫和Hbase的數據庫聯合查詢,通過查詢MySql中字段信息,調用Hbase的API查詢HBase數據庫,進行實時訪問。通過此層對外提供各類包括用戶屬性、微博屬性查詢,以及用戶間轉發回復評論等關系在內的查詢接口,實現數據查詢的易用性目標[5]。
3 微博關系數據的存儲表的設計與實現
Hadoop存儲和管理平臺采用了NewSQL存儲結構,它將傳統關系型數據庫Mysql和非關系型數據庫Hbase相結合,這種存儲結構不僅獲得了關系型數據庫的查詢速率快、支持復雜類查詢同時支持事務處理等優點,也獲得非關系型的優點,即極大的擴展性,可擴展到數十PB,以及建設成本低、數據安全的優點。
Mysql的設計上面采用分表存儲,每一百萬條記錄存儲到一張表中且建立索引,提升查詢速率。Hbase的設計上面采用RowKey的MD5加密且分區,使數據平均的分布在每臺RegionServer上面,防止數據傾斜到一臺RegionServer。
最后,考慮到需要快速查找用戶信息、用戶之間的關系、微博信息、微博之間的關系,從而建立關鍵字索引表、用戶屬性表、用戶關系表、微博屬性表、微博關系表。
3.1 關鍵字索引表
表1為關鍵字索引表。采用Mysql設計,存儲用戶的微博主要內容。通過關鍵字查詢用戶感興趣的內容,可以快速提取博文內容以及用戶信息。
3.2 用戶屬性表
表2為用戶屬性表。采用Hbase設計,存儲用戶的基本屬性。其中包括:1個Rowkey和2個列族,Rowkey為用戶的唯一id,兩個列族分別為用戶屬性列族、關系屬性列族。
3.3 用戶關系表
表3為用戶關系表。采用Hbase設計,存儲用戶之間關系狀態。關注關系分為兩種:單向的關注關系和雙向的好友關系。比如兩個用戶A和B之間,如果A關注B,而B沒有關注A,這就是一種單向的關注關系;如果A關注了B,同時B也關注了A,那么雙方是一種雙向的好友關系。其中包括:1個Rowkey和1個列族,Rowkey為用戶的唯一id,一個列族為用戶關系屬性列族。
3.4 微博屬性表
表4為微博屬性表。采用Hbase設計,存儲微博文章的基本信息。其中包括:1個Rowkey和2個列族,Rowkey為微博URL作為唯一id,兩個列族即微博屬性列族和關系屬性列族。
3.5 微博關系表
表5為微博關系表。采用Hbase設計,存儲用戶使用微博的發文、評論、轉發、回復信息。其中包括:1個Rowkey和1個列族,Rowkey為用戶的id,列族即微博關系屬性列族。
4 存儲管理平臺的性能測試與分析
本節將搭建Apache版本Hadoop2.6分布式集群環境,對本平臺系統性能進行實驗測試和評估,通過SQL語句驗證其實際應用中的性能。
4.1 實驗環境及軟件配置
表6為服務器集群環境及軟件配置表。用7個服務器使用Apache版本Hadoop2.6分布式集群部署,其中一臺服務器作為主節點Master,其余6臺作為平臺的數據節點Data,系統軟硬件配置見表6。
4.2 實驗數據
實驗采用的是通過爬蟲技術從新浪、網易、搜狐等主流微博獲取的真實微博數據。通過去噪清洗,將一些采集過程中出現的錯誤和不一致性數據過濾并進行結構化處理后,獲得用戶節點數6 015萬,用戶關系數13 953萬,微博節點數53 413萬,用戶微博關系數為44 012萬。
表7為數據平臺常用API查詢用時。根據需求選取6 000萬個重要人物在平臺上對項目常用的API(用戶節點查詢、用戶屬性查詢、用戶關系查詢、微博節點查詢、微博屬性查詢、微博關系查詢)進行SQL查詢用時測試。由于數據需多次測試,且在Hbase查詢中blockcache命中率對讀性能影響十分大,對此將分開啟和關閉緩存兩組進行測試。
由表7可知,在已有數據下,項目常用API的利用SQL語句查詢50%分位值用時皆在16 ms以內,99%分位值也均在20 ms以內,能夠很好地滿足平臺的實時性要求。由圖2數據可知,隨著數據規模的增大,存儲平臺的數據查詢用時并不出現顯著增長。即使在用戶節點數達到6 000萬的規模下,不開啟緩存也能保持功能查詢平均用時在14 ms以內。特別是對指定重點人物的多次查詢,在緩存命中的情況下能保持用時在8 ms以內。由于本存儲系統基于HDFS文件系統搭建,其分布式架構本身具有良好的擴展性與可靠性。故本存儲平臺能夠成功地滿足實時性、可擴展性和易用性等要求。
5 結論
本文建立了一套面向微博輿情分析的Hadoop存儲和管理系統。本系統可以安全、海量存儲微博數據,通過關系型數據庫Mysql和非關系型數據庫Hbase兩者的優點進行SQL交互,實現海量數據存儲、實時數據查詢、快速檢索響應、可橫向擴展等優點,有效解決了傳統關系型數據庫在存儲數據單一、存儲空間受限、不可橫向擴展存儲空間等缺點。
參考文獻
[1] SULLIVAN J.China′s Weibo:Is faster different?[J].New Media & Society,2014,16(1):24-37.
[2] CHANG F,DEAN J,GHEMAWAT S,et al.Bigtable:A distributed storage system for structured data[J].ACM Transactions on Computer Systems(TOCS),2008,26(2):4.
[3] 潘夢云,李國玉,李燕.基于Hadoop云計算平臺的數據處理系統的研究與設計[J].通訊世界:下半月,2015(7):224-225.
[4] 萬川梅.基于大數據下的NOSQL和Mysql融合的數據存儲模型研究[J].數字技術與應用,2014,2(2):96-96.
[5] LEE C H,ZHENG Y L.Automatic SQL-to-NoSQL schema transformation over the MySQL and HBase databases[C].IEEE International Conference on Consumer Electronicstaiwan,2015:426-427.
作者信息:
余 輝1,黃永峰2,胡 萍3
(1.中國科學院大學,北京100043;2.清華大學 電子工程系,北京100084;
3.清華大學 網絡科學與網絡空間研究院,北京100084)