科學知識圖譜繪製的大數據挖掘方法-1

新興學科科學知識圖譜繪製的大數據挖掘方法和實現 -1

金刀客算法

0. 科學知識圖譜

0.1 科學知識圖譜概念

學知識圖譜(下簡稱知識圖譜)是以科學文獻知識爲對象,以文獻計量學、信息計量學、網絡計量學、知識計量學和科學計量學的理論方法爲基礎,顯示學科或領域發展進程與結構關係的一種圖形,具備「圖」和「譜」的雙重性質與特徵,是一種複雜網絡結構圖。知識圖譜做爲一種有效的、綜合性的可視化分析方法和工具,被普遍應用並取得了較可靠的結論,被愈來愈多的學者所重視。經過知識圖譜較形象、定量、客觀、真實地顯示一個學科的結構、熱點、演化與趨勢,無疑爲學科的基礎研究提供了一種新的視角。sql

與通常計算機圖的結構相比,複雜網絡的複雜性最主要表如今節點數目龐大,一般達到幾千甚至幾萬個。所以,複雜網絡的結構比通常的計算機圖的結構要複雜得多。複雜網絡能夠用來描述人與人之間的社會關係、物種之間的捕食關係、計算機之間的網絡聯接、詞與詞之間的語義聯繫、科學家之間的合做關係、科研文章之間的引用關係,以及網頁的連接結構等等。數據庫

科學知識圖譜主要用於對研究熱點、研究前沿、研究趨勢、知識結構和科學領域結構進行探索。研究前沿是正在興起的理論趨勢和新主題的涌現,共引網絡則組成了知識基礎。在分析中能夠利用從文獻題目、摘要等部分提取的突發性術語與共引網絡的混合網絡來進行分析。apache

研究熱點能夠認爲是在某個領域中學者共同關注的一個或者多個話題,從「研究熱點」的字面理解,它具備很強的時間特徵。一個專業領域的研究熱點保持的時間可能有長有短,在分析時要加以注意。編程

關於學科領域結構的研究視角,筆者認爲最直接的方法是是使用科學領域的貢獻網絡進行分析,但這些結果是宏觀的,還能夠結合期刊的共被引聚類進行分析。小程序

目前應用領域主要集中在圖書館與檔案管理、管理科學與工程、安全科學以及教育學等領域。緩存

0.2 知識圖譜主要工具

圍繞科學知識圖譜的繪製,學者和工程師們開發了不少有用的繪製工具,如Citespcae、Bibexcel、Pajek、Ucinet、HistCite和Sci2等安全

軟件名稱 開發者 功能描述 推薦指數
CiteSpace Chaomei Chen 科學計量與可視化分析 ★★★★★
VOSViewer Van Eck, N.J 科學計量與可視化分析 ★★★★★
SCI2 Katy Borner團隊 科學計量與可視化分析 ★★★★★
SciMat M.J.Cobo,A.G 科學計量與可視化分析 ★★★★
Loet_Tools Leydesdorff 科學計量與可視化分析 ★★★★
BibExcel Olle Persson 科學計量與可視化分析 ★★★★
HistCite Eugene Garfield 科學計量與引證網絡 ★★★★
CiteNetExplore Van Eck, N.J等 引證網絡及可視化 ★★★★★
Publish or Perish Anne Wil Harzing 谷歌學術數據採集及分析 ★★★
Mapequation Daniel Edler等 網絡及演化的可視化 ★★★
Gephi 網絡可視化分析 ★★★★★
Pajek V Batagelj等 網絡可視化分析 ★★★★★
NetDraw Borgatti, S.P 網絡可視化分析 ★★★
Cyoscape 網絡可視化分析 ★★★
Ucinet Borgatti, S.P 網絡文件的統計分析 ★★★
BICOMB 崔雷等 矩陣的提取和統計 ★★★
SATI 劉啓元 矩陣的提取和統計 ★★★
Carrot2 Audilio Gonzales 輔助文本可視化 ★★★
Jigsaw John Stasko團隊 輔助文本可視化 ★★★
GPS Visualizer 輔助地理可視化 ★★★

0.3 CiteSpace

CiteSpace 是國際著名信息可視化專家、美國德雷塞爾大學(Drexel_University)信息科學與技術學院陳超美教授和團隊研發的一款用於分析和可視共現網絡的Java應用程序。CiteSpace近年來在中國普遍使用,大連理工大學等多所中國院校使用CiteSpace展開了不一樣程度的研究,並將國內的CNKI、CSSCI等數據源成功應用到了CiteSpace中。服務器

有學者認爲,根據引文半衰期的明顯不一樣,科學文獻可分爲持續高被引的經典文獻和在短暫時間內達到被引峯值的過渡文獻。研究前沿能夠被理解爲過渡文獻,知識基礎則是這些過渡文獻的引文。CiteSpace就是利用「研究前沿術語的貢獻網絡」、「知識基礎文章的同被引網絡」、「研究前沿術語引用知識基礎論文網絡」這三個網絡隨着時間演變來尋找研究熱點和趨勢,並用可視化方式展現出來。網絡

CiteSpace最初以Webof Science導出的題錄數據爲主要數據源,探討科學文獻可視化的模式和發展趨勢。使用的題錄字段主要有:Author(做者)、Title(標題)、Abstract(摘要)、Keyword(關鍵字)、Country(國家)、Institution(機構)、Reference_Cited(參考文獻)、Journal(期刊)、Category(分類)等。

CiteSpace不只適用於天然科學領域還適用於社會科學領域,但天然科學的新理論、新發現要比社會科學相對頻繁,研究內容變化幅度要比社會科學相對較大,變化趨勢較容易捕捉。

0.4 Bibexcel

