近期實踐及完成了一些比較針對性的大數(shù)據(jù)相關(guān)的設(shè)計和開發(fā),為了備忘晴埂,特匯總記錄如下:
1) 大數(shù)據(jù)平臺的選擇
不管使用HDP或CDH漩怎,再或者使用基礎(chǔ)的Hadoop方式的HDFS及HBase等的手工部署糊秆,但是對于一個企業(yè)級開發(fā)或規(guī)模較大的項目鹏往,最好選用穩(wěn)定及成熟的平臺套裝脚粟。
例如Ambari的HDP覆旱,再或Cloudera的CDH。
在全部開源的前提限制條件下核无,應(yīng)該盡量考慮版本的穩(wěn)定性扣唱。免費的不一定不穩(wěn)定,但是除了問題要自己Google。付費的不一定貴噪沙,關(guān)鍵是服務(wù)質(zhì)量和支持炼彪。
另外關(guān)鍵選擇因素是DevOps的涉及深度。任何大規(guī)模的大數(shù)據(jù)開發(fā)正歼,肯定不能單純到手工Shell方式添加DataNode和部署服務(wù)辐马,大量的配置文件及網(wǎng)絡(luò)設(shè)置,如沒有全面和有經(jīng)驗的專家支持下局义,將是夢魘喜爷。
可是單純追逐最新版本的部署和使用,往往也會適得其反萄唇。由于測試和使用力度的原因檩帐,最新版本在實際生產(chǎn)環(huán)境部署和使用過程中,往往會出現(xiàn)一些exception和unexpected的事情另萤。很多情況下不得已要降版本重新部署湃密。
所以考慮Ambari為依托的HDP的2.5/2.6全免費版本還是相對可行的。
2)操作系統(tǒng)的選擇
由于大數(shù)據(jù)還是要跑在以Linux為內(nèi)核的操作系統(tǒng)上四敞,所以合適合規(guī)合要求的Linux版本事關(guān)重要泛源。如生產(chǎn)發(fā)布環(huán)境使用RHEL,則盡量在設(shè)計/開發(fā)/測試環(huán)境選用CentOS對應(yīng)版本目养。從而避免不同Linux版本對于內(nèi)核及Shell和服務(wù)的定制化俩由。
之前和現(xiàn)在的一些開發(fā)毒嫡,均使用CentOS 6.5為主的操作系統(tǒng)癌蚁。其也沒有完全使用CentOS 7.x的最新版本。
因為大量組件兜畸,服務(wù)努释,以及一些特殊要求,往往對于最新版本的操作系統(tǒng)缺乏測試和相應(yīng)支持咬摇,同時部分需要Python的特定版本伐蒂。
3)實體機/虛擬化/容器化
我現(xiàn)在依然認為低配或適配的實體機是最好的方式,但是經(jīng)過實踐和之前1/2年一些同事的反饋肛鹏,可考慮以VM為主的虛擬化技術(shù)也是比較成熟的逸邦。
然后雖然容器化Docker成熟并火熱到一定程度,個人認為還不適合全部容器化方式部署Hadoop的全套環(huán)境和支持日常開發(fā)在扰。
雖然已經(jīng)整理并全部安裝調(diào)試成功全Docker容器化的Hadoop平臺缕减,并有全套的安裝部署腳本,但是其中的安裝困難確實很大芒珠。緊緊是Bridged Network和Port桥狡,以及FQDN的配置,就很繁瑣了。而且由于選擇的大數(shù)據(jù)平臺的支持框架不同裹芝,大量的“坑”就不一一羅列了部逮。
4)數(shù)據(jù)流
在給建好的大數(shù)據(jù)平臺注入血液(數(shù)據(jù))的時候,Apache的Nifi還是比較靈活和方便的可視化工具嫂易。同時如果有一定Python和Java開發(fā)能力兄朋,可以很好的通過開源模式,編寫自定義的Processor怜械,高效處理更多的更精準的個性化數(shù)據(jù)處理流程蜈漓。
但是其對于內(nèi)存和日志的管理,需要針對性的調(diào)優(yōu)宫盔,否則單獨Queue的Bucket的阻塞融虽,無條理的日志輸出,是非常危險的灼芭。
我之前和現(xiàn)在的一些場景有额,Nifi都是通過Docker容器化的方式部署和使用。同時自行開發(fā)客制化的Processor和Python腳本提高處理和維護的高效彼绷。
5)數(shù)據(jù)清理
即使有好的數(shù)據(jù)可視化處理的Nifi數(shù)據(jù)流工具巍佑,乃至Kettle等傳統(tǒng)SQL的數(shù)據(jù)ETL。但是大量的數(shù)據(jù)寄悯,尤其是非結(jié)構(gòu)化的數(shù)據(jù)文件萤衰,例如Excel/CSV等,必須需要預(yù)先處理猜旬,清洗脆栋,規(guī)整等操作后再進入大數(shù)據(jù)平臺,或者數(shù)據(jù)流處理平臺洒擦。否則一些數(shù)據(jù)精度椿争,空值等等數(shù)據(jù)項的問題,將造成數(shù)據(jù)處理的異常和錯誤熟嫩,同時很難在數(shù)萬數(shù)億的原始數(shù)據(jù)中排查和修正秦踪。
因為絕大部分這些數(shù)據(jù)都是來自手工和半手工的非結(jié)構(gòu)化或半機構(gòu)化的源頭,并且即使很規(guī)整的數(shù)據(jù)掸茅,總有異常情況椅邓。
所以個人認為原始數(shù)據(jù)的清理和Preprocess事關(guān)重要。
例如使用Spring Batch進行數(shù)據(jù)的預(yù)處理昧狮,充分使用其對于Tokenizer等配置化定義景馁,集合自動化作業(yè)工具(譬如專業(yè)的UC4,或簡單的Jenkins)陵且,同時相應(yīng)的一些代碼支持裁僧,構(gòu)建一個文件預(yù)處理的小平臺个束。
將預(yù)處理的原始數(shù)據(jù),進入到Stage數(shù)據(jù)庫(關(guān)系型)聊疲,后續(xù)讓Nifi等數(shù)據(jù)流工具介入茬底。
6)數(shù)據(jù)關(guān)聯(lián)
處理完畢的數(shù)據(jù)必然進入大數(shù)據(jù)平臺,譬如HBase获洲,或ElasticSearch/Solr等阱表,合理的規(guī)劃數(shù)據(jù)存儲邏輯將對于后續(xù)的數(shù)據(jù)使用和應(yīng)用需求起到很重要的作用。
譬如HBase的Row Key的定義贡珊,尤其是關(guān)聯(lián)數(shù)據(jù)的Row Key模式最爬。盡量通過合理的設(shè)計Row Key,提高未來查詢時通過RowPrefixFilter進行HashTable的主鍵過濾门岔,提高查詢速度和命中率爱致。
另外關(guān)聯(lián)數(shù)據(jù)集合/Table間,對于Column Family的定義必須有清洗的數(shù)據(jù)字典和依存關(guān)系寒随,方便對于Column較多的大數(shù)據(jù)集合進行維護糠悯。
7)直接數(shù)據(jù)服務(wù)暴露
特殊情況可以適當開發(fā)一些基于HBase Thrift和HappyBase的數(shù)據(jù)訪問API,乃至通過Flask等暴露成API妻往。是集團型企業(yè)應(yīng)用的一個微服務(wù)的概念和實現(xiàn)互艾。
8)編程開發(fā)
一般可采用Aanconda或Jupyter Notebook等支持的文檔編輯及開發(fā)和管理工具平臺或工具集,這樣將會減少日后開發(fā)平臺和開發(fā)包維護的力度讯泣。同時某些場景可以被復(fù)用管理工具纫普。
但是單純編程,開始要考慮一些專門的Python的開發(fā)工具好渠。
譬如我現(xiàn)在使用的是Eclipse和PyDev昨稼。
另外一定要維護好PIP的安裝包信息。由于大量開源package的存在晦墙,和Python版本的變化悦昵,需要認真將第三方Package的安裝和部署與Python的開發(fā)及上線環(huán)境記錄好。
9)應(yīng)用隔離
通過Docker的容器化方式晌畅,將大數(shù)據(jù)平臺上及開發(fā)平臺的應(yīng)用工具單一隔離部署,是個很好的習(xí)慣和能夠提升DevOps能力的關(guān)鍵寡痰。
譬如即使使用Ambari部署HDP抗楔,其管理配置節(jié)點,可以統(tǒng)一考慮使用MySQL的Docker容器拦坠,將Ambari/Hive等關(guān)鍵服務(wù)的配置全部集中到MySQL的Container上连躏。
或者其它相關(guān)開發(fā)工具。
但是不推薦將直接作用于大數(shù)據(jù)平臺的應(yīng)用容器化部署贞滨。譬如Hue入热,因為這樣至少HDFS將無法remote訪問DataNode上的HDFS等服務(wù)拍棕。
10)端口
大數(shù)據(jù)平臺和應(yīng)用將有大量的軟硬件及應(yīng)用部署,所以大量的端口需要明確記錄勺良。尤其是某些使用容器化方式部署的應(yīng)用绰播,對于容器與宿主機,和外網(wǎng)的端口映射更要規(guī)劃和記錄好尚困。
最好有一個很清晰的端口/FQDN/網(wǎng)絡(luò)等相關(guān)資源的excel表格記錄蠢箩。
11)FQDN/IP ADDR
大數(shù)據(jù)平臺不一定需要標準的FQDN,譬如TNT-ITS.COM事甜,但是命名還是需要的谬泌,因為這樣會大大減少部署和配置過程中的難度。
另外一點是最好全部采用固定IP地址方式逻谦,甚至容器化的Bridged Network都要固定IP地址掌实。
12)Python
最近使用較多的就是Python下面,Excel/Oracle/Mongo/Redis/Flask RESTful API/Flask Caching/HappyBase等Package邦马。
同時使用Flask為主的uWSGI和Nginx承載HBase上的Direct Data Service API潮峦。
13)IaaS/PaaS
如果條件,尤其是經(jīng)費足夠勇婴,可以考慮以Amazon的AWS為主要資源的云化客制化部署方式忱嘹,不簡單使用其EC2單獨作為VM方式部署,更關(guān)鍵使用其EC2 Container Service耕渴。
但是由于現(xiàn)在資源有限拘悦,AliYun和AWS上的配置手冊和Demo環(huán)境還沒有完全配通。
14)Hue
為了更方便日常運維大數(shù)據(jù)平臺橱脸,Ambari只提供了Dashboard和Service Controller础米,但是對于文件和數(shù)據(jù)運維,管理添诉,及使用屁桑,還是最好有圖形化的工具。HBase Shell還是太原始栏赴。所以Hue是個比較好的選擇蘑斧。但是其部署和大數(shù)據(jù)平臺的集成,需要很多精力须眷。
15)大數(shù)據(jù)/人工智能/深度學(xué)習(xí)
近期期望將在大數(shù)據(jù)的基礎(chǔ)上竖瘾,把特定領(lǐng)域的人工智能(預(yù)測)部分實現(xiàn)幾個微應(yīng)用和成果,設(shè)計圖和AI元素都已經(jīng)規(guī)劃花颗,但是數(shù)據(jù)和模型還未就位捕传,稍后再羅列。
如下附圖(大數(shù)據(jù)的邏輯部署圖)