王敏
摘?要:當(dāng)前,傳統(tǒng)的數(shù)據(jù)庫技術(shù)及單純基于Hadoop的分布式計(jì)算方法已無法滿足離線數(shù)據(jù)和業(yè)務(wù)量的快速增長需求,運(yùn)行成本大、工作效率低、用戶體驗(yàn)差。文章提出基于TDH+Hive的離線計(jì)算平臺,采用TDH作為離線數(shù)據(jù)存儲平臺,并通過Azkaban任務(wù)調(diào)度工具在Hive中對數(shù)據(jù)進(jìn)行相應(yīng)的ETL轉(zhuǎn)換,根據(jù)不同作業(yè)對實(shí)時(shí)性要求的差異,將運(yùn)行時(shí)間分散到不同時(shí)間段,實(shí)現(xiàn)系統(tǒng)性能的平衡,提升離線大數(shù)據(jù)的處理效率,同時(shí)能夠精簡數(shù)據(jù)、節(jié)省存儲空間,降低后續(xù)的開發(fā)成本,提升開發(fā)效率。
關(guān)鍵詞:離線數(shù)據(jù);TDH;Hive;Azkaban
中圖分類號:TP392
1?緒論
自20世紀(jì)90年代“大數(shù)據(jù)”的概念被提出以來,其重要性備受關(guān)注,“人類的大數(shù)據(jù)時(shí)代已經(jīng)到來”更是在2012年麥肯錫咨詢公司的研究報(bào)告中被強(qiáng)調(diào)?!按髷?shù)據(jù)”是需要新處理模式才能具有更強(qiáng)的決策力、洞察發(fā)現(xiàn)力和流程優(yōu)化能力來適應(yīng)海量、高增長率和多樣化的信息資產(chǎn)[1]。由此可見,運(yùn)用新技術(shù)手段對大數(shù)據(jù)進(jìn)行專業(yè)的“加工”和“處理”才能激發(fā)其內(nèi)在價(jià)值,實(shí)現(xiàn)數(shù)據(jù)的“增值”。
本文基于TDH+Hive構(gòu)建大數(shù)據(jù)的離線計(jì)算平臺,采用TDH作為離線數(shù)據(jù)存儲平臺,并通過Azkaban任務(wù)調(diào)度工具在Hive中對數(shù)據(jù)進(jìn)行相應(yīng)的ETL轉(zhuǎn)換。相對于傳統(tǒng)的單純基于Hadoop的分布式計(jì)算方法運(yùn)行成本大、工作效率低、用戶體驗(yàn)差等問題,本文構(gòu)建的離線大數(shù)據(jù)計(jì)算平臺,能夠在兼容各類數(shù)據(jù)源的前提下,大大提高數(shù)據(jù)的處理能力,同時(shí)可以通過對數(shù)據(jù)的精簡來達(dá)到節(jié)省存儲空間的目的,進(jìn)而降低后續(xù)的開發(fā)成本,提升開發(fā)效率。
2?TDH、Hive、Azkaban概述
2.1?TDH大數(shù)據(jù)平臺
TDH是國內(nèi)外較為領(lǐng)先的一款大數(shù)據(jù)基礎(chǔ)軟件,也是目前國內(nèi)應(yīng)用最為廣泛的一站式Hadoop發(fā)行版,性能較開源Hadoop2有很大優(yōu)勢,已應(yīng)用在各行各業(yè)。TDH整合高度容錯(cuò)、高效索引、內(nèi)存計(jì)算、執(zhí)行優(yōu)化等技術(shù)來高效率、低成本的實(shí)現(xiàn)平臺處理10GB至100PB的海量數(shù)據(jù)。同時(shí),它引入不停機(jī)擴(kuò)容機(jī)制來滿足客戶動(dòng)態(tài)數(shù)據(jù)的變動(dòng)需求,以此來解決MPP或混合架構(gòu)數(shù)據(jù)遷移的問題。
TDH主要在HDFS和YARN之上對Hadoop進(jìn)行了改進(jìn),它提供了高速的Erasure?Code編碼方式,適合nearline?storage類應(yīng)用,降低一半磁盤容量需求的同時(shí)提高了一倍的容錯(cuò)性能。它的這個(gè)功能主要為擁有PB級別的客戶所應(yīng)用,比如電信行業(yè)的話單數(shù)據(jù)、交通/電力行業(yè)的傳感器數(shù)據(jù)、金融行業(yè)的歷史交易數(shù)據(jù)等。在YARN上進(jìn)行改進(jìn)的目的主要是為了能更全面的管理CPU/內(nèi)存等資源,并有效地支持Spark和Map/Reduce應(yīng)用集群。它的技術(shù)優(yōu)勢主要表現(xiàn)在以下3個(gè)方面:極致的性能與可擴(kuò)展性;簡易的操作和管理;完整的SQL和ACID支持。
2.2?Hive數(shù)據(jù)倉庫
Hive是建立在Hadoop上的數(shù)據(jù)倉庫基礎(chǔ)構(gòu)架。在Hive中,定義了一種類似于SQL的查詢語言HQL,用戶只要熟悉SQL語句就可以進(jìn)行查詢數(shù)據(jù)操作,也可以不需要開發(fā)專門的MapReduce應(yīng)用來進(jìn)行不太復(fù)雜的MapReduce統(tǒng)計(jì),這就可以非常便利的用于數(shù)據(jù)倉庫的統(tǒng)計(jì)分析,因此它具有學(xué)習(xí)成本低的優(yōu)勢。除此之外,對于熟練應(yīng)用MapReduce的用戶可以在Hive中方便的開發(fā)出自定義的Mapper和Reducer來應(yīng)對復(fù)雜的操作。同時(shí),它為數(shù)據(jù)抽取、轉(zhuǎn)換、加載(ETL)提供了一系列的工具,實(shí)現(xiàn)了存儲、查詢和分析存儲在Hadoop中海量數(shù)據(jù)的功能。
在Hive中,Hadoop、Mapreduce是架構(gòu)的基礎(chǔ),它主要由服務(wù)端組件以及客戶端組件兩個(gè)類構(gòu)成,涉及的組件有:CLI、JDBC/ODBC、Thrift?Server、WEB?GUI、metastore和Driver。下面就對兩大類組件進(jìn)行簡單介紹。服務(wù)端組件中的Metastore作為元數(shù)據(jù)服務(wù)組件提供存儲Hive元數(shù)據(jù)的服務(wù);為了使不同類型的編程語言能夠進(jìn)行Hive接口的調(diào)用,在服務(wù)端組件中使用Thrift服務(wù)來實(shí)現(xiàn)可擴(kuò)展而且跨語言的開發(fā);Complier、Optimizer和Executor組成了服務(wù)端組件中的Driver組件,目的是能夠?qū)QL語句進(jìn)行解析、編譯優(yōu)化以后生成相應(yīng)的執(zhí)行計(jì)劃,再通過調(diào)用底層的mapreduce來計(jì)算框架。在另一類的客戶端組件中:CLI為命令行接口;諸如JDBC、ODBC等許多客戶端接口在Hive的架構(gòu)中是被設(shè)計(jì)在thrift客戶端之上的;在Hive客戶端中,啟動(dòng)Hive?Web?Interface(HWI)組件后,用戶便可以使用網(wǎng)頁方式來進(jìn)行訪問服務(wù)。
2.3?Azkaban任務(wù)調(diào)度工具
Azkaban是一套簡單的任務(wù)調(diào)度服務(wù),其功能是在某一個(gè)工作流內(nèi)按照規(guī)定好的流程或順序來執(zhí)行一組工作,它是由Linkedin開源的一個(gè)批量工作流任務(wù)調(diào)度器,整體包括三部分Webserver、Dbserver、Executorserver,是Linkin的開源項(xiàng)目,開發(fā)語言為Java。它定義了一種KV文件格式來設(shè)立了各個(gè)任務(wù)之間的耦合、依存關(guān)系,同時(shí),它還提供了一種便于web用戶界面維護(hù)和跟蹤的工作流服務(wù)功能。
Azkaban是一個(gè)相似于Oozie的工作流控制引擎,在這種架構(gòu)中,它可以用來應(yīng)對多個(gè)Hadoop離線計(jì)算任務(wù)之間的耦合、依存關(guān)系問題,用它來替代Crontab對周期性的任務(wù)進(jìn)行調(diào)度也具有易操作性,擁有美觀的可視化管理界面的同時(shí)更加直觀,可靠性更強(qiáng)。
3?基于TDH+Hive的離線計(jì)算平臺的設(shè)計(jì)與實(shí)現(xiàn)