Bibexcel軟件是瑞典于默奧大學(Umeå_UniversityOlle_Persson教授設計開發的一款軟件,主要用於輔助用戶分析書目數據或者格式相近的天然語言文本,生成的數據文件可導出到Excel或其餘能夠處理Tab鍵隔開數據的程序中。Bibexcel是免費軟件,包括一系列工具,這些工具一些能夠在程序窗口中看到,一些被設置在菜單中。

Bibexcel軟件與其幫助文檔都可從於默奧大學官方網站進行下載,http://www.soc.umu.se/english/research/bibexcel/。早期在Windows系統中安裝Bibexcel軟件須要將Bibexcel程序放在C:\bibexcel目錄下,但如今能夠將其放在任何磁盤和目錄下。Bibexcel還能夠在Linux系統利用「wine」命令進行運行。若是運行中須要附加文件,能夠根據提示在互聯網中進行下載。

Bibexcel利用湯森路透旗下Web_of_Science平臺中的SCISSCIA&HCI3個引文庫中的數據進行分析,也能夠轉換其餘格式的數據。利用Bibexcel能夠進行文獻計量分析(bibliometric)、書目計量分析(bibliometry)、引文分析(citation_analysis)、共引分析(co-citation)、文獻共享(shared_references)、書目耦合(bibliographic_coupling)、聚類分析(cluster_analysis)、繪製文獻圖譜(prepare_bibliometric_maps)等。

Bibexcel軟件可視化功能不夠強大,可是研究人員能夠將輸出數據應用到Pajek、Ucinet、NetDraw或者SPSS中。Bibexcel軟件只能獲得共現矩陣,能夠生成做者合做、文獻共引的共現文件,能夠將這些文件轉換成Pajek(免費軟件)可用的文件,以便利用其進行分析和可視化。Bibexcel還能夠爲Pajek生成clu-filesvec-files

0.5 Pajek

Pajek在斯洛文尼亞語中是「蜘蛛」的意思。Pajek軟件是有斯洛文尼亞盧布爾雅納大學的Vladimir Batagelj和Andrej Mrvar兩位教授共同編寫的免費軟件。
下載地址:http://mrvar.fdv.uni-lj.si/pajek/

wos2pajek(如下簡稱w2p)是pajek 的做者Vladimir_Batagelj爲了更加有效的處理wos上的記錄數據而開發出的一款小程序,用它能夠對從wos上下載的全紀錄進行預處理,生成若干直接用pajek進行分析的文件,若是沒有這款軟件,用pajek對大型引文網絡的分析將是幾乎不可能的(不排除還有其餘軟件,但我目前還不知道)。目前w2p目前最新的版本是0.8版wos2pajek8.zip,下載地址:http://vlado.fmf.uni-lj.si/pub/networks/pajek./WoS2Pajek/default.htm

費弗爾(Jurgen Pfeffer)編寫了兩個Windows應用程序,用於幫助建立Pajek網絡文件。Txt2pajek 下載地址:http://www.pfeffer.at/txt2pajek/

Pajek軟件的結構基於六大數據類型:

  • (1)Networks(網絡)Networks主要對象是結點和邊,數據文件的默認擴展名是.net。
  • (2)Partitions(分區)Partition指明瞭每一個結點分別屬於哪一個區,數據文件的默認擴展名是.clu。
  • (3)Permutations(排序)Permutations將結點從新排列,數據文件的默認擴展名是.per。
  • (4)Cluster(類)Cluster是指結點的子集,數據文件的默認擴展名是.cls。
  • (5)Hierarchy(層次)Hierarchy是指按層次關係排列的結點,數據文件的默認擴展名是.hie。
  • (6)Vectors(向量)Vectors是指每一個結點具備的數字屬性(實數),數據文件的默認擴展名是.vec。

Pajek能夠讀取多種純文本格式的網絡數據或含有未格式化文本(ASCII)的文件,Pajek2.0以上版本還支持Unicode UTF-8編碼格式的標籤,這可讓用戶用任何語言文字系統來編輯標籤。
建立Pajek數據輸入文件有多種方法,用戶能夠在Pajek軟件中手動建立,能夠利用輔助軟件建立,還能夠利用關係型數據庫建立。

Pajek軟件操做基本流程:

  • (1)在Pajek軟件中選擇Network—Create Random Network—Total No. of Arcs命令生成一個含指定數量頂點但不含連線的網絡文件,而後在字處理軟件中編輯頂點標籤和增長連線便可;
  • (2)Jurgen Pfeffer編寫了兩個Pajek輔助軟件createPajek.exe和txt2Pajek.exe,前者能夠從Microsoft Excel工做表中讀取數據,後者能夠從純文本文件中讀取數據,比前者提供了更靈活的設置和選項,運算速度也比前者快;
  • (3)Pajek官網提供了一個Microsoft Acess空白數據庫模板(network.mdb),用戶能夠構建1-Mode和2-Mode網絡所需的「表」、「查詢」、「報表」三種內容。

Pajek可處理結點數高達百萬的大型網絡,同時具備網絡分析和可視化功能,還能夠將一個大型網絡分解爲多個、能夠獨立顯示的子網絡,有助於進行進一步的精確分析;它還爲使用者提供了有效的分析算法和強大的可視化工具,提供給了一個可視化的界面,幫助用戶更加直觀地瞭解各類複雜網絡的結構。

與其餘社會網絡可視化軟件相比較,Pajek具備如下特色:

  • (1)快速有效
    一個算法的複雜度主要表現時間複雜度和存儲空間複雜度兩個方面。Pajek爲用戶提供了一整套快速有效的、分析複雜網絡的算法,用以計算和分析數以萬計結點數的大型複雜網絡。
  • (2)可視化
    Pajek爲用戶提供了一個界面友好的可視化平臺。用戶不只能夠快速繪製出一張網絡圖,還能夠根據本身的須要對網絡圖進行精細調整,從而容許用戶從視覺的角度更加直觀的分析複雜網絡特性。
  • (3)抽象化
    Pajek能夠將複雜網絡的全局結構進行抽象,將聯繫緊密的結點歸爲一類。每一個類當作一個總體,將它做爲新的結點獲得一個新的網絡圖。新的網絡圖中各個類之間經過少數幾條邊相鏈接,能夠很容易看出整個網絡的總體結構。

0.6 Ucinet

Ucinet(University_of_California_at_Irvine_NETwork)是目前流行一種功能強大的社會網絡分析軟件,它最初由加州大學歐文(Irvine)分校的社會網絡研究學者Linton_Freeman編寫,後來主要由美國波士頓大學的Steve_Borgatti和英國威斯敏斯特大學(Westminister_University)的Martin Everett 維護更新。下載地址:http://www.analytictech.com/downloaduc6.htm

該軟件集成了一維和二維數據分析工具NetDraw、三維數據分析工具Mage,同時集成了用於大型網絡分析的Pajek。利用UCINET能夠讀取文本文件、數據語言數據(DL)、初始數據(RAW)、KrackPlot、Pajek、Negopy、VNA等格式的文件,還能讀取Excel數據,但Ucinet處理的Excel數據最多隻能有255列。利用Ucinet能夠輸出數據語言數據(DL)、初始數據(RAW)、Excel數據和圖形。

Ucinet包括大量的網絡分析指標(如中心度,二方關係凝聚力測度,位置分析算法,派系的探查等),隨機二方關係模型(stochastic_dyad_models),對網絡假設進行檢驗的程序(包括QAP 矩陣相關和迴歸,定類數據和連續數據的自相關檢驗等),還包括通常的統計和多元統計分析工具,如多維量表multidimensional_scaling),對應分析(correspondence_analysis)、因子分析(factor_analysis)、聚類分析(cluster_analysis)、多元迴歸(multiple_regression)等。除此以外,UCINET 還提供大量數據管理和轉換的工具,能夠從圖論程序轉換爲矩陣代數語言。

