張黎平,段淑萍,俞占倉
(甘肅機電職業(yè)技術(shù)學院,甘肅天水,741000)
Hadoop屬于一個開源、可靠穩(wěn)定、可擴展、低成本的分布式計算存儲系統(tǒng),主要通過Apache基金會開發(fā)的分布式系統(tǒng)基本架構(gòu)。Hadoop允許采用簡單的編程模型跨計算機群分布式處理大規(guī)模數(shù)據(jù)集,同時能夠為應用提供安全穩(wěn)定性和數(shù)據(jù)移動,保證共享存儲和分析系統(tǒng)的可靠性,主要功能包含文件系統(tǒng)HDFS、MapReduce軟件架構(gòu)[1]。HDFS提供高吞吐量的數(shù)據(jù)訪問,在大型數(shù)據(jù)集上具有良好的適應性,同時MapReduce在大型數(shù)據(jù)集上能夠有效并行運算,提供良好的數(shù)據(jù)分析支持;HDFS能夠有效提供存儲支持。
Hadoop提供數(shù)據(jù)概要、查詢和分析數(shù)據(jù)倉庫基本架構(gòu)的Apache Hive。Hive定義了簡單的類SQL查詢語言,簡稱HQL,支持用戶通過其查詢數(shù)據(jù),同時對Hadoo文件系統(tǒng)中儲存的數(shù)據(jù)進行直接適用,借助解釋器將HQL語句直接轉(zhuǎn)變成MapReduce作業(yè)上傳到Hadoop集群中,Hadoop能夠針對作業(yè)執(zhí)行的全流程進行監(jiān)控管理,之后向用戶反饋作業(yè)執(zhí)行結(jié)果。Hive最優(yōu)應用場合是大數(shù)據(jù)集的批處理作業(yè)。另外,Apache基于Hadoop組織開發(fā)的HBase數(shù)據(jù)查詢系統(tǒng),主要目標是處理和存儲大規(guī)模數(shù)據(jù),同時針對大規(guī)模數(shù)據(jù)提供實時的讀寫訪問,屬于一種高性能、可伸縮的分布式存儲系統(tǒng),呈現(xiàn)出較強的負載均衡管控和容錯性能。
(1)功能性需求分析
①數(shù)據(jù)采集模塊設計要保證其魯棒性,減少其需要修改的代碼,實現(xiàn)數(shù)據(jù)源、目錄、用戶名和密碼等設計成可配參數(shù),同時爬取的數(shù)據(jù)傳輸通常是利用T+1的方式,當需要傳送的數(shù)據(jù)量保持30-50G/天,記錄數(shù)在千萬到億之間,這是每天爬取的全部業(yè)務數(shù)據(jù)總和,保持業(yè)務數(shù)大約10個/天,當前總業(yè)務大約有39個,包含每天的更新和一周的更新,需要將其分配在相對應的日期進行處理。
②數(shù)據(jù)處理、存儲模塊。數(shù)據(jù)處理模塊需要完成數(shù)據(jù)清洗和加工過程,數(shù)據(jù)源從互聯(lián)網(wǎng)上搜集的數(shù)據(jù),呈現(xiàn)出參差不齊的特點,需要通過繁雜的清洗過程才能應用,保持數(shù)據(jù)處理加工效率,需要做到以下幾點:
A.高效處理億級數(shù)據(jù);
B.減少數(shù)據(jù)清洗代碼開發(fā)成本,代碼量,便于維護,具備復用性;
C.業(yè)務數(shù)據(jù)不斷增加,綜合考慮整個平臺系統(tǒng)能夠迅速添加新業(yè)務流程,具備較強的擴展性,呈現(xiàn)出較高效率。
③數(shù)據(jù)同步模塊設計過程中能夠?qū)崿F(xiàn)數(shù)據(jù)同步過程,將處理完成的數(shù)據(jù)同步到關(guān)系形數(shù)據(jù)庫中,便于對外實時提供查詢服務,呈現(xiàn)出良好的數(shù)據(jù)庫支持,支持持市場上全部主流數(shù)據(jù)庫,更加符合業(yè)務需求。
④系統(tǒng)調(diào)度模塊,主要針對以上幾個模塊整個FTL過程進行自動化,防止程序員重復工作,提高工作質(zhì)效,避免手工啟動任務出現(xiàn)問題,同時保證系統(tǒng)持續(xù)自動化運行,降低運維成本,能夠在數(shù)據(jù)處理產(chǎn)生錯誤的情況下以郵件的形式發(fā)出警報。
(2)非功能性需求分析
①適用性,基于hadoop大數(shù)據(jù)處理平臺設計過程中需要增強全處理流程的自動化,保持其全天持續(xù)自動化運行,不需要對現(xiàn)有數(shù)據(jù)流程進行管理,同時需要考慮將來業(yè)務需求增加問題,確保其能夠迅速開發(fā)部署。
②使用性能。該平臺設計進行數(shù)據(jù)ETL過程應用的時間控制在1h之內(nèi),實現(xiàn)數(shù)據(jù)迅速同步,對外提供服務。
③易用性。該平臺全流程的部署情況可以通過web界面全面展現(xiàn),明確每個流程,數(shù)據(jù)處理流程報錯的情況下能夠迅速定位錯誤點,找到錯誤原因[2]。因此,設計者在實際操作中具有合理的注釋,確保其他開發(fā)設計人員接手能夠迅速掌握項目。
(1)數(shù)據(jù)采集模塊系統(tǒng)設計。該模塊的數(shù)據(jù)源主要是爬蟲集群Master節(jié)點上的文本文件,主要設計目標將其傳送到hadoop集群上。Flume是良好的大量文件同步工具,具有可靠性、豐富采集格式、高吞吐量、松耦合性,同時支持數(shù)據(jù)直接同步到HDFS的特點,更加符合該平臺系統(tǒng)設計要求。該模塊中設計雙層Flume agent結(jié)構(gòu),首層agent能夠從爬蟲集群上的多個監(jiān)控目錄中采數(shù)據(jù)據(jù),傳送到二次agent,之后將數(shù)據(jù)傳送到HDFS上。
(2)數(shù)據(jù)處理、存儲模塊系統(tǒng)設計。該模塊具有一定的功能性和非功能性需求,系統(tǒng)設計過程中選擇hadoop大數(shù)據(jù)框架當作平臺的存儲、計算系統(tǒng);選擇Hive清洗加工數(shù)據(jù),提高大型數(shù)據(jù)集處理的有效性。關(guān)系形數(shù)據(jù)庫中的數(shù)據(jù)存儲通常利星星型、雪花模型,能夠有效降低數(shù)據(jù)冗余程度,應用兩個模型的數(shù)據(jù)庫進行查詢的過程中關(guān)聯(lián)多個表獲得相應結(jié)果[3]。該數(shù)據(jù)庫中的主鍵為關(guān)鍵件,實行關(guān)聯(lián)作業(yè)時才能優(yōu)化算法,同時能夠針對主鍵字創(chuàng)建索引,關(guān)聯(lián)操作的查詢性能影響不大。但是,Hive中沒有主鍵,索引支持較差,關(guān)聯(lián)操作大大降低查詢性能,需要設計者針對其進行數(shù)據(jù)模型創(chuàng)建盡可能地的不采用星型、雪花模型,利用一個業(yè)務數(shù)據(jù)需要的信息全部存儲在相同表中,在一定程度上產(chǎn)生數(shù)據(jù)冗余,但是能夠有效提高Hive中的查詢性能。
(3)數(shù)據(jù)同步模塊系統(tǒng)設計。該模塊的源數(shù)據(jù)是HDFS,目標是關(guān)系型數(shù)據(jù)庫Posrgre SQL,業(yè)務數(shù)據(jù)規(guī)模增大時,企業(yè)可能會采用其他數(shù)據(jù)庫,要求該模塊能夠有效支市場上主流關(guān)系型數(shù)據(jù)庫,可以選擇Sqoop當作數(shù)據(jù)同步工具,獲得較高工作效率,呈現(xiàn)出較強的適用性。
(4)系統(tǒng)調(diào)度模塊系統(tǒng)設計。該模塊需要計劃調(diào)度大數(shù)據(jù)處理流程,在出現(xiàn)錯誤時以發(fā)送郵件的方式提醒,同時有助于開發(fā)設計人員迅速定位錯誤位置,找到相關(guān)原因,采用針對性措施進行妥善處理和修復。本設計中選擇Oozie當作計劃調(diào)度工具,能夠支持多項任務調(diào)度,同時包括大數(shù)據(jù)處理平臺全部流程的技術(shù),支持失敗工作流,及時從任何節(jié)點重新運轉(zhuǎn),有助于修復工資,最大程度地降低失敗產(chǎn)生的影響。另外,設計人員結(jié)合該平臺非功能性需求,增強整個數(shù)據(jù)采集、處理和存儲等全流程的可視化,便于使用和運維,可以選擇HUE+Oozie高效完成系統(tǒng)調(diào)度工作。HUE能夠支持圖形化界面,以拖拉節(jié)點的方式創(chuàng)建Oozie工作流,同時實現(xiàn)增加、刪除和修改的功能,在實際操作中迅速找到Oozie工作流的任意節(jié)點日志,便于系統(tǒng)管理和開發(fā)設計人員的調(diào)試和運維。
(1)Apache Hadoop,是當前被廣泛運用的版本,呈現(xiàn)出代碼開源、免費應用、活躍社區(qū)、更新速度快、大量顯示文檔等優(yōu)勢,但是在實際運用過程中具有版本管理復雜混亂、集群部署和安裝、運維繁雜、生態(tài)環(huán)境復雜等缺陷。因此,hadoop第三方發(fā)行版本對其進行相應的優(yōu)化和完善,如Cloudera的CDH運用范圍較廣,效果較好,版本管理清晰,具有較強的安全穩(wěn)定性和兼容性,提供相應的集群部署、安裝和配置工具,提高工作質(zhì)效,同時便于維護。因此,該大數(shù)據(jù)處理平臺創(chuàng)建中選擇Cloudera的CDH5.9.0版本,穩(wěn)定性較強。
(2)合理配置服務器環(huán)境。該平臺創(chuàng)建過程中設計ip地址網(wǎng)關(guān)地址子網(wǎng)掩碼等,保持靜態(tài)地址,設置命令:vim/etc/sysconfig/network-scirpts/ifcfg-eml
設計主機名,命令為vim/etc/sysconfig/network
配置和修改hosts文件,配置集群中主機名和ip對應關(guān)系,命令:vim/etc/hosts配置ssh免密碼登錄,命令為cd/root/ssh ssh-keygen-trsa ssh-cppy-id mujinkeji2
配置時間同步,從主節(jié)點配置服務器端:vim/etc/ntp/conf
同時#讓190.168.100.0/24網(wǎng)段上機器能和被本機實現(xiàn)時間同步,
命令為:restrict 192.168.100.0mask255.255.255.0.nomodify notrap
安裝MySQL rpm-ivh MySQL-server-5.6.36-1.e17.x86-64.rpm
rpm-ivh MySQL-server-5.6.36-1.e17.x86-64.rpm
配置jdk 解壓安裝包:tar-xzvf jdk-8v102-linvxx64.tar.gz-C/opt。
(3)集節(jié)點電配置。當前企業(yè)提供相關(guān)服務器進行集群,正式創(chuàng)建集群之前,需要設計者明確不同節(jié)點上需要部署的全部逐漸,避免節(jié)點上組件分布不合理對集群的安全可靠性和使用性能產(chǎn)生不良影響。設計人員結(jié)合集群中多個組件的特征、性能要求,未來能否成為系統(tǒng)瓶頸,同時在集群中扮演的相關(guān)角色的關(guān)鍵程度等多個方面,科合理地配置不同節(jié)點上需要部署的相關(guān)組件,同時明確不同節(jié)點上服務器性能需求。
該平臺的數(shù)據(jù)采集模塊應用flum監(jiān)控爬蟲集群上相對應的業(yè)務數(shù)據(jù)存儲,在監(jiān)控目錄有數(shù)據(jù)的情況下能夠及時進行同步。在這個過程中需要明確采集數(shù)據(jù)的實際情況,數(shù)據(jù)存放在非Hadoop集群服務器的機器上,業(yè)務數(shù)據(jù)保持存儲在相同目錄中,數(shù)據(jù)需要傳送到HDFS目錄上。數(shù)據(jù)處理模塊主要利用Hive實現(xiàn),同時編寫Hive QL進行開發(fā),數(shù)據(jù)存儲模塊需要借助Hive實現(xiàn),將數(shù)據(jù)存放在Hive表中。
數(shù)據(jù)同步模塊主要通過Sqoop進行實現(xiàn),數(shù)據(jù)同步涉及兩個位置:數(shù)據(jù)位置,在該大數(shù)據(jù)處理平臺的原數(shù)據(jù)位置在HDFS上的一個目錄下,需要將該目錄的全部文件的數(shù)據(jù),目錄命名規(guī)則:user/spqoop/export/業(yè)務數(shù)據(jù)名稱/如虛假號碼業(yè)務目錄:user/spqoop/export/fraud-phone/目標位置,在該大數(shù)據(jù)處理平臺中的目標位置為PostreSQL數(shù)據(jù)庫中的表,表明主要是業(yè)務數(shù)據(jù)名稱,進而明確Sqoop的導入語句。
系統(tǒng)調(diào)度模塊主要是借助HUE+Oozie的組合進行實現(xiàn),其中Oozie主要負責任務的調(diào)度,同時HUE能夠有效提供圖形化界面建立流程,不需要編寫繁雜的代碼,同時便于管理和查詢目前運行的流程。采用HUE+Oozie的組合能夠迅速有效地部署新業(yè)務流程,實現(xiàn)所有業(yè)務流程的管理,隨時查詢歷史的任務執(zhí)行狀況。