0%

在官方文档的介绍中,了解到Azkaban所支持的工作类型还是很丰富的,如:CommandHadoopShellPythonJavaHivePig等等。不过在此我们主要具体只来讲解下PythonJava的工作类型任务,其它工作类型的话,比如CommnadHiveHadoopShell相对比较简单就不做详解,有需要的话可以自行实践一下。

不管提交哪一种任务,Azkaban默认都是通过上传压缩包来管理,那么在此建议大家养成一个习惯,不要所执行的文件(代码)打包到Azkaban的工程包里面。这样带来的好处是显而易见的,比如:

  • 工程创建的速度快,不需要上传执行部分文件

  • 避免了修改MySQL中的max_allow_packet参数以解决工程文件上传失败的问题

  • 在分布式布署环境中,当执行Task免去了在不同节点中拷贝工程包的麻烦

背景与介绍

在大数据繁杂的ETL或其它数据处理过程当中,有些任务是需要定时执行的,虽然Linux自带了cron命令功能,但是仍不能满足最大的一点就是它不能提供集中式的管理和可视化的编辑。其实在大数据的生态当中已集成有个定时调度框架Oozie,只是实践下来发现其学习成本不低,布署的过程也较复杂。在尝试过其它分布工调度框架后(如阿里的宙斯Zeus),还是选择了社区较多人使用的Azkaban

Azkaban3相对于上个版本所做的更改还是比较大的,感兴趣的话可以到其官方网站 Azkaban 了解下。接下来主要还是分享下Azkaban3的安装布署,下面是Azkaban3的系统架构设计图:

Azkaban-Install00

图中的3个组件便是Azkaban3的重要组成部分:

  • MySQL关系数据存储数据
  • Web Server GUI管理服务提供者
  • Executor Server 分布式节点服务布署

通常我们都是在本地用hexo deploy发布博客文章到远程的Pages服务器,可别忘记了我们是还需要提交代码的,所以是不是觉得有点麻烦还得分开两步进行操作。这时突然想起是否可用Travis CI工具来完成这个布署的操作呢?答案是肯定的,整体的流程大致如下:

  • 在本地(又或者Github网站)上编辑文章
  • 提交文章到Github服务器
  • Travis CI收到通知,同步最新的Github代码,并执行用户自定义好的Travis脚本生成静态博客
  • 最终再把生成好的博客推送到指定的Pages服务器

只是这其中有点比较麻烦的问题就是如何保护我们的私钥,还好Travis CI已经为我们准备好啦,那么就开始我们的捣腾之旅吧。

码好代码在测试环境做好测试后,满怀信心的去布署上线到生产环境,结果就是一堆的异常,具体查看了后发现是连接数据库的问题,异常信息如下:

1
2
3
4
(40532, 'Cannot open server "1433D" requested by the login.  
The login failed.DB-Lib error message 20018, severity 20:\n
General SQL Server error: Check messages from the SQL Server\n
DB-Lib error message 20002, severity 9:\nAdaptive Server connection failed\n')

在非Windows环境下去访问,连接 MSSQL 数据,本身就是件苦差事来的。自写Python程序以来在ORM方面都是使用pyxxx的模块,果不其然连接 MSSQL 也有个模块叫pymssql,只是实际使用中并不是特别的顺利。如笔者所处的环境就是如此,开发环境为OSX 10.11,发布环境为CentOS 6.4,按官方的安装步骤实行下来,Linux 环境是OK的,只是 Mac 环境下安装失败,错误的堆栈信息如下:

Hue is a Web applications that enables you to easily interact with an Hadoop cluster. Hue applications let you browse HDFS, Jobs, run Hive, Pig and Cloudera Impala queries, manage the Hive Metastore, HBase, Sqoop, ZooKeeper, MapReduce jobs, and create and schedule worklows with Oozie.

更加关于HUE的介绍及演示可访问其官方网站: http://gethue.com

在程序遇到问题需要DEBUG时,通过会增加一些**print**语句输出。于是乎按惯例也在Python的代码中加入print调试,然后输入python xxxx.py,满怀信心的期待着调试信息的满屏滚动,结果是过了好阵子才显示出来。为何会这样呢?

根据网友建议增加个-u参数就OK,后来查了下原因:Python在默认情况会先把print输出到缓冲中,待缓冲满或程序后才会输出。所以可以在运行Python程序时加入此参数是非常的有用。

今天在安装一个Python模块–>pymysql结果等待时间特别的长,最后超时失败啦,起初是以为是网络带宽问题,让IT调整后仍是失败,随后尝试查找国内的镜像,还有真人也遇到过相同的问题。镜像列表如下:

1
2
3
4
5
6
https://pypi.douban.com/simple/ 豆瓣
http://mirrors.aliyun.com/pypi/simple/ 阿里
http://pypi.hustunique.com/simple/ 华中理工大学
http://pypi.sdutlinux.org/simple/ 山东理工大学
http://pypi.mirrors.ustc.edu.cn/simple/ 中国科学技术大学
https://pypi.tuna.tsinghua.edu.cn/simple 清华

其实在Github Page上面也是混迹许久啦,虽然现在各种Blog网站层出不穷,但是作为IT界的程序猿还是喜欢自己动手捣鼓捣鼓,成功固然是欣喜失败也会不气妥。 Github Page刚出道时使用的是Jekyll,简单的解释其实就是一个静态化网站的工具,这不现在又兴起一个名为Hexo(**Nodejs**实现)的工具。两者的目标皆是一致的,只不过对比下来发现Hexo上手确实要容易些,加者它能轻松的在本地实现调试,故有想法想再次折腾一翻,构建个Hexo版本的个人博客。

介绍另一款静态网站工具 Gor ,它是鄙人一直崇拜的大拿 Wendal 的杰作,熟悉GO语言的朋友有可以关注下。