Ucinet能夠處理32767個網絡節點,但從實際操做來看,當節點數在5000~10000之間時,一些程序的運行就會很慢。在Ucinet6.0中,所有數據都用矩陣形式存儲、展現和描述。

Ucinet提供大量的數據管理和轉換工具,如選擇子集、合併數據集、序化、轉化或者記錄數據。Ucinet不包含可視化的過程,可是它與軟件Mage、NetDraw和Pajek集成在一塊兒,從而可以實現可視化。NetDraw是簡單的繪製網絡圖的工具,它能夠讀取Ucinet系統文件、Ucinet文本文件、Pajek文本文件等。它能夠同時處理多種關係,並能夠根據結點的特性設置結點的顏色、形狀和大小,並可作數據分析,如中心性分析、子圖分析、角色分析等,也具備很強的矩陣運算能力,是一個很是靈活的可視化軟件。

Ucinet在進行任何分析以前,必須建立一個Ucinet數據集。Ucinet有三種經常使用數據結構:初始數據文件(Raw Data File)、Excel文件數據、數據語言文件(DL File):

  • (1)初始數據文件(Raw_Data_File),僅僅包含數字,不包含數據的行數、列數、標籤、標題等信息,於是只能以矩陣的形式輸入。
  • (2)Excel文件數據,能夠經過Excel數據進行編輯,但最多能支持65536行和255列。
  • (3)數據語言文件(DL_File),包含一系列數字(數據)、描述數據的不少關鍵詞和語句等,都是關於數據的基本信息。數據文件正文的內容必定要用DL代表該文件是數據文件。DL數據文件的格式還有全矩陣格式、長方形矩陣、多個矩陣、對角線缺失值矩陣、左半矩陣或者右半矩陣、塊矩陣、關聯列格式等。各個形式的矩陣都有表示矩陣類型的關鍵字和輸入模式。

1. 大數據分析和挖掘簡介

1.1 數據挖掘

大數據分析的基礎是數據挖掘。數據挖掘的基本任務包括分類與預測、聚類分析、關聯規則、時序模式、誤差檢測和智能推薦等。本過程爲:定義目標、數據採集、數據整理、構建模型、模型評價和模型發佈。數據挖掘建模過程如圖所示:

定義數據挖掘目標

針對具體的挖掘應用需求,首先明確本次挖掘目標,要達到的挖掘效果。

  • 數據抽樣

對數據進行抽樣須要注意相關性、可靠性和有效性。衡量採樣數據質量的標準包括:資料完好無損、數據準確無誤、隨機抽樣、等距抽樣、分紅抽樣、順序抽樣和分析類抽樣

  • 數據探索

數據探索分爲:數據質量分析和數據特徵分析
數據質量分析包括:缺失值分析、異常值分析、數據一致性分析
數據特徵分析包括:分佈分析、對比分析、統計量分析、週期分析、貢獻度分析和相關性分析

  • 數據預處理

數據預處理主要包括:數據清洗、數據集成、數據變換、數據規約
數據清洗主要是刪除原始數據集中的無關數據、重複數據,平滑噪聲數據,篩選數據,處理缺失和異常值等。

數據集成是將多個數據源合併放在一個一致的數據存儲(如數據倉庫)中的過程。

數據變換主要是對數據進行規範化處理,將數據轉換爲「適當的」形式,以適用於數據挖掘任務及算法的須要。經常使用的數據變換方法有:簡單函數變換、規範化、連續屬性離散化、屬性構造和小波變換等。

