① 大數據包括哪些
大數據技術龐大復雜,基礎的技術包含數據的採集、數據預處理、分布式存儲、NoSQL資料庫、數據倉庫、機器學習、並行計算、可視化等各種技術范疇和不同的技術層面。
大數據主要技術組件:Hadoop、HBase、kafka、Hive、MongoDB、Redis、Spark 、Storm、Flink等。
大數據技術包括數據採集,數據管理,數據分析,數據可視化,數據安全等內容。數據的採集包括感測器採集,系統日誌採集以及網路爬蟲等。數據管理包括傳統的資料庫技術,nosql技術,以及對於針對大規模數據的大數據平台,例如hadoop,spark,storm等。數據分析的核心是機器學習,當然也包括深度學習和強化學習,以及自然語言處理,圖與網路分析等。
② 大數據平台任務的調度模式有哪些
大數據平台技術框架支持的開發語言多種多樣,開發人員的背景差異也很大,這就產生出很多不同類型的程序(任務)運行在大數據平台之上,如:MapRece、Hive、Pig、Spark、Java、Shell、Python等。
③ 大數據調度平台分類(Oozie/Azkaban/AirFlow/DolphinScheler)
大數據調度系統,是整個離線批處理任務和准實時計算計算任務的驅動器。這里我把幾個常見的調度系統做了一下分類總結,結合目前阿里雲上的MaxCompute中的調度系統,做個對比。
Oozie是一個workflow(工作流)協調系統,是由Cloudera公司貢獻給Apache的,主要用來管理Hadoop作業(job)。
統一調度hadoop系統中常見的mr任務啟動、Java MR、Streaming MR、Pig、Hive、Sqoop、Spark、Shell等。
配置相關的調度任務復雜,依賴關系、時間觸發、事件觸發使用xml語言進行表達。
任務狀態、任務類型、任務運行機器、創建時間、啟動時間、完成時間等。
支持啟動/停止/暫停/恢復/重新運行:支持啟動/停止/暫停/恢復/重新運行。
可以通過DB支持HA(高可用)。調度任務時可能出現死鎖,依賴當前集群版本,如更新最新版,易於現階段集群不兼容。
Azkaban是由Linkedin公司推出的一個批量工作流任務調度器,主要用於在一個工作流內以一個特定的順序運行一組工作和流程,它的配置是通過簡單的key:value對的方式,通過配置中的dependencies 來設置依賴關系,這個依賴關系必須是無環的,否則會被視為無效的工作流。Azkaban使用job配置文件建立任務之間的依賴關系,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。
command、HadoopShell、Java、HadoopJava、Pig、Hive等,支持插件式擴展。
實際項目中經常有這些場景:每天有一個大任務,這個大任務可以分成A,B,C,D四個小任務,A,B任務之間沒有依賴關系,C任務依賴A,B任務的結果,D任務依賴C任務的結果。一般的做法是,開兩個終端同時執行A,B,兩個都執行完了再執行C,最後再執行D。這樣的話,整個的執行過程都需要人工參加,並且得盯著各任務的進度。但是我們的很多任務都是在深更半夜執行的,通過寫腳本設置crontab執行。其實,整個過程類似於一個有向無環圖(DAG)。每個子任務相當於大任務中的一個流,任務的起點可以從沒有度的節點開始執行,任何沒有通路的節點之間可以同時執行,比如上述的A,B。總結起來的話,我們需要的就是一個工作流的調度器,而Azkaban就是能解決上述問題的一個調度器。
提供job配置文件快速建立任務和任務之間的依賴關系,通過自定義DSL繪制DAG並打包上傳。
只能看到任務狀態。
只能先將工作流殺死在重新運行。
通過DB支持HA,任務太多時會卡死伺服器。
Airflow 是 Airbnb 開源的一個用 Python 編寫的調度工具。於 2014 年啟動,2015 年春季開源,2016 年加入 Apache 軟體基金會的孵化計劃。Airflow 通過 DAG 也即是有向非循環圖來定義整個工作流,因而具有非常強大的表達能力。
支持Python、Bash、HTTP、Mysql等,支持Operator的自定義擴展。
需要使用Python代碼來定義流程。
不直觀。
殺掉任務,重啟。
任務過多會卡死。
XXL-JOB是一個開源的,具有豐富的任務管理功能以及高性能,高可用等特點的輕量級分布式任務調度平台,其核心設計目標是開發迅速、學習簡單、輕量級、易擴展、開箱即用。
基於Java。
無,但是可以配置任務之間的依賴。
無
可以暫停、恢復。
支持HA。任務是基於隊列的,輪詢機制。
DolphinScheler是今年(2019年)中國易觀公司開源的一個調度系統,在今年美國時間2019年8月29號,易觀開源的分布式任務調度引擎DolphinScheler(原EasyScheler)正式通過頂級開源組織Apache基金會的投票決議,根據Apache基金會郵件列表顯示,在包含11個約束性投票(binding votes)和2個無約束性投票(non-binding votes)的投票全部持贊同意見,無棄權票和反對票,投票順利通過,這樣便以全票通過的優秀表現正式成為了Apache孵化器項目。
Apache DolphinScheler是一個分布式、去中心化、易擴展的可視化DAG工作流任務調度系統,其致力於解決數據處理流程中錯綜復雜的依賴關系,使調度系統在數據處理流程中開箱即用。
支持傳統的shell任務,同時支持大數據平台任務調度:MR、Spark、SQL(mysql、postgresql、hive/sparksql)、python、procere、sub_process。
所有流、定時操作都是可視化的,通過拖拽來繪制DAG,配置數據源及資源,同時對於第三方系統,提供api方式的操作。
任務狀態、任務類型、重試次數、任務運行機器、可視化變數,以及任務流執行日誌。
支持暫停、恢復、補數操作。
支持HA,去中心化的多Master和多Worker。DolphinScheler上的用戶可以通過租戶和hadoop用戶實現多對一或一對一的映射關系。無法做到細節的許可權管控。
任務隊列機制,單個機器上可調度的任務數量可以靈活配置,當任務過多時會緩存在任務隊列中,不會操作機器卡死。
調度器使用分布式調度,整體的調度能力會隨集群的規模線性正常,Master和Worker支持動態上下線,可以自由進行配置。
可以通過對用戶進行資源、項目、數據源的訪問授權。支持,可視化管理文件,及相關udf函數等。
④ 怎麼優化hadoop任務調度演算法
首先介紹了Hadoop平台下作業的分布式運行機制,然後對Hadoop平台自帶的4種任務調度器做分析和比較,最後在分析JobTracker類文件的基礎上指出了創建自定義任務調度器所需完成的工作。
首先Hadoop集群式基於單伺服器的,只有一個伺服器節點負責調度整個集群的作業運行,主要的具體工作是切分大數據量的作業,指定哪些Worker節點做Map工作、哪些Worker節點做Rece工作、與Worker節點通信並接受其心跳信號、作為用戶的訪問入口等等。其次,集群中的每個Worker節點相當於一個器官,運行著主節點所指派的具體作業。這些節點會被分為兩種類型,一種是接收分塊之後的作業並做映射工作。另一種是負責把前面所做的映射工作按照約定的規則做一個統計。
Task-Tracker通過運行一個簡單循環來定期地發送心跳信號(heartbeat)給JobTracker.這個心跳信號會把TaskTracker是否還在存活告知JobTracker,TaskTracker通過信號指明自己是否已經准備
好運行新的任務.一旦TaskTracker已經准備好接受任務,JobTracker就會從作業優先順序表中選定一個作業並分配下去.至於到底是執行Map任務還是Rece任務,是由TaskTracker的任務槽所決定的.默認的任務調度器在處理Rece任務之前,會優先填滿空閑的Map任務槽.因此,如果TaskTracker滿足存在至少一個空閑任務槽時,JobTracker會為它分配Map任務,否則為它選擇一個Rece任務.TaskTracker在運行任務的時候,第一步是從共享文件系統中把作業的JAR文件復制過來,從而實現任務文件的本地化.第二步是TaskTracker為任務新建一個本地文件夾並把作業文件解壓在此目錄中.第三步是由Task-Tracker新建一個TaskRunner實例來運行該任務.
Hadoop平台默認的調度方案就是JobQueueTaskScheler,這是一種按照任務到來的時間先後順序而執行的調度策略.這種方式比較簡單,JobTracker作為主控節點,僅僅是依照作業到來的先後順序而選擇將要執行的作業.當然,這有一定的缺陷,由於Hadoop平台是默認將作業運行在整個集群上的,那麼如果一個耗時非常大的作業進入執行期,將會導致其餘大量作業長時間得不到運行.這種長時間運行的優先順序別並不高的作業帶來了嚴重的作業阻塞,使得整個平台的運行效率處在較低的水平.Hadoop平台對這種FIFO(FirstINAndFirstOut)機制所給出的解決辦法是調用SetJobPriority()方法,通過設置作業的權重級別來做平衡調度.
FairScheler是一種「公平」調度器,它的目標是讓每個用戶能夠公平地共享Hadoop集群計算能力.當只有一個作業運行的時候,它會得到整個集群的資源.隨著提交到作業表中作業的增多,Hadoop平台會把集群中空閑出來的時間槽公平分配給每個需要執行的作業.這樣即便其中某些作業需要較長時間運行,平台仍然有能力讓那些短作業在合理時間內完成[3].FairScheler支持資源搶占,當一個資源池在一定時段內沒有得到公平共享時,它會終止該資源池所獲得的過多的資源,同時把這些釋放的資源讓給那些資源不足的資源池.
Hadoop平台中的CapacityScheler是由Yahoo貢獻的,在調度器上,設置了三種粒度的對象:queue,job,task.在該策略下,平台可以有多個作業隊列,每個作業隊列經提交後,都會獲得一定數量的TaskTracker資源.具體調度流程如下.
(1)選擇queue,根據資源庫的使用情況從小到大排序,直到找到一個合適的job.
(2)選擇job,在當前所選定的queue中,按照作業提交的時間先後以及作業的權重優先順序別進行排序,選擇合適的job.當然,在job選擇時還需要考慮所選作業是否超出目前現有的資源上限,以及資源池中的內存是否夠該job的task用等因素.
(3)選擇task,根據本地節點的資源使用情況來選擇合適的task.
雖然Hadoop平台自帶了幾種調度器,但是上述3種調度方案很難滿足公司復雜的應用需求.因此作為平台的個性化使用者,往往需要開發自己的調度器.Hadoop的調度器是在JobTracker中載入和調用的,因此開發一個自定義的調度器就必須搞清楚JobTracker類文件的內部機制.作為Hadoop平台的核心組件,JobTracker監控著整個集群的作業運行情況並對資源進行管理調度.每個Task-Tracker每隔3s通過heartbeat向JobTracker匯報自己管理的機器的一些基本信息,包括內存使用量、內存的剩餘量以及空閑的slot數目等等[5].一
旦JobTracker發現了空閑slot,便會調用調度器中的AssignTask方法為該TaskTracker分配task。
⑤ 任務調度方法有哪些
1. 通過操作系統的計劃任務調度,如windows的計劃和任務,linux與unix的crontab任務調度機制
2. 有些資料庫本身的任務調度,如oracle的job任務調度機制
⑥ 大數據開發:Azkaban和Oozie調度系統對比
大數據處理的各個環節當中,涉及到諸多的任務執行,為了保證系統的性能和運行效率,就需要對這些任務進行合理的安排,這就需要到調度系統。在調度系統當中,DAG工作流類調度系統以Azkaban和Oozie為代表。今天的大數據開發分享,我們就主要來講講Azkaban和Oozie調度系統對比。
所謂DAG工作流類調度系統,這一類系統的方向,重點定位於任務的調度依賴關系的正確處理,分片執行的邏輯通常不是系統關注的核心,或者不是系統核心流程的關鍵組成部分,如果某些任務真的關注分片邏輯,往往交給後端集群(比如MR任務自帶分片能力)或者具體類型的任務執行後端去實現。
DAG工作流類調度系統所服務的往往是作業繁多,作業之間的流程依賴比較復雜的場景,比如大數據開發平台的離線數倉報表處理業務,從數據採集,清洗,到各個層級的報表的匯總運算,到最後數據導出到外部業務系統,一個完整的業務流程,可能涉及到成百上千個相互交叉依賴關聯的作業。
這類系統的代表,包括Oozie,Azkaban,Chronos,Zeus,Lhotse等,這里我們選取前兩者,從功能、工作流定義、工作流傳參、定時執行、資源管理、工作流執行等方面來進行分析比對:
1、功能
Azkaban與Oozie均可以調度maprece、pig、java腳本工作流任務。
Azkaban與Oozie均可以定時執行工作流任務。
2、工作流定義
Azkaban使用Properties文件定義工作流。
Oozie使用XML文件定義工作流。
3、工作流傳參
Azkaban支持直接傳參,例如${input}。
Oozie支持參數和EL表達式,例如${fs:dirSize(myInputDir)}。
4、定時執行
Azkaban的定時執行任務是基於時間的。
Oozie的定時執行任務是基於時間和輸入數據資源管理。
5、工作流執行
Azkaban有兩種運行模式,分別是solo server mode(executor server和web server部署在同⼀台節點)和multi server mode(executor server和web server可以部署在不同節點)。
Oozie作為工作流服務運行,支持多用戶和多工作流。
綜上所述,Ooize相比Azkaban是一個重量級的任務調度系統,功能全面,但配置使用也更復雜(xml)。如果可以不在意某些功能的缺失,輕量級調度Azkaban是很不錯的候選對象。
關於大數據開發,Azkaban和Oozie調度系統,以上就為大家做了簡單的介紹了。相對來說,Oozie調度系統更加全面,但是也更加復雜,在學習當中,也要多花精力去掌握。
⑦ 一個典型的大數據解決方案,包含哪些組件
首先,一個典型的大數據解決方案,也就是大數據系統平台的構建,涉及到多個層次,數據採集和傳輸、數據存儲、數據計算、資源管理、任務調度等,每個流程階段當中,都有多個組件可選擇,關鍵是要能夠滿足實際的需求。
簡單舉例說明一下典型的一些組件:
文件存儲:Hadoop HDFS
離線計算:Hadoop MapRece、Spark
流式、實時計算:Storm、Spark Streaming
K-V、NOSQL資料庫:HBase、Redis、MongoDB
資源管理:YARN、Mesos
日誌收集:Flume、Scribe、Logstash、Kibana
消息系統:Kafka、StormMQ、ZeroMQ、RabbitMQ
查詢分析:Hive、Impala、Presto、Phoenix、SparkSQL、Flink、Kylin、Druid
分布式協調服務:Zookeeper
集群管理與監控:Ambari、Ganglia、Nagios、Cloudera Manager
數據挖掘、機器學習:Mahout、Spark MLLib
數據同步:Sqoop
任務調度:Oozie