① 大数据包括哪些
大数据技术庞大复杂,基础的技术包含数据的采集、数据预处理、分布式存储、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