數據規約能夠下降無效、錯誤數據對模型的影響,提升建模的準確性;縮減數據挖掘所需時間;下降存儲數據成本。其方法主要有:屬性規約和數值規約。

  • 構建模型

通過數據探索和數據預處理,獲得能夠直接建模的數據。根據挖掘目標和數據形式能夠創建分類與預測、聚類分析、關聯規則、智能推薦等模型。
這四種模型在學科知識圖譜繪製的過程當中都有涉及。

  • 模型評價

模型評價的目的就是從創建的各類模型中找出最好的模型,並根據業務要求對模型進行解釋和應用。分類與預測模型的評測方法是:用沒有參與建模的評測數據集評價預測的準確率。模型預測效果評價一般用相對絕對偏差、平均絕對偏差、根均方差、相對平方根偏差等指標來衡量。聚類分析根據樣本數據自己將樣本分組。其目標是,組內的對象相互之間是類似的(相關的),而不一樣組的對象是不一樣的(不相關的)。組內類似性越大,組間差異越大,聚類效果越好。

  • 可視化展現

1.2 大數據挖掘

大數據指沒法在必定時間內用常規軟件工具對其內容進行處理的數據集。大數據主要特色是4V,即數據量大(Volumn)、數據類型複雜(Variety)、數據處理數據塊(Velocity)、數據真實性高(Veracity)。大數據分析是指不用隨機分析法(抽樣調查),而採用全部數據進行分析處理。(《大數據時代》)。大數據技術包括大規模並行處理數據庫、大數據挖掘、分佈式文件系統、分佈數據庫、雲計算平臺等等。

在大數據處理上,Hadoop已經成爲事實上的標準。幾乎全部的大型軟件提供商都採用Hadoop做爲其架構基礎。Spark做爲用來替代Map_Reduce的大數據內出計算框架,也是目前流行的框架。後面咱們會對這兩種技術分別做以介紹。

2 大數據處理技術

2.1 Hadoop大數據平臺

Hadoop是Apache基金會旗下的一個開源分佈式計算平臺。Hadoop以分佈式文件系統HDFSMap_Reduce爲核心,爲用戶提供系統底層細節透明的分佈式基礎架構。分佈式文件系統HDFS的高容錯性、高伸縮性等優勢容許用戶將Hadoop部署在低廉的硬件上,造成分佈式文件系統;MapReduce分佈式編程模型容許用戶在不瞭解分佈式系統底層細節的狀況下開發並行應用程序。因此用戶能夠利用Hadoop輕鬆地組織計算機資源,簡便、快速地搭建分佈式計算平臺,而且能夠充分利用集羣的計算和存儲能力,完成海量數據的處理。

Hadoop2.x版本包含如下模塊:Hadoop通用模塊,支持其餘Hadoop模塊的通用工具集;Hadoop分佈式文件系統Hadoop_HDFS,支持對應用數據高吞吐量訪問的分佈式文件系統;Hadoop_YARN,用於做業調度和集羣資源管理的框架;Hadoop_MapReduce,基於YARN的大數據平行處理系統。

Hadoop生態系統主要包括:Hive、HBase、Pig、Sqoop、Flume、Zookeeper、Mahout、Spark、Storm、Shark、Phoenix、Tez、Ambari等。下圖爲Hadoop的整個生態系統。

hadoop系統架構

  • Hive:用於Hadoop的一個數據倉庫系統,提供相似於SQL的查詢語言,經過使用該語言,能夠方便地進行數據彙總,特定查詢以及分析存放在Hadoop兼容文件系統中的大數據。
  • HBase:一種分佈的、可伸縮的、大數據存儲庫,支持隨機、實時讀寫訪問
  • Pig:分析大數據集的一個平臺,該平臺由一種表達數據分析程序的高級語言和對這些程序進行評估的基礎設施一塊兒組成。
  • Sqoop:爲高效傳輸批量數據而設計的一種工具,其用於Hadoop和結構化數據存儲數據庫如關係數據庫之間的數據傳輸。
  • Flume:一種分佈式的、可靠的、可用的服務,其用於高效蒐集、彙總、移動大量日誌數據
  • Zookeeper:一種集中服務,其用於維護配置信息,命名,提供分佈式同步,以及提供分組服務。
  • Mahout:一種基於Hadoop的機器學習和數據挖掘的分佈式計算框架算法集,實現了多種MapReduce模式的數據挖掘算法。
  • Spark:一個開源的數據分析集羣計算框架,最初由加州大學伯克利分校AMPLab實驗室開發。Spark與Hadoop同樣,用於構建大規模、低延時的數據分析應用。Spark採用Scala語言實現,使用Scala最爲應用框架。
  • Shark:即Hive on Spark, 一個專門爲Spark打造的大規模數據倉庫系統,兼容Apache Hive。無需修改現有的數據,就能夠實現相對於Hive SQL100倍的提高。Shark支持 Hive查詢語言、元存儲、序列化格式以及自定義函數、與現有Hive部署無縫集成,是一個更快、更強大的替代方案。
  • Phoenix:一個構建在HBase之上的SQL中間層,徹底使用Java編寫,提供一個客戶端可嵌入的JDBC驅動。
  • Tez:一個基於Hadoop YARN之上的DAG(有向無環圖)計算框架。它把Map/Reduce過程拆分紅若干個子過程,同時能夠把多個Map/Reduce任務組合成一個較大的DAG任務,減小MapReduce之間的文件存儲。同時合理組合其子過程,減小任務的運行時間。
  • Ambari:一個供應、管理和監視Hadoop集羣的開源框架,它提供一個直觀的操做工具和一個健壯的Hadoop API, 能夠隱藏複雜的Hadoop操做,使集羣操做大大簡化。

