為了從2億多個日常事件中收集和分析數(shù)據(jù),Evernote(印象筆記)從MySQL數(shù)據(jù)倉庫轉(zhuǎn)向了由Hadoop和ParAccel組成的混合環(huán)境。
由于數(shù)據(jù)洪流已經(jīng)威脅到了Evernote的分析系統(tǒng),為了處理這些大數(shù)據(jù),Evernote開始在不增加預算的情況,對其分析環(huán)境進行現(xiàn)代化升級。作為一家頗受歡迎的個人組織與生產(chǎn)力應用提供商,Evernote已經(jīng)開始從常規(guī)數(shù)據(jù)倉庫遷移至由Hadoop和ParAccel組成、且能夠進行大規(guī)模并行處理(MPP)分析的現(xiàn)代化數(shù)據(jù)庫。
Evernote一直在收集并分析其用戶數(shù)據(jù)。自2008年以來,已經(jīng)有3600多萬用戶創(chuàng)建了自己的 Evernote賬戶,與此同時這些賬戶生成了數(shù)百太字節(jié)的數(shù)據(jù)。這些數(shù)據(jù)包括了12億條“筆記”和20億個附件。其中的筆記以文本、網(wǎng)頁、照片、語音備忘錄等多種形式存在的,并且能夠被標記、注釋、編輯、分類,以及用其他方式進行操作。
為了確定優(yōu)化Evernote用戶體驗的方式,該公司每天通過Hadoop和ParAccel混合數(shù)據(jù)庫對2億多個事件進行分析。此外,Evernote還利用開源的JasperReports服務器社區(qū)版生成相關(guān)報告和圖表。
突破數(shù)據(jù)容量限制
Evernote最初的數(shù)據(jù)倉庫是以O(shè)LTP(聯(lián)機事務處理)關(guān)系型數(shù)據(jù)庫為基礎(chǔ)的。這些數(shù)據(jù)倉庫使用的是一個星形模型。這意味著數(shù)據(jù)是根據(jù)查詢進行安排,而不是根據(jù)處理進行安排的。通常只要MySQL中的數(shù)據(jù)容量在數(shù)太字節(jié)以內(nèi),這一解決方案都能夠很好地進行報告與分析。但是當數(shù)據(jù)超過了這一限制,只有很少一部分歷史數(shù)據(jù)能夠被保留下來,同時數(shù)據(jù)倉庫的查詢速度、靈活性與可負擔性將難以忍受。
這就是Evernote所遇到的問題。以前,Evernote的數(shù)據(jù)倉庫建立在MySQL之上,龐大的 RAID10陣列與應用的主服務器使用相同的網(wǎng)絡(luò)。在每天晚上,批處理操作每隔9至18個小時就會將多個操作數(shù)據(jù)庫表單的增加部分與應用服務器被解析的結(jié)構(gòu)化事件日志關(guān)聯(lián)起來。在手動創(chuàng)建和調(diào)整之后,再通過電子郵件的形式分發(fā)報告。
自2012年年初以來,Evernote的分析團隊意識到,他們現(xiàn)有的解決方案已經(jīng)無法應對這些負載。由于主要的表單超過了400億行,因此每次訪問幾天的數(shù)據(jù)就根本是不可能的事情。報告數(shù)據(jù)庫的速度也非常慢,并且難以維護,尤其是難以進行查詢。
因此,Evernote開始著手創(chuàng)建一個分析環(huán)境。這個環(huán)境要能有效地存儲全部的歷史數(shù)據(jù),生成十多份標準的每日報告,特別是能夠方便地管理查詢,并且在未來能持續(xù)進行擴展。與此同時,Evernote的預算并不寬裕。
Evernote最終選擇了由Hadoop和ParAccel組成的混合解決方案。目前,一個10個節(jié)點的Hadoop集群能夠存儲所有的歷史數(shù)據(jù),以及處理用于分析的數(shù)據(jù)預處理工作。預算方面,Hadoop是一個他們能夠負擔得起的解決方案,這要歸功于 Hadoop的開源許可證,及其能夠使用商業(yè)硬件進行擴展的優(yōu)勢。
作為一個MPP分析數(shù)據(jù)庫,ParAccel電子表格能夠以超高的速度進行查詢。在Evernote公司中,3個節(jié)點的ParAccel列式分析數(shù)據(jù)庫能夠處理對大量派生表的查詢。作為節(jié)點的SuperMicro服務器,每個都配備有兩個L5630四核處理器、192GB內(nèi)存、10Gbps網(wǎng)絡(luò),以及一個能夠與Red Hat Enterprise Linux進行手動配置與設(shè)置的RAID5固態(tài)硬盤。
最后,與主流開源報告的解決方案一樣,JasperReports也一個簡單易用的解決方案。為了查詢 ParAccel服務器以及生成的多種格式的日報,Evernote的團隊選擇了Jaspersoft的開源JasperReports服務器。(近期 ParAccel和JasperReports服務器混合環(huán)境也得到了亞馬遜的支持。亞馬遜正使用這兩款工具強化其Redshift托管分析環(huán)境。)
Evernote每天使用JasperReports服務器生成10多份圖表與報告
出于安全原因,這一分析環(huán)境被放在了一個獨立的網(wǎng)絡(luò)上,并不與生產(chǎn)應用服務器相連。日常在線數(shù)據(jù)通過一個單向的網(wǎng)絡(luò)連接被安全地推送到報告環(huán)境中。
部署Hadoop并協(xié)同工作
全部的原始數(shù)據(jù)首先將發(fā)送至Hadoop。在這里,數(shù)據(jù)將被歸檔并為輸入至ParAccel進行日報和分析做好準備。隨后,Evernote將使用Cloudera Hadoop進行分發(fā),并使用Puppet進行配置管理。 Hadoop集群包括有6個配置了8個500GB硬盤的數(shù)據(jù)節(jié)點,總計可以存儲24TB的原始數(shù)據(jù)。2個8核處理器和64GB內(nèi)存在跨集群中運行132個 MapReduce任務,每個任務可擁有超過2GB的內(nèi)存。
此外,作為冗余,Evernote還在兩個服務器上運行了一個單獨的Hadoop Job Tracker,在一個客戶端節(jié)點運行Hive與Hue,這是兩個針對Hadoop的關(guān)鍵開源工具。Hadoop集群可通過Hive抽象層被訪問,后者提供了一個用于查詢的類SQL接口。Hue是一個針對Hadoop的基于Web接口,其中包含了大量的實用應用,例如文件瀏覽器、工作追蹤接口、集群健康監(jiān)視器,以及一個創(chuàng)建個性化Hadoop應用的環(huán)境。
由Hive采集的用戶活動數(shù)據(jù)與來自在線生產(chǎn)數(shù)據(jù)庫的參照表每晚會被加載在ParAccel上。通過Hive所創(chuàng)建的派生表包含有針對常見報告中最佳表述的預切片信息。例如,除了某一時期以來每天、每周和每月的活動用戶數(shù)量外,國家一覽表每天每個國家只有一行。
由于ParAccel數(shù)據(jù)庫和表單會針對快速數(shù)據(jù)聚合進行調(diào)整,因此與單獨使用Hive相比,Evernote能夠進行多類問題的查詢。例如,查看某周內(nèi)在德國哪個Windows版本的Evernote軟件使用最為頻繁,只需要3秒鐘的時間。
Evernote如今擁有了一個現(xiàn)代化的分析環(huán)境,并且這個環(huán)境擁有足夠的增長空間。由于有了 Hadoop,Evernote的團隊擁有了將海量數(shù)據(jù)運營與日志數(shù)據(jù)歸檔的能力。更重要的是,它們可以在兩個小時內(nèi)加載和轉(zhuǎn)換數(shù)百萬條記錄,而以往做這些工作需要花費10個小時或是更長的時間。同時得益于ParAccel,Evernote的團隊能夠執(zhí)行更為復雜的用戶趨勢分析操作,并通過 JasperReports服務器提供最終結(jié)果。
由于能夠存儲所有的歷史數(shù)據(jù)、進行更快速的查詢,以及每日自動生成質(zhì)量報告,Evernote能夠從更深的層次觀察客戶使用其產(chǎn)品的方式,持續(xù)提升和優(yōu)化自己的產(chǎn)品。