开发者学堂课程【Azkaban 大数据调度系统课程精讲:Azkaban--使用实战--hive 调度】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/721/detail/12882
Azkaban--使用实战--hive 调度
自己执行 hive 的操作,启动 hive 服务器,远程机器上,比如机房中,客户端远程连接,自带客户端或者第三方客户端也可以连接,输入相关命令,show tables 是通过客户端 beeline,通过协议发送给 hive 服务器,cd 到 hive 的安装目录下,在 hive 的 bin 目录下查看,启动的 hive 服务叫 hiveserver2,客户端 beeline,还有一项命令是 hive,
如果不加任何参数的执行 hive,它将会打开一个本地交互式的 hive 命令,输入 show tables 也可以返回相关的结果,第一个参数是-e,表明执行命令时后面可以跟 sql 语句,比如输入#./hive -e “show tables;”,当再启动时它就不再进入交互式命令,而是在启动之后立马执行后面跟着的 sql 语句,执行以后返回结果,Time taken: 1.097 seconds, Fetched: 2 row(s)执行完之后立马退出。
弊端是如果sql语句特别长,使用-f,可以把 sql 分装到 sql 文件中,比如 vim.test.aql,保存 show tables,再启动就不是-e,而是-f test.sql,也可以执行 hive,返回同样的结果。
打开参考资料,job 配置模版,hive 文件夹。
点击只执行一句 aql 的例子。
#hive. job
type command
command=/root/ apps/hive/bin/hive -e ' show tables'
执行一个 sq| 脚本文件的例子。在企业中直接把 sql 写在命令中,太多,单独编写 sq| 脚本。
use default; 切换到默认的数据库
drop table aztest; 删除表
create table aztest(id int,name string) row format delimited fields terminated by ' , ' ;创建表,分隔符为逗号
load data inpath' /aztest/hiveinput ' into table aztest ;加载数据
create table azres as select id from aztest ;再创建一个表来自于查询 aztest 语句中 id 结构和内容返回创建的表
insert overwrite directory '/aztest/hiveoutput' select count(l) from aztest;把数据导出到 aztest/hiveoutput 路径下,统计 aztest 基准数
生活中有大量的逻辑,都可以写在 sql 语句中,注意不同语义之间用分号分割。
查看配置有无问题,路径要保持一致,把配置文件连同 hive,sql 脚本一起 zip 压缩,命名为 hivesql。
打开 azkaban 工程页面,重新创建新的 project 工程。
选择上传 hivesql.zip 压缩文件。
准备相关的数据,创建表时需要加载数据,准备路径,有两个字段分别是 ie 和 name,分隔符为逗号,输入vim.1.test。选择三个数据,上传到创建的文件,上传完后意味着 sql 执行的文件已经有了,立即咨询,点击 execute flow。
点击右下角 execute。
显示 running 正在运行,hive 需要咨询一段时间,当中有很多语句,而且语句还需要咨询代码程序,比如创建表时,到处数据都需要代码程序,也可以打开当前正在执行的代码程序,可以发现第一个是创建表时的代码程序。
再刷新,第二个代码程序出来。数据导出时也执行代码程序。
如果出错,可以看日志,也可以在 azkaban job list 中查看相关日志。
刷新,可以看到已经成功。
如果出错,根据日志进行排查。最终导出得到是 select count(1) from aztest;语句,针对 aztest 做统计记录,最终路径下的文件里面应该是三,返回做刷新 go,下载。
打开文件,里面是个3,说明整个执行语句没有问题。
如果不确定也可以输入 show tables 查看,注意一定是英文状态下的分隔符,最后的内容是三个文件,这样就完成了利用 azkaban 对 hivesql 的调度,整个突破点就是hive命令。
3、创建 job 描述文件和 Rive 脚本
Hive 脚本:test. sql
use default;
drop table aztest;
create table aztest(id int
,
name string) row format delimited fields terminated
by'
,
';
load data inpath' /aztest/hiveinput' into table aztest;
create table azres as select * from aztest;
insert overwrite directory' /aztest/hiveoutput' select count(1) from aztest;
Job 描述文件:hivef. job
# hivef. job
type=command
command=/home/hadoop/apps/hive/bin/hive -f ' test. sql'
将所有 job 资源文件打到一个 zip 包中创建工程并上传 zip 包,启动 job
4、azkaban 调度总结
(1)理论上任何一款软件,只有可以通过 shell command 执行都可以特化成为 zkaban 的调度执行
(2)type=command command = sh xx.sh
只要能够深入执行,把它放入脚本中都可以执行。在企业中,如果涉及到其他的软件,需要借助到 azkaban 执行,就去考虑能不能 show 执行,转化成 azkaban 进行执行,这就是各种任务的调度配置。