大数据简介
FusionInsight大数据开发
FusionInsight HD是一个大数据全栈商用平台,支持各种通用大数据应用场景。
技能需求
- 扎实的编程基础
- Java/Scala/python/SQL/shell常见命令
- 掌握FusionInsight
- 熟悉业务开发
大数据应用开发流程
- 业务分析和方案设计
- 应用开发
- 应用调试
- 应用部署
应用开发关键点
- 账号
- 安全认证
- 场景约束
应用开发指南--调试
- 常规手段
- 协助资料
- 保障团队
总结:
- 认证是应用开发的关键点,要根据业务需求,申请合适账号,完成安全认证。
- 华为FusionInsight易集成开发,提供了包括应用开发指南,样例代码和支持团队等各类协助。
HDFS应用开发
HDFS(Dadoop Distributed File System)
HDFS概述
- 高容错性
- 高吞吐量
- 大文件存储
HDFS架构包含三部分
- Name Node
- DataNode
- Client
HDFS数据写入流程
HDFS应用开发方式
- HDFS Client
Java/shell/Web UI
- Kerbors控制
HDFSJava应用开发
下载客户端/获取样例工程/生产样例工程/导入eclipse/编码
Java开发流程
- 初始化
- 目录操作
- 文件读取
- 文件写入/追加(
- 初始化FSDataOutputstream对象
- 使用FSDataOutputStream对象初始化BufferedOutputStream.
- 使用BufferedOutputStream.write写入HDFS数据。
- 使用BufferedOutputStream.flush和FSDataOutputstream.hflush()将数据刷新到HDFS。
- 关闭数据流。)
应用开发规范
规范1:Java开发时,申请资源需要及时释放。
规范2:HDFS不适用于存储大量小文件。
规范3:HDFS中数据备份3份即可。
规范4:如果有多线程进行login的操作,当第一次登陆成功后,所有线程再次登陆时应该使用relogin的方式。
HBase应用开发
HBase的定义
HBase是一个高可靠、高性能、面向列、可伸缩的分布式存储系统。
- 适合于存储大表数据,可以达到实时级别。
- 利用Hadoop HDFS 作为其文件存储系统,提供实时的读写的数据库系统。
- 利用ZooKeeper作为协同服务。
HBase架构
HBase的适用场景
- 海量数据
- 高吞吐量
- 需要在海量数据中实现高效的随机读取
- 需要很好的性能伸缩能力
- 能够同时处理结构化和非结构化的数据
- 不需要完全拥有传统关系型数据库所具备的ACID特性
HBase应用开发流程
- 制定业务目标
- 准备开发环境
- 下载并导入样例工程
-
设计HBase表
设计原则:
查询数据唯一
数据均匀分布
查询性能优化
其他因素(region的提前划分,冷热Family的使用)
- 根据场景开发工程
- 编译并运行程序
- 查看结果与调试程序
HBase表设计-总体原则
设计目标:提高吞吐量
设计原则:预分region,是region分布均匀,提高并发
实现方法:Rowkey范围和分布已知,建议预分region
设计目标:提高写入性能
设计原则:避免过多的热点region
设计方法:根据应用场景,可以考虑将时间因素引入Rowkey
设计目标:提高查询性能
设计原则:数据连续存储,频繁访问的数据存储一个地方,数据连续存储,离散度,信息冗余。
实现方法:同时读取的数据存放在同一行、cell,使用二级索引
HBase表设计-设计内容
设计内容通过不同维度,可分为:
Table设计(表粒度的设计)
- 建表方法
- 预分region
- Family属性
- 系统并发能力、数据清洗能力
RowKey设计
- 原则:需要同时访问的数据,RowKey尽量连续
- 访问效率:分散写,连续读
- 属性内容:常用的查询场景属性
- 属性值顺序:枚举,访问权重
- 时间属性:循环Key+TTL,周期建表
- 二级索引
- 折中法
- 冗余法
Family设计
可枚举数量少扩展性弱的属性作为Family
Qualifier设计
不可枚举、数量多且扩展性强的属性作为Qualifier
原则:同时访问的数据存放到同一个Cell,列名尽量简短
HBase常用接口
create()
put()
get()
getScanner(Scan scan)
、、、
创建Configuration实例以及Kerberos安全认证
HBaseConfiguration方法
创建表
create Table方法
写入数据
put方法
读取一行数据
get方法
读取多行数据
scan方法
MapReduce 应用开发
要求:
- MapReduce的基本定义及过程
- 搭建开发环境
- 代码实例及运行程序
- MapReduce开发接口介绍
1. MapReduce的基本定义及过程
MapReduce是面向大数据并行处理的计算模型、框架和平台,其资源调度由Yarn完成,任务资源隐含了以下三层含义:
- 1)MapReduce是 一个基于集群的高性能并行计算平台(cluster Infrastructure)。
- 2)MapReduce是 一个并行计算与运行软件框架(SoftWare Framework)
- 3)MapReduce是 一个并行程序设计模型与方法(Programming Model & Methodology)
MapReduce特点:
- 易于编程
- 良好的扩展性
- 高容错性
MapReduce的过程:
- 把输入的数据(Input) 拆分为多个键值对(key-value对)
- 每一个键值对分别调用Map进行并行处理
- 每一个Map会产生多个新的键值对
- 对Map阶段产生的数据进行排序、组合
- 以键值对的形式输出最终结果
2. 搭建开发环境
- 确认Yarn组件和MapReduce组件已经安装。
- 客户端安装Eclipse和JDK程序。
- 客户端机器的时间与FusInsight集群时间要保持一致,时间差要小于5分钟。
- 在Yarn服务页面下载MapReduce客户端程序到客户端机器中。
- 1.下载客户端
- 2.获取样例工程
- 3.生成样例工程
- 4.导入eclipse
- 5.编码
开发相关类的总结
1) InputFormat类
- 将输入的数据分割成split,并将split拆分为<key,value>作为map的输入。
2) Mapper类
- 实现map函数,根据输入的<key,value>对产生中间结果。
3)Combiner类
- 实现combiner函数,合并中间结果中具有相同key值的键值对。
4) Partitioner类
实现getPartitioner函数,在Shuffle过程按照key值将中间数据分成R份,每一份由一个Reduce负责
5) Reduce类
- 实现reduce函数,将中间结果合并,得到最终的结果。
6)OutputFormat类
- 该类负责输出最终的结果,MapReduce使用OutputFormat类将数据输出存入到文件中,每个Reduce将它的输出直接写到自己的文件中。
调式代码
- MapReduce开发调式采用的原理是Java的远程调式机制
Hive应用开发
- 了解Hive的基本架构原理
- 掌握JDBC客户端开发流程
- 了解ODBC客户端的开发流程
- 了解python客户端的开发流程
- 了解Hcatalog/webHcat开发接口
- 掌握Hive开发规则
1. 了解Hive的基本架构原理
守护进程:
- HiveServer(Thrift/Compiler)
- webHcat
- MetaStore
Hive的应用场景
- 数据挖掘
- 非实时分析
- 数据汇总
- 作为数据仓库
2. 掌握JDBC客户端开发流程
JDBC开发-参数初始化
- 设置ZooKeeper地址
- krb5文件路径
- 设置JAAS配置
- 配置ZooKeeper Principal
- 执行登陆
JDBC开发-拼接URL
- JDBC前缀设置
- 服务发现模式
- 安全配置:qop.auth.principal
- 非安全配置
JDBC开发-执行SQL
- 加载驱动类
- 建立连接
- 执行SQL
- 关闭连接
JDBC开发-SQL实现
- 创建preparedStatement
- 执行statement
- 关闭statement
规则建议:
开发调式:在开发程序时,可通过使用Hive的客户端Beeline先进行调试,检验语句与结果正确性,再部署基于JDBC等的应用程序。
获取数据库连接:Hive的数据库URL再拼接时已经经过安全认证,所以Hive数据库的用户名和密码为null或空 。
JDBC超时限制:Hive提供的JDBC实现的超时限制,默认是5分钟。
执行HQL:再JAVA JDBC应用开发中,拼装HQL语句,注意HQL语句不能以“;“结尾。
HQL语法规则之判空:判断字段为空使用:”is null“,判断不为空,即有值,使用:"is not null"
UDF的管理:建议由管理员创建永久UDF,避免每次使用时都去add jar,和重新定义UDF。
UDF的注解:Hive的UDF会有一些默认属性。@UDFType(deterministic = false)
使用分区表:当数据量较大时,且经常需要按天统计时,建议使用分区表,按天存放数据。
动态分区表:为了避免插入动态分区数据过程中,产生过多的小文件,在执行插入时,在分区字段上加distribut by。
文件格式选择:Hive支持多种存储格式,比如TextFile,RCFile,ORC,Sequence,Parquet.
sorl应用开发
要求:
- 了解Solr应用开发适用场景
- 熟悉Solr应用开发流程
- 熟悉并使用Solr常用API
- 理解Collection设计基本原则
- 应用开发实践
Solr简介
- Solr是一个高性能,基于Lucene的全文检索服务,也可以作为NoSQL数据库使用。
- Solr对Lucene进行了扩展,提供了比Lucene更为丰富的查询语句,同时实现了可配置、可扩展,并对查询性能进行了优化,还提供了一个完善的功能管理界面。
- SolrCloud是从Solr 4.0 版本开始发出的具有开创意义的分布式索引和索引方案,基于Sorl和Zookeeper进行开发的。
Solr概念体系-总述
常见术语:
- Config Set:Solr Core提供一组配置文件 ,
- Core:即Solr Core ,
- Shard:Collection的逻辑分片
- Replice:Shard下的实际存储索引的一个副本,与Core对应
- Leader:赢得选举的Shard Peplicas
- Zookeeper:它在Solr Core是必须的,提供分布式锁、处理Leader选举、管理配置等功能
Solr的常用应用场景
- 待检索数据类型复杂
- 检索条件多样化(如涉及字段太多),常规查询无法满足
- 读取远多于写入数据
Solr应用开发流程-制定业务目标
业务数据规模及数据模型
- 涉及Collection的Shard划分及Schema的定义
实时索引、查询性能要求
- 涉及Collection的Shard划分、索引存储位置
查询场景
- 涉及Collection的Schema定义
Solr应用开发流程-初始化及安全认证
- 初始化并获取配置
- 安全认证
- 获取CloudSolrClient
- 调用Solr APL
Solr应用开发流程-设计Collection
- 根据业务数据的关系设计schema.xml
- 根据写入和查询场景设计uniqueKey字段
- 根据写入和查询性能要求设计solrconfig.xml
- 根据业务数据规模和Solr集群规模确定Shard数目
- 根据可靠性能要求设定Shard副本数
Collection设计-索引存储位置
索引存储在HDFS
缺点:
- 与存储在本地磁盘相比,性能下降30%-50%
- 实时单节点写入速度<=2MB/s
- 数据膨胀略高于存储在本地
优点:
- Sorl设置Replica即可,利用HDFS副本机制保障数据可靠性
- 数据管理由HDFS完成,包括各节点数据balance、方便迁移
配置集Schema设计-Field
dynamicField
- 动态的字段设置,用于后期自定义字段,”*“号通配符。
copyField
- 将多个字段集中到一个字段
Kafka应用开发
- 了解Kafka应用开发适用场景
- 熟悉Kafka应用开发流程
- 熟悉并使用Kafka常用API
- 进行Kafka应用开发
Kafka的定义
Kafka是一个高吞吐、分布式、基于发布订阅的消息系统
Kafka有如下几个特点:
- 高吞吐量
- 消息持久化到磁盘
- 分布式系统易扩展
- 容错性好
Kafka的适用场景
- 适用于离线和在线的消息消费
- 已对接组件
- Streaming、Spark、Flume
使用Kafka的好处
- 解耦--使得消息生产、消费系统能够独立变更
- 可靠--有效解决单点故障引发系统不可用问题
- 易扩展--生产、消费系统扩展简单
- 可恢复--消息缓存下来,支持故障从故障点读取
- 异步通信--生产系统无需关心消费系统的消费时间
配置及开发准备--配置keytab文件到样例工程
- 配置Keytab到工程
- 安全认证
- Topic订阅
- 消费获取
- 消费处理
Kafka常用接口
- Kafka集群安全访问端口默认为21007,非安全访问端口默认为21005
Kafka Producer接口
- 向管理员申请目标Topic的生产者权限
- 根据业务需求,配置发送相关配置参数
- 调用新Producer API接口发送数据
Kafka Consumer接口
- 向管理员申请目标Topic的消费者权限
- 根据业务需求,配置消费者相关配置参数
- 调用新Consumer API接口进行消息消费
Spark应用开发
要求:
- 了解Spark基本原理
- 搭建Spark开发环境
- 开发Spark应用程序
- 调试运行Spark应用程序
YARN资源调度,可以和Hadoop集群无缝对接
Spark适用场景
大多数现有集群计算框架如MapReduce等基于从稳定存储(文件系统)到稳定存储的非循环数据流,数据重用都是基于磁盘的,执行效率比较低。
与传统的MapReduce任务频繁读写磁盘数据相比,基于内存计算的Spark则更适合应用在迭代计算,交互式分析等场景。
Spark应用运行流程--关键角色
- Client:需求提出方,负责提交需求(应用)。
- Driver:负责应用的业务逻辑和运行规划(DAG)。
- ApplicationMaster:负责应用的资源管理,根据应用的需求,向资源管理部门(ResourceManager)申请资源。
- ResourceManager:资源管理部门,负责整个集群的资源统一调度和分配
- Executor:负责实际计算工作,一个应用会分拆给多个Executor来进行计算。
Spark核心概念--RDD
RDD(Resilient Distributed Datasets)即弹性分布式数据集,指的是一个只读的,可分区的分布式数据集。这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。
RDD的生成
- 从Hadoop文件系统(或与Hadoop兼容的其它存储系统)输入创建(如HDFS)
- 从集群创建(如sc.Parallelize)。
- 从夫RDD转换得到新的RDD。
RDD的存储和分区
- 用户可以选择不同的存储级别存储RDD以便重用(11种)
- 当前RDD默认存储于内存,但当内存不足时,RDD会溢出到磁盘中。
- RDD在需要进行分区时会根据每条记录Key进行分区,以此保证两个数据集能高效进行Join操作。
RDD的优点
- RDD是只读的,可提供更高的容错能力
- RDD的不可变性,可以实现Hadoop MapReduce的推测式执行
- RDD的数据分区特性可以通过数据的本地性来提高性能。
- RDD都是可序列化的,在内存不足时可自动降级为磁盘存储。
RDD的特点
- 在集群节点上时不可变的,是已分区的集合对象。
- 失败后自动重连
- 可以控制存储级别(内存、磁盘等)来进行重用。
- 必须是可序列化的
- 是静态类型。
RDD的创建
Spark所有操作都围绕弹性分布式数据集(RDD)进行,这是一个有容错机制并可以被并行操作的元素集合,具有只读,分区,容错,高效,无需物化,可以缓存,RDD依赖等特征。
目前有两种类型的基础RDD:
- 并行集合:接受一个已经存在的Scala集合,然后进行并行计算
- Hadoop数据集:在一个文件的每条记录上运行函数。
RDD的创建--并行集合
并行集合是通过调用SparkContext的parallelize方法,在一个已经存在的Scala集合(一个Seq对象)上创建的。
集合的对象将会被拷贝,创建出一个可以被并行操作的分布式数据集。
RDD依赖:宽依赖和窄依赖
RDD父子依赖关系
- 窄依赖:(Narrow)指父RDD的每一个分区最多被一个子RDD的分区所用。
- 宽依赖:(Wide)指子RDD的分区依赖于父RDD的所有分区,是Stage划分的依据。
- RDD常用Transformation算子
- RDD常用Action算子
Spark任务参数配置
- Spark优先级是:配置文件<动态参数<代码配置
相同的数据,只创建一个RDD
算法调优--RDD缓存
- Spark可以使用persist和cache方法将任意RDD缓存到内存、磁盘文件系统中。
算法调优--避免使用Shuffle
- Shuffle过程会有整个RDD数据的写和读的操作,成本非常高。
算法调优--使用广播变量
外部变量:
- 每个task都有一个变量副本。
广播变量:
- 每个Executor保留一份。
编写代码
- 登陆
- 创建连接
- 执行SQL
- 获取结果
DataFrame介绍
DataFrame:已RDD为基础,带有Schema信息,类似传统数据库的二维表。
编写代码
- 登陆
- 注册Table
- 执行SQL
- 过滤
SparkStreaming概述
SparkStreaming是Spark核心API的一个扩展,它对实时流式数据的处理具有可扩展性、高吞吐量、可容错性等特点。
SparkStreaming原理
- SparkStreaming接收实时的输入数据流,然后将这些数据切分为批数据供Spark引擎处理,Spark引擎将数据生成最终的结果数据。
- 使用DStream从Kafka和HDFS等源获取连接的数据流。DStream是一系列连续的RDD组成。
SparkStreaming数据源
- 基本源:HDFS等文件系统、Socket连接等
- 高级源:Kafka等
- 自定义源: 需要实现用户自定义receiver
可靠性(二次开发)
- Reliable Receiver
- 设置CheckPoint
- 确保Driver可以自动启动
- 使用Write Ahead Log 功能
SparkStreaming代码流程
常见业务代码逻辑
- 创建StreamingContext
- 定义输入源
- 准备应用计算逻辑
- 使用streamingContext.start()方法接受和处理数据。
- 使用streamingContext.stop()方法停止流计算。
窗口操作
SparkStreaming支持窗口计算,允许用户在一个滑动窗口数据上应用transformation算子。
窗口在源DStream上滑动,合并和操作落入窗口RDDs,产生窗口化的DStream的RDDs。
Checkpoint
SparkStreaming可以checkpoint足够的信息到容错存储系统中,以使系统崩溃后从故障中恢复。
- Metadata checkpoint:保存流计算的定义信息到HDFS中
- Data checkpoint:保存生成的RDD到HDFS中。
SparkStreaming性能调优
- 设置合理的批处理时间(batch Duration)
- 设置合理数据接收并行度
- 设置多个Receiver接受数据
- 设置合理的Receiver阻塞时间
- 设置合理数据处理并行度
- 使用Kryo系列化
- 内存调优
- 设置持久化级别减少GC开销
- 使用并发的标记-清理GC算法减少GC暂停时间
Redis应用开发
要求:
- 了解Redis应用场景
- 掌握Redis二次开发环境搭建
- 掌握Redis业务开发
Redis简介
- Redis是一个基于网络的,高性能key-value内存数据库
- Redis根memcached类似,不过数据可持久化,而且支持的数据类型很丰富。支持在服务端计算集合的并、交和补集等,还支持多种排序功能。
Redis使用场景有如下几个特点:
- 高性能
- 低延迟
- 丰富数据结构存取
- 支持持久化
Redis应用场景介绍
Redis提供了灵活多变的数据结构和数据操作,主要应用于如下场景:
- 取最新N个数据的操作,比如典型的取某网站的最新文章。
- 排行榜应用,取TOP N操作。
- 需要精准设定过期时间的应用。
- 计数器应用,比如记录用户访问网站的次数。
- 构建队列系统
- 缓存,如缓存关系数据库中的频繁访问的表数据。
架构回顾
- 无中心自组织的结构,节点之间使用Gossip协议来交换节点状态信息。
- 个节点维护Key->Server的映射关系。
- Client可以向任意节点发起请求,节点不会转发请求,只是重定向Client
- 如果在Client第一次请求之间,Cluster拓扑发生改变,则第二次重定向请求将被再次重定向,直到找到正确的Server为止。
Redis应用开发
设计Redis数据结构
- 取最新N个数据的操作:list
- 排行榜应用,取TOP N操作。以某个条件为权重,比如按顶的次数排行:sorted set。
- 利INCR,DECR命令来构建计数器系统。、
- Uniq操作,获取某段时间所有数据排重值:set。
- 使用list可以构建队列系统
Redis应用开发
根据场景开发工程
- 梳理业务场景流
- 设计各模块接口
- 如果使用的是安全集群,需要进行安全认证
- 熟悉Redis提供的相应API
- 调用业务需要的API实现各功能
数据结构设计
- 计算过程中使用的用户信息使用hash结构存取,KEY设计为userinfo-<user id>,
- field为用户的属性。
数据读写原则
- MR任务每天定时将用户信息从后端存储源(HBase)批量导入Redis中。
- 业务系统获取数据时,先从Redis中获取,获取不到再取后端HBase获取即实时计算,并同步写入到Redis。
样例说明-String类型操作
- set:将字符串值value关联到key
- get:返回key所关联的字符串值,
- setex:将字符串值value关联到key,并设置key的生存时间
- append:将value追加到key原值的末尾,类似Java String类型的“+”操作。
样例说明-List类型操作
- Ipush/rpush:往列表头/尾添加一个元素。
- Irange:返回列表中start至end之间的元素
- llen:返回列表的长度
- lpop/rpop:从列表头/尾获取一个元素,并将其中列表中删除。
样例说明-Hash类型操作
- hset
- hget
- hgettall
- hmset
- hincrby
- hkeys
- hvals
- hmget
- hexists
- hdel
Streaming应用开发
- 掌握Streaming基本业务开发流
- 熟悉Streaming常用API接口使用
- 掌握Streaming业务设计基本原则
- 了解Streaming应用开发环境
- 了解CQL开发流及使用
Streaming的定义
Streaming基于开源Storm,是一个分布式、实时计算框架。Streaming在开源Storm的基础上增加了持续查询语言CQL、增强了安全性和可靠性。
- 事件驱动
- 连续查询
- 数据不存储、先计算
- 实时响应,低延迟
CQL(Continuous Query Language),持续查询语言,是一种用于实时数据流上的查询语言。
它是一种SQL-like的语言,目前主要适配Storm。
相对于SQL,CQL中增加了(时序)窗口的概念,将待处理的数据保存在内存中,进行快速的内存计算,CQL的输出结果为数据流在某一时刻的计算结果。
Streaming的适用场景
Streaming主要应用于以下几种对响应时延有严重要求的场景:
- 实时分析:如实时日志处理,交通流分析等
- 实时统计:如网站的实时访问统计、排序等
- 实时推荐:如实时广告定位、事件营销等
提交拓扑
当前Streaming支持三种方式提交拓扑
- Linux命令行提交-CMD模式
- Eclipse远程提交-Remote模式
- 本地模式提交-Local模式
Spout设计
- 数据接受
- 数据反序列化
- 数据拆分
- 数据筛选
- 数据缓存
- 数据发送
counting Bolt设计
功能:
- 窗口定义
- 刷新窗口
- 发送数据
Storm提供接口
1 REST接口
- REST(Representational State Tansfer)表述性状态转移接口。
2 Thrift接口
- 由Numbus提供。Thrift是一个基于静态代码生成的跨语言的RPC协议栈实现。
Spout接口
- Spout的Ack开关
Bolt接口
- Bolt的Ack开关
- 创建输入流
- Join
- 窗口
- Split
Flume应用开发
要求:
- 了解Flume应用开发适用场景
- 掌握Flume应用开发
Flume应用场景
Flume的核心是把数据从数据源收集过来,在送到目的地。为了保证输送一定成功,发送到目的地之前,会先缓存数据,待数据真正的到达目的地后,删除自己缓存的数据。
Flume采用流式方法采集和传输数据,程序配置好后,不需要外部条件触发下,一直监控数据源,源源不断地采集、传送数据到目的地。
主要应用于一下几种场景:
- 将分布式节点上大量数据实时采集、汇总和转移
- 将集群内、外地本地文件、实时数据流采集到FusionInsight集群内的HDFS、HBase,Kafka,Solr中。
- 将Avro、System,http,Thrift,JMS、Log4j协议发送过来地数据采集到FusionInsight集群内
Flume基本概念
- Source:数据源,即是产生日志信息地源头,Flume会将原始数据建模抽象成自己处理地数据对象:event
- Channel:通道,主要作用是临时缓存Source发过来地数据
- Sink:主要是从channel中取出数据并将数据放到不同地目的地
- event:一个数据单元,带有一个可选地消息头,Flume传输地数据地基本单位是event,如果是文本文件,通常是一行记录。event从Source,流向Channel,再到Sink,Sink将数据写入目的地
方案设计:
1)首先确定数据源:集群外
2)数据最终流向:KafKa(集群内)
Oozie应用开发
要求:
- 了解Oozie应用开发适用场景
- 掌握Oozie应用开发
- 熟悉并使用Oozie常用API
Oozie简介
- Oozie是一个Hadoop作业的工作流调度管理系统
- Oozie工作流(workflow)是放置在控制依赖DAG(有向无环图)中的一组动作(Action)集合,控制依赖可确保后续操作在见面的操作已经成功完成后才会启动。
- Oozie的协调作业(Coordinator)是通过时间(频率)和有效数据来触发当前的Oozie工作流。
- Oozie支持多种Hadoop作业(包括:HDFS,Map Reduce、Hive、Streaming MP、Loader、Spark、Distcp)以及系统类作业(Java和shell)
Oozie应用场景
Oozie是一个工作流调度引擎,对各种类型的Hadoop作业进行编排与调度。
- 编排与管理逻辑复杂的多种类型的Hadoop
- 基于时间(频率)触发工作流
- 基于数据有效性触发工作流
- 实时监控与管理集群的工作流,快速定位问题