2.1.1 HDFS分佈式文件系統

Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件上的分佈式文件系統。它和現有的分佈式文件系統有不少共同點,但也有很明顯的區別。HDFS是一個高容錯的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,很是適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS開始是做爲Apache Nutch搜索引擎項目的基礎架構而開發的,目前HDFS是Hadoop Core的一個重要部分。

HDFS採用master/slave架構。一個HDFS集羣是由一個Name_Node和必定數量的Data_Node組成的。Name Node是中心服務器,負責管理文件系統的名字空間(name_space)以及客戶端對文件的訪問。集羣中的Data Node一本是一個節點,負責管理它所在的存儲。HDFS暴露文件系統的名字空間,用戶可以以文件的形式在上面存儲數據。從內部看,一個文件其實被分爲一個或多個數據塊,這些數據塊存儲在一組Data_Node上。Name_Node執行文件系統的名字空間操做,例如打開、關閉、重命名文件或目錄。它也負責肯定數據塊到具體Data_Node節點映射。Data_Node負責處理文件系統客戶端的讀寫請求。在Name_Node的統一調度下進行數據塊的建立、刪除和複製。HDFS架構以下圖所示:

hdfs架構

HDFS數據上傳過程以下:

    1. Client端發送一個添加文件到HDFS請求給Name_Node
    1. Name Node告訴Client端如何來分發數據塊以及分發的位置
    1. Client端把數據分爲塊(block),而後把這些塊分發到Data_Node
    1. Data_Node在Name Node的指導複製這些塊,保持冗餘

2.1.2 MapReduce工做原理

Hadoop_MapReduce是一個快速、高效、簡單用於編寫並行處理大數據程序並應用在大集羣上的編程框架。其前身Google公司MapReduce,MapReduce是Google公司的核心計算模型,它將複雜、運行於大規模集羣上的並行計算過程高度地抽象到兩個函數:Map和Reduce。適合用MapReduce來處理的數據集,須要知足一個基本要求:待處理數據能夠分解成許多小的數據集,而且每一個小數據集均可以徹底並行地進行處理。概念「Map」(映射)和「Reduce」(規約),都是從函數式編程中借用的,同時也包含從矢量編程中借來的特性。Map_Reduce極大方便了編程人員在不會分佈式並行編程的狀況下,將本身的程序運行在分佈式系統上。

一個Map_Reduce做業一般會把輸入的數據集且分爲若干獨立的數據塊,由map任務以徹底並行的方式處理它們。框架會對map的輸出先進行排序,而後把結果輸入給reduce任務。一般,做業的輸入和輸出都會被存儲在文件系統中。整個框架負責任務的調度和監控,以及從新執行已經失敗的任務。
一般,MapReduce框架的計算節點和存儲節點是運行在一組相同的節點上的,也就是說,運行MapReduce框架和運行HDFS文件系統的節點一般是一塊兒的。這種配置容許框架在那些已經存好數據節點上高效地調度任務,這可使整個集羣的網絡帶寬被很是高效的利用。

MapReduce框架包括一個主節點(Resource_Manager)、MRAppMaster(每一個任務一個)和多個子節點(Node_Manager)共同組成。應用程序至少應該指明輸入/輸出的位置(路徑),並經過實現合適的接口或抽象類提供mapreduce函數,再加上其餘做業的參數,就構成了做業配置。Hadoop的job client提交做業和配置信息給Resource_Manager,後者負責分發這些軟件和配置信息給slave、調度任務且監控它們的執行,同時提供狀態和診斷信息給job_client
雖然Hadoop框架是用Java實現,但MapReduce應用程序則不必定用Java,可使用Ruby、Python和C++來編寫。MapReduce框架流程圖如圖所示。

mapReduce

Map階段

  1. InputFormat根據輸入文件產生鍵值對,並傳送到Mapper類map函數中;
  2. Map輸出鍵值對到一個沒有排序的緩存內存中;
  3. 當緩衝內存到達給定值或map任務完成,在緩衝內存中的鍵值對就會被排序,而後輸出到磁盤中的溢出文件;
  4. 若是有多個溢出文件,那麼就會整合這些文件到一個文件,並排序;
  5. 這些排序過的、在溢出文件中的鍵值對會等待Reducer的獲取。

Reduce階段

  1. Reducer獲取Mapper的記錄,而後產生另外的鍵值對,最後輸出到HDFS中;
  2. shuffle:相同的key被傳送到同一個Reducer中
  3. 當有一個Mapper完成後,Reducer就開始獲取相關數據,全部的溢出文件會被排序到一個內存緩衝區中
  4. 當內存緩衝區滿了後,就會產生溢出文件到本地磁盤
  5. 當Reducer全部相關的數據都傳輸完成後,全部溢出文件就會被整合和排序-+
  6. Reducer中的reduce方法針對每一個key調用一次
  7. Reducer的輸出到HDFS

2.1.3 YARN工做原理

經典的Map_Reduce的最嚴重的限制主要關係到可伸縮性、資源利用和對與MapReduce不一樣的工做負載的支持。在Map_Reduce框架中,做業執行受到兩種類型的進程控制:一個稱爲Job_Tracker的主要進程,它協調在集羣上運行的全部做業,分配要在Task_Tracker上運行的map和reduce任務。另外一個就是許多Task_Tracker的下級進程,它們運行分配的任務並按期向Job_Tracker報告進出。

爲了解決該瓶頸,Yahoo工程師提出了一種新的架構YARNMPv2).YARN是下一代Hadoop計算平臺,主要包括Resource_Manager、Application_MasterNode_Manager,其中Resource_Manager用來代替集羣管理器,Application_Master代替一個專用且短暫的Job_TrackerNode_Tracker代替Task_Tracker

