Azkaban
1.为什么需要工作流调度系统
一个完整的数据分析系统通常都是由大量任务单元组成:
shell脚本程序,java程序,mapreduce程序、hive脚本等
各任务单元之间存在时间先后及前后依赖关系
为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行;
例如,我们可能有这样一个需求,某个业务系统每天产生20G原始数据,我们每天都要对其进行处理,处理步骤如下所示:
1.通过Hadoop先将原始数据同步到HDFS上;
2.借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
3.需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
4.将明细数据进行复杂的统计分析,得到结果报表信息;
5.需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
它有如下功能特点:
Web用户界面;方便上传工作流;方便设置任务之间的关系;调度工作流;认证/授权(权限的工作);能够杀死并重新启动工作流;模块化和可插拔的插件机制;项目工作区;工作流和任务的日志记录和审计。
2.使用
Azkaba内置的任务类型支持command、java。因为shell脚本可以执行jar包,所以只用command即可。
type=command
dependencies=依赖的任务
command=shell命令
如果执行mapreduce的jar包,需要将所需的资源都打到压缩包中
Sqoop
1.概述
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库
2.工作机制
将导入或导出命令翻译成mapreduce程序来实现。(比如将关系数据库的数据导入hdfs,使用一个mapreduce程序读数据,整合结果,并发处理数据)
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。(使用sqoop的代码生成工具可以方便查看到sqoop所生成的java代码,并可在此基础之上进行深入定制开发)
3.数据导入和导出
“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)
3.1 将数据导入HDFS
$ sqoop import (generic-args) (import-args)
3.2 导入数据表到hive
首先将数据导入hdfs,然后再导入hive目录,前提是已经创建了hive表
3.3 导入表数据子集
我们可以导入表的使用Sqoop导入工具,"where"子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。
where子句的语法如下。
--where <condition>
3.4 增量导入
3.5 数据导出
将数据从HDFS导出到RDBMS数据库
导出前,目标表必须存在于目标数据库中。
默认操作是从将文件中的数据使用INSERT语句插入到表中
更新模式下,是生成UPDATE语句更新表数据