不少新興大資料技術接連竄起,3、5年前被視為企業頭號救星的Hadoop,也已經形成更完整的生態系,不再是當年只能做批次資料分析的技術而已,趨勢科技是國內最早採用Hadoop技術的企業之一,其資深軟體工程師葉祐欣在Big Data Conference 2015大會上,分享了趨勢大資料平臺架構(Big Data Stack)與建置經驗,並揭露趨勢為了自行建置Hadoop平臺所用的自動化更新和部署工具Bigtop。
葉祐欣是Apache Bigtop專案的貢獻者與專案管理者(PMC),有Hadoop、HBase、Spark、Kafka、Pig、Spark、Fluentd、Akka及Docker等相關技術與系統的建置經驗。他在趨勢負責建立整個基於Hadoop生態系統的大資料服務產品組合,打造內部的Hadoop版本,並開發一套可部署並管理跨數百臺伺服器的Hadoop叢集系統。
他也曾開發基於Apache HBase的搜尋系統,能在數秒內搜尋數十億的網路流量的紀錄,協助公司資安團隊快速追蹤資安事件。他進一步揭露整個趨勢大資料Stack架構。
趨勢大資料架構大公開
趨勢的自建Hadoop版本稱為Trend Micro Hadoop(TMH),目前這整個大資料堆疊架構(Big Data Stack),由下而上分為部署層、資源管理層、儲存層、運算處理引擎、API介面層,以及最上層由內部開發的應用系統(In-house Apps)。
葉祐欣表示,部署層有兩套自行開發的系統,分別為開發用的Hadoocker和上線用的Hadooppet,並使用YARN做資源管理,儲存與運算處理引擎仍使用Hadoop HDFS及MapReduce,葉祐欣表示,這是因為趨勢的大資料平臺很早期就開始建置,因此還有很多程式碼要支援。
趨勢在API介面層採用Pig套件,並在Pig系統上,自行開發一個能讓應用程式更容易與Pig平臺串接的查詢機制(Ad-hoc Query)和UDF,葉祐欣說,趨勢有自己的檔案格式,因此要讓使用者可以輕易的存取檔案。
另一方面,趨勢採用Oozie做工作管理,並開發Wuji讓使用者更方便使用。並以HBase做即時資料處理,此外,也有些API用Solr Cloud來搜尋,Solr叢集可監控每個系統產生的Log資料,來監看各個Stack上的系統運作紀錄。葉祐欣也強調,他們一直採用Kerberos來強化資安。
其中,上線用的Hadooppet是將Hadoop結合Puppet,目的是支援大資料平臺開發的部署與管理,可以自動化建置環境,配置HDFS、YARN、HA架構,也能自動化配置用於身分驗證的Kerberos,以及統一管理客戶端的使用與操作的LDAP。
此外,Hadooppet也能自動化配置跨領域身分驗證的Kerberos,讓多叢集之間可以使用分散式複製工具Distcp(Distributed Copy)來進行資料的複製與轉移,他解釋,因為每個叢集都有Kerberos,要做Distcp要先讓兩個叢集之間建立一些信任設定。
另一個趨勢在大資料平臺上的重要開發輔助工具是Hadoocker,可用來協助Hadoop App開發者快速開發和測試應用程式,包含大資料的預載映像檔(Big Data Stack Preload Image),把Hadoop環境打包成一個現成的映像檔,用Vagrant開啟Docker容器,只要開啟後就是可以使用的Hadoop環境,讓開發者不用每次都重新花時間為了建置Hadoop環境做設定,可以更專注在自己的應用開發上。
此外,Hadoocker也支援版本升級,能針對新版本先做功能測試,不需做效能測試。
Hadoocker也將需要用到的服務預先打包成映像檔,包括主要的Hadoop Server、Hadoop client和data容器,使用者可以直接開啟一個Hadoop伺服器端環境,用Hadoop客戶端服務來部署自己的App。
另一個好處是,由於服務開發通常有服務本身與環境的依賴性問題,要與環境整合很麻煩,這個Stack可以在本地環境中開啟,拿測試好的服務來用,開發者只需要改自己的應用程式就好,不需要顧慮環境問題或是受阻擋。讓開發者可以在環境中做想做的事情。其他包括Dependency service、Solr等服務也都打包成Docker映像檔。
趨勢的大資料堆疊架構,在部署層為兩套自行開發的系統,分別為開發用的Hadoocker和上線用的Hadooppet,並使用YARN做資源管理,儲存與運算處理引擎仍使用Hadoop HDFS及MapReduce,API介面層採用Pig套件及自行開發一個容易與Pig平臺串接的查詢機制(Ad-hoc Query)和UDF,另外也用Oozie做工作管理,開發讓使用者更方便使用的Wuji。此外,還採用HBase做即時資料處理,也有些API用Solr Cloud來搜尋,並整合Kerberos來強化資安。(圖片來源/趨勢科技)
自建大資料平臺的關鍵:Bigtop自動化部署工具
為了自行建置整個大資料平臺,趨勢採用自動化部署和建置的工具Bigtop。葉祐欣表示,Bigtop能協助將程式碼打包封裝、自動化建置、部署Hadoop環境並進行測試與管理,可解決各框架之間的版本相容問題。透過Bigtop工具更容易建構出一個能涵蓋Hadoop生態圈各類應用套件的大資料分析平臺。
他進一步解釋Bigtop的作用,就如Linux有Ubuntu、Debian、openSUSE、CentOS、Fedora這些發行版本,現在的Hadoop也有Hortonworks、Cloudera、Pivotal、MapR所提供的發行版本,雖然這些版本完全開源,不過企業若要採用,想要自行更新修補程式並非是一件容易的事。
再加上在Hadoop Ecosystem中,又包含了Hadoop、Spark、HBase、Tez、Solr、Hive、Pig、Oozie等多種功能套件,不同套件的更新維護,也造成了非常複雜的版本相容問題。所以,趨勢科技採用了Apache Bigtop這項專案,來協助開發者更容易隨時依自己需求加上修補程式碼或進行更新。
Bigtop用於提供Hadoop的自動化建置流程,並能做到一鍵部署Hadoop叢集環境,Bigtop透過Packaging機制,能自動將Hadoop生態圈中各類套件的修補程式碼,打包封裝成正式環境所需的RPM或DEM安裝檔。
Bigtop還內建了一個自動化測試框架,能自動進行上線前的煙霧測試(Smoke Tests)以及整合性測試(Integration Tests),解決套件更新時的版本相容問題,並確保這些修補程式碼及安裝檔都能順利運行在實際環境中。
進行整合測試之前,Bigtop會透過Provisioner功能來自動建立基礎架構和設定,如自動呼叫Vagrant來建立Virtualbox虛擬機環境,或在Docker Container上安裝Puppet,再用Puppet來管理和部署出一套分散式Hadoop叢集,完成環境建置與部署之後,就能在這些Hadoop叢集環境上進行各種測試。
葉祐欣說,只要下一個指令就可以自動開啟一個測試用的容器。
由於各種作業系統及各元件的不同版本,要準備環境是一件非常複雜的事情,Bigtop也提供了一整套工具鏈,以及Puppet菜單,來協助開發者能自動下載所有需要的函式庫及建置工具。
目前Bigtop支援各種Linux作業系統版本如Ubuntu、Debian、openSUSE、CentOS、Fedora、Redhat,也支援Hadoop生態圈裡的各個套件,包括Hadoop、Spark、HBase、Tez、Solr、Hive、Pig、Oozie等。
葉祐欣表示,使用Bigtop的好處是可以簡單且快速的建置自己的Hadoop版本,並在任何時間加上任何想要的修補程式,選擇想要的元件版本來建置大資料平臺。
外部廠商如Hortonworks、Cloudera,儘管可以提供好的技術與服務支援,不過葉祐欣認為,這樣一來也容易綁定於特定的Hadoop版本,而無法依需求完全自製。
他建議,企業若想靠Bigtop自建Hadoop版本,最好是建立一個Hadoop團隊,有能力自行除錯,也還要具備自行開發修補程式的能力。
趨勢的內部Hadoop版本TMH,就完全使用Bigtop來部署而不需藉助外部廠商支援。葉祐欣說,趨勢依據建置TMH 7遇到的需求,開發了許多Bigtop的新功能,如Provisioner、Puppet菜單、CI基礎架構工具等。
透過Bigtop Provisioner的自動化功能,可進行Bigtop的煙霧測試和整合測試,確保這樣的Stack可行,此外,也不用自己每天重複開叢集、準備資源。
特定任務平臺採用SDACK 5大技術,以Lambda架構將資料分流處理
除TMH之外,趨勢也另外開發一套用來解決特定問題的特定用途大資料分析平臺,來進行如即時的資料串流,在資料傳遞過程同時參照外部資料的,串流資料進來時做風險與惡意活動的偵測,基於串流資料,也做串流資料與歷史資料的關聯性,像是一、兩個小時前的歷史資料,可支援指定任何起始與結束時間,來做該特定時段的批次偵測,最後也支援調查作業(Investigation)可以降到最原始的紀錄層級(Raw log level)。
這個特定任務平臺使用了Fluentd、Kafka、Akka、Cassandra這幾個熱門的大資料套件。先由紀錄檔或串流資料蒐集程式Fluentd來接收資料,並將資料存放在分散式訊息系統Kafka,再用Akka來轉換記錄檔、參照外部資料,分為兩個資料流,把轉換好的紀錄檔同時存到Cassandra及Kafka。
葉祐欣表示,這麼做其實是用同一個叢集開啟不同的Topic,其中Kafka可支援Spark的串流分析,另一邊Cassandra則做批次分析,採用像是Lambda的架構。
他也進一步說明這幾個大資料套件的特色,其中,Kafka是一套分散式訊息系統,可以輕易擴充,特色是能支援多個Consumer。
此外Kafka可以配置每個Partition需要備份的個數,並備份到多臺機器上每個分區都會進行備份,即使單一節點壞掉也可以確保訊息不遺失,也可以設定多個Consumer Group針對同一主題,確保服務不會產生重複訊息。
而Cassandra則是NoSQL分散式資料庫,採用Key-Value資料儲存架構,在Cassandra叢集架構中,每一臺伺服器節點對等獨立,彼此沒有主從關係,且具有複寫機制,因此也沒有單點失效問題(Single Point of Failure,SPOF),不會因為單一臺主機掛掉導致資料庫無法運作。
此外,Cassandra具有非常快的寫入效能,只要算一個分區的Key放到對的節點上就做完了,適合串流資料的處理。
葉祐欣表示,目前Spark Cassandra連結器的發展不錯,可用來整合Cassandra跟Spark,在Spark裡讀寫Cassandra的資料,同時Cassandra的Data Connector也可串流讀取Cassandra的資料。
另外,Akka是一個高效能、併發資料處理的框架,支援Java和Scala,以Actor模式進行訊息驅動的資料處理。每個Actor可以用訊息傳遞的方式來互相傳資料做溝通,都是非同步進行。
在Actor模式中,每個Actor是單一執行緒(Single Thread),Actor裡面存的訊息只供自己更新,不會有多執行緒問題。
Akka也具有容錯能力和自動修復系統,並有階層關係,Actor下面可以有多個Actor,並由上面的Actor監管。此外,還提供了叢集功能,可用多個節點來組成叢集,讓應用程式可以分散在不同的節點上。
葉祐欣將這整個架構稱為SDACK,結合Spark來處理串流與批次資料分析,而然後用Docker做資源管理,葉祐欣表示,因為在特定任務平臺上只有一個App,只要把自己的資源管理好,不需要用到多重管理工具如YARN或Mesos,Akka用來做細緻的資料處理流程,Cassandra用來做批次查詢,Kafka則提供可用的緩衝區。
SMACK大資料架構夯,Bigtop即將釋出新版本
他也說,不同企業採用的技術不同,趨勢現在也正在發展階段,他建議企業可以選擇採用SMACK Stack中的5大資料元件來因應多種不同的資料處理情境,包括Spark、Mesos、Akka、Cassandra及Kafka。
葉祐欣認為,大資料未來發展,很多新興大資料解決方案都專注在記憶體式運算(In Memory)和Fast Data,如Spark,或是更晚出現的Flink、Iginte、Geode等新興套件。
他也預告,Bigtop 1.1版預計在2016年1月釋出,將可支援Hadoop 2.7.1版、有Back-pressure功能的Spark 1.5.1版、支援Spark action的Oozie 4.2。