yarn架構

YARN最核心的思想就是將Job_Tracker兩個主要的功能分離成單獨的組件,這兩個功能是資源管理和任務監控和調度。新的資源管理器全局管理全部應用程序計算資源的分配,每一個應用的Application_Master負責響應的調度和協調。一個應用程序要麼是一個單獨的傳統的Map_Reduce任務或者是一個DAG(有向無環圖圖)任務。Resource_Manager和每一臺機器的節點管理服務器(Node_Manager)可以管理用戶再那臺機器的進程並能對計算進行組織。事實上,每一個應用的Application_Master是一個特定的框架庫,它和Resource_Manager來協調資源,和Node_Manager的協同工做以運行和監控任務。

Resource_Manager有兩個重要的組件:SchedulerApplication_Manager

  • Scheduler負責分配資源給每一個正在運行的應用,同時須要注意Scheduler是一個單一的分配資源的組件,不負責監控或者跟蹤任務狀態的任務,並且它不保證重啓失敗任務。

  • Application_Manager注意負責接受任務的提交和執行應用的第一個容器Application_Master協調,同時提供當任務失敗時重啓的服務。

客戶端提交任務到Resource_ManagerApplication_Manager,而後Scheduler在得到集羣各個節點的資源後,爲每一個應用啓動一個Application_Master,用於執行任務。每一個Application_Master啓動一個或多個Container用於實際執行任務。

2.1.4 HBase

HBase是一個分佈式的、面向列的開源數據庫,該技術來源於Fay_Chang所撰寫的Google論文「Bigtable:一個結構化數據的分佈式存儲系統」。就像Bigtable利用了Google文件系統(File_System)所提供的分佈式數據存儲同樣,HBase在Hadoop之上提供了相似於Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。

HBaseGoogle_Bigtable的開源實現,相似Google_Bigtable利用GFS做爲其文件存儲系統,HBase利用Hadoop_HDFS做爲其文件存儲系統;Google運行Map_Reduce來處理Bigtable中的海量數據,HBase一樣利用Hadoop_MapReduce來處理HBase中的海量數據;Google_Bigtable利用 Chubby做爲協同服務,HBase利用Zookeeper做爲對應。

HBase架構

上圖描述Hadoop_EcoSystem中的各層系統。其中,HBase位於結構化存儲層,Hadoop_HDFS爲HBase提供了高可靠性的底層存儲支持,Hadoop_MapReduce爲HBase提供了高性能的計算能力,Zookeeper爲HBase提供了穩定服務和failover故障恢復機制。

此外,PigHive還爲HBase提供了高層語言支持,使得在HBase上進行數據統計處理變的很是簡單。 Sqoop則爲HBase提供了方便的RDBMS數據導入功能,使得傳統數據庫數據向HBase中遷移變的很是方便。

2.1.5 Impala

ImpalaCloudera公司主導開發的新型查詢系統,它提供SQL語義,能查詢存儲在Hadoop的HDFS和HBase中的PB級大數據。已有的Hive系統雖然也提供了SQL語義,但因爲Hive底層執行使用的是MapReduce引擎,仍然是一個批處理過程,難以知足查詢的交互性。相比之下,Impala的最大特色也是最大賣點就是它的快速。Impala架構以下所示:

Impala系統架構

其優勢:

    1. Impala不須要把中間結果寫入磁盤,省掉了大量的I/O開銷。
    1. 省掉了MapReduce做業啓動的開銷。MapReduce啓動task的速度很慢(默認每一個心跳間隔是3秒鐘),Impala直接經過相應的服務進程來進行做業調度,速度快了不少。
    1. Impala徹底拋棄了Map_Reduce這個不太適合作SQL查詢的範式,而是像Dremel同樣借鑑了MPP並行數據庫的思想另起爐竈,所以可作更多的查詢優化,從而省掉沒必要要的shufflesort等開銷。
    1. 經過使用LLVM來統一編譯運行時代碼,避免了爲支持通用編譯而帶來的沒必要要開銷。
    1. C++實現,作了不少有針對性的硬件優化,例如使用SSE指令。
    1. 使用了支持Data_locality的I/O調度機制,儘量地將數據和計算分配在同一臺機器上進行,減小了網絡開銷。

2.2 Spark大數據計算引擎

Apache_Spark是專爲大規模數據處理而設計的快速通用的計算引擎。它也是本書使用的核心計算框架,幾乎全部的流程都在該框架完成。

SparkUC_Berkeley_AMP_lab(加州大學伯克利分校的AMP實驗室)所開源的類Hadoop_MapReduce的通用並行框架,Spark擁有Hadoop_MapReduce所具備的優勢;但不一樣於MapReduce的是——Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的Map_Reduce的算法。Spark主要特色是進行內存計算,但即便必須在磁盤上進行復雜計算,Spark也比Map_Reduce更加高效。

Spark適用於各類各樣的分佈式應用場景,如批處理、迭代計算、交互式查詢、流處理。經過在一個統一的框架支持這些不一樣的計算,Spark使咱們能夠簡單而低耗的把各類流程整合在一塊兒。

Spark提供豐富的藉口。Spark除提供基於Pyton、Java、Scala、R和SQL等語言的簡單易用的API還內建了豐富的函數庫,還能夠和其餘大數據工具密切配合使用。如spark能夠運行在Hadoop集羣上,本書就是用這種模式。

Spark 主要有三個特色:

  • 高級 API 剝離了對集羣自己的關注,Spark 應用開發者能夠專一於應用所要作的計算自己。
  • Spark 很快,支持交互式計算和複雜算法。
  • Spark 是一個通用引擎,可用它來完成各類各樣的運算。

Spark的基本架構以下圖所示:

spark架構

Spark能夠分爲Spark_CoreSpark_SQLSpark_StreamingSpark_GraphXSpark_MLlib和集羣管理器組成。

2.2.1 Spark Core

Spark_Core實現了Spark的基本功能,包括任務調度、內存管理、錯誤恢復和與存儲系統交互等模塊。Spark Core中還包括對彈性分佈式數據集(RDD)API定義。RDD表示分佈在多個計算節點上能夠並行操做的元素集合,是Spark主要的編程抽象。它提供了建立和操做這些集合的多個API。

2.2.2 Spark SQL

Spark_SQL是Spark用來操做結構化數據的程序包。經過它咱們可使用SQL或Hive版本的HQL來查詢數據。Spark SQL提供多種數據源,好比Hive表和JSON等。除了爲Spark提供一個SQL接口,它還支持開發者將SQL和傳統的RDD編程數據操做方式相結合,不管Scala、Pyton仍是JAVA,開發者均可以在單個應用中同事使用SQL和複雜的數據分析。

2.2.3 Spark Streaming

Spark_Streaming提供了對實時數據進行流式計算的組件,如日誌或隊列消息等。Spark_Streaming提供了用來操做數據流的API,而且與RDD_API高度對應。

2.2.4 Spark MLlib

Spark_MLlib是Spark提供的機器學習功能庫。MLlib提供了多種機器學習算法,包括分類、迴歸、聚類和協同過濾等,還提供了模型評估、數據導入等額外的功能支持。MLlib還提供了一些更底層的機器學習原語,包括一個通用的梯度降低優化算法。全部這些方法都被設計爲能夠在集羣上輕鬆伸縮的架構。

2.2.5 Spark GraphX

Spark_GraphX是用來操做圖(如社交關係圖)的程序庫,能夠進行並行的圖計算。GraphX也擴展了RDD_API,能用來建立一個頂點和邊都包括任意屬性的有向圖。GraphX還支持針對圖的各類操做,好比進行圖分割subgraph和操做全部與頂點map_Vertices,以及PageRank三角計數等。

2.2.6 集羣管理器

對於底層而言,Spark被設計成能夠高效在一個到數千個計算節點之間進行伸縮計算。爲了實現這樣的要求,同時得到最大的靈活性,Spark支持在各類集羣管理器上運行,如Hadoop_YarnApache_Mesos、以及Spark自有的簡單調度器。本書採用的就是Yarn集羣管理器,它也是目前主流的集羣管理器。

3 大數據挖掘方法

大數據挖掘基本可繼續使用數據挖掘中成熟的方法,但要在實現中體現大數據海量存儲和分佈式、並行化處理的特色。經常使用的方法是有:統計學分析、分類和迴歸分析、聚類分析、圖分析和關聯規則分析等。

3.1 大數據分析統計學方法

Spark中的mllib.stat.Statistcs類中提供了幾個經常使用的統計學函數包括:統計綜述、平均值、求和、相關矩陣、皮爾森獨立性測試。

  • Statistics.colStats(rdd) 計算由向量組成的RDD的統計性綜述,包括:每列的最小值、最大值、平均值和方差,信息十分豐富。
  • Statistics.corr(rdd, method) 計算由向量組成的RDD中的列間的相關矩陣,可使用皮爾森或斯皮爾斯曼相關中的一種
  • Statistics.corr(rdd1, rdd2, method) 計算兩個由浮點組成的RDD的相關矩陣,可使用皮爾森或斯皮爾斯曼相關中的一種
  • Statistics.chiSqTest(rdd)計算由LabeledPoint對象組成的RDD中每一個特徵與標籤的皮爾森獨立性測試結果。返回一個ChiSqTestRest對象,其中有p值、測試統計以及每一個特徵的自由度。

另外還有mean(), stdev(), sum(), sample(), sample_By_Key等統計函數

3.2 大數據分類和迴歸分析

分類與迴歸是監督學習的兩種主要形式。監督學習指算法嘗試使用有標籤的訓練數據根據對象的特徵預測結果。分類是預測分類編號(離散屬性),迴歸主要是創建連續值函數模型,預測給定自變量對應的因變量的值。經常使用的分類和迴歸算法有:迴歸分析、決策樹、隨機森林、貝葉斯網絡和支持向量機。

分類和迴歸都會使用MLlib中的labelPoint類。這個類在mllib.regression包中。一個LabelPoint其實就是一個label(label老是一個Double值,但也能夠爲分類算法設爲離散整數如二元分類中MLlib標籤爲0或1;多元分類中,MLlib預測標籤範圍從0到C-1, C爲分類數)

MLlib中包含多個分類和迴歸方法,其中經常使用的是簡單的線性方法、決策樹方法和決策森林方法。

3.2.1 線性迴歸

線性迴歸是迴歸中的一種經常使用方法,指用特徵的線性組合來預測輸出值。MLlib支持L1和L2的正則迴歸,通稱爲Lasso和ridge迴歸。

線性迴歸算法可使用的類包括:

  • mllib.regression.LinearRegressionWithSGD
  • LassoWithSGD
  • RidgeRegressionWithSGD(SGD稱爲梯度降低算法)

能夠優化的參數有

  • numIterations:迭代次數(默認:100)
  • stepSize:梯度降低的步長(默認:1.0)
  • intercept:是否給數據加上一個干擾特徵或誤差特徵(默認:false)
  • regParam:Lasso和Ridge的正則化參數(默認:1.0)

調用算法的方式在Scala中爲:

import org.apache.spark.mllib.regression.LableedPoint
import org.apache.spark.mllib.regression.LinearRegressionWithSGD
val points: RDD[LabeledPoint] =
val lr = new LinearRegressionWithSGD().setNumIterations(200).setIntercept(True)
val model = lr.run(points)
println("weight: %s, intercept: %s".format(model.weights, model.intercept))

一旦訓練完成,將返回LinearRegressionModel都會包含一個predict函數,能夠用來對單個特徵向量預測一個值。RidgeRegressionWithSGDLassoWithSGD相相似,而且會返回一個相似的模型。事實上這種經過setter方法調節算法參數,而後返回一個帶有predict方法的Model對象的模式在MLlib中十分常見。

3.2.2 邏輯迴歸

邏輯迴歸是一種二分類方法,用來尋找一個分隔陽性和陰性的線性分隔平面。在MLlib中,它接受組標籤爲0和1的LabeledPoint,返回能夠預測新點的分類的LogisticsRegressionModel對象。

邏輯迴歸算法API和線性迴歸API十分類似,卻別在於兩種用來解決邏輯迴歸的算法:SGDLBFGSLBFGS通常是最好的,這個算法經過mllib.classification.LogisticRegressionWithLBFGSmllib.classification.LogisticRegressionWithSGD類提供給用戶,接口和LinearRegressionWithSGD類似,接受的參數這徹底同樣。這個算法得出的LogisticRegressionModel能夠爲每一個點求出一個在0-1之間的得分,以後會基於一個閾值返回0或1的類別。默認閾值爲0.5。能夠經過setThreshold設置閾值,能夠經過clearThreshold清除閾值。

3.2.3 支持向量機

支持向量機是一種經常使用的分類方法,使用SVMWithSGD類參數與前面類似,返回SVMModelLogisticRegressionModel同樣使用閾值進行預測。支持向量機被認爲是最好的現成分類器,但在大數據計算中卻不多使用,由於運算量太大。

3.2.4 樸素貝葉斯

樸素貝葉斯是一種多元分類算法,它使用基於特徵的線性函數計算講一個點分到各種中的得分。MLlib中實現了多項貝葉斯算法,須要非負頻次做爲輸入特徵。使用mllib.classification.NaiveBaye類進行分類。它支持一個參數lambda用來進行平滑。可使用一個LabeledPoint組成的RDD調用樸素貝葉斯算法,對於C個分類。返回的NaiveBayesModel讓咱們可使用predict()預測對某個點最合適的分類,也能夠訪問訓練好的模型的兩個參數:各特徵與各分類的可能性矩陣theta以及表示先驗機率的C維向量pi

3.2.5 決策樹和決策森林

決策樹是一個靈活的模型,能夠用來進行分類,也能夠用來進行迴歸。決策樹以節點樹的形式表示,每一個節點基於數據的特徵做出一個二元決策,而每一個樹的葉子節點包含一個預測結果。
在MLlib中使用mllib.tree.DecisionTree類中的靜態方法trainClassifier()trainRegressor()來訓練決策樹。和其餘有些算法不一樣的是,不適用setter方法定製DecisionTree對象。可調整參數包括:

  • data :LabeledPoint組成的RDD
  • numClasses:使用類別數量
  • impurity:節點不純淨度測量分類爲gini或entrogy,迴歸爲variance
  • maxDepth:樹最大深度(默認爲5)
  • maxBins:構建各節點將數據分到多少個箱子(推薦:32)
  • categoricalFeaturesInfo:一個映射表,用來指定哪些特徵是分類的,以及每一個多少各種。
  • numTree:構建樹的數量,提升能夠下降過分擬合可能性
  • featureSubsetStrategy:每一個節點上做決定須要考慮的特徵數量,auto、all、sqrt、log2以及onethird中選擇,數字越大話費計算越大。

3.3 大數據降維

3.3.1 主成分分析

主成分分析(PCA)會將特徵映射到低維空間,讓數據在低維空間表示的方差最大化,從而忽略一些無用的維度。要計算出映射,咱們要構建出正則化的相關矩陣,並使用這個矩陣的奇異向量和奇異值。與最大部分奇異值和對應的奇異向量能夠用來重建原始數據的主要成分。使用mllib.linalg.distributed.RowMatrix類表示矩陣,而後存儲爲一個Vector組成的RDD,每行一個。下面例子投影RDD包含原始RDD中的points的二維版本,能夠用於做圖或進行其餘MLlib算法如進行聚類。

import org.apache.spark.mllib.linalg.Matrix
import org.apache.spark.mllin.linalg.distributed.RowMatrix

val points: RDD[Vector] = //….
val mat: RowMatrix = new RowMatrix(points)
val pc:Matrx = mat.computePricipalComponents(2)
//投影到低維
val projected = mat.multiply(pc).rows
//在低維進行聚類運算
val model = Kmeans.train(projected, 10)

3.3.2 奇異值分解

奇異值分解也是一種行之有效的降維方法。MLlib提供奇異值分解(SVD)方法。

SVD

對於大型矩陣,一般不須要進行徹底分解,只須要分解出靠前的奇異值與對應的奇異向量便可。這樣能夠節省存儲空間、降噪,並有利於恢復低秩矩陣。

在MLlib中調用RowMatrix類的computeSVD方法

//計算前二十個奇異值
val svd: SingularValueDecomposition[RowMatrix, Matrix] =
mat.computSVD(20, compute=true)
val U:RowMatrix = svd.U
val s: Vector = svd.s
val V: Matrix =svd.V

3.4 基於大數據挖掘的科學知識圖譜繪製系統架構

基於大數據挖掘的科學知識圖譜繪製系統架構以下圖所示:

科學知識圖片大數據挖掘系統

該系統包括期刊論文元數據抓取、數據預處理、數據存儲、大數據分析和大數據可視化等幾個模塊。後面會對幾個模塊進行詳細介紹。

相關文章
相關標籤/搜索