Aug 112020
 

最近在搞微软的Azure平台上的数据分析工具,这套工具,专门整合以前企业使用,以前企业在内部ETL,现在可以在云上进行ETL。确实是方便很多。我们都是在讨论数据湖要搞几个,开发,测试,生产都来一个。如果你是在自己数据中心,这是不可能讨论的话题。

Azure的ETL Cloud版本的工具集,名字是Data Factory。你基本就是在Azure的门户上完成所有的操作,包括写代码。

数据工厂的配置,其实就是一个Json文件。你做的配置,其实就是修改json文件。所以是有需求,把这些文件放到git来进行管理。

对于企业来说,肯定都是有开发,测试,生产,3套环境,或者至少2套环境。那么开发后的环境,如何部署到生产环境下呢。那么微软想到的通过Azure DevOps服务,实现CI CD。

这套东西的玩法,应该是最近一年,微软在狂推。和正常的开发流程的CI CD是有差异的地方,需要理解的地方。我这里整理一下,刚好今天Azure的pipeline服务挂掉了。导致只能写文章。

Azure的数据工厂,Azure Data Factory,我们简称ADF

devops

下面的工作就是把这个对着这个架构图来进行配置。

开发环境ADF

登录Azure,其实第一件事情就是

  1. 建立一个开发使用是资源组,RG
  2. 创建ADF,注意区域,git 后面配置就可以
  3. 在开发资源组里,创建一个存储,这可是data lake存储,一定要注意区域
  4. 创建key vault服务,注意区域,

需要注意的就是region,RG,资源组,是没有区域的概念。不过对于数据分析来说,肯定是要求相同的region。ADF,storage,key vault服务。

创建 Key vault的服务,有两个地方可以进行配置,这样可以后面运行的更加方便

  1. policy,设置上面刚刚创建的ADF,可以访问
  2. 创建访问存储的密钥名字,里面包含存储的访问密钥。后面会用到。

这里为了理想化,Dev,Test,Prod,使用不同的

  1. ADF
  2. Data Lake
  3.   Key Vault

为了安全,我们都独立的。

打开数据工厂,进行配置

连接服务

对于任何的数据工厂,基本是需要对接外面不同的服务,那么她至少是需要2个服务,

  1. Data Lake gen2 连接
  2. key vault 连接

key vault 是专门管理密钥。对企业来说,安全还是第一位,免得人家说三道四。

ADF默认连接到Data lake,是采用密码去连接的,所以这里改成key vault的连接,配置 Data Lake gen2 连接,采用key vault。上面已经配置,允许ADF访问key vault。这个时候,会很顺利。

Dataset

数据的格式,配置数据进入和输出的格式,这个地方,应该是比较复杂,对于我demo演示,倒是简单,copy数据,input和output,都是一样的。

Pipeline

pipeline,是核心,就是把数据处理的步骤用一条管道连接起来,目前是从Data lake获取数据,也是输出到Data Lake。

我就demo一个copy数据的例子,改天研究一下行列转换的例子,这样高大上不少。

对接Azure git

当你的ADF的demo可以完美的运行,后面的步骤就到了关键时刻。配置ADF连接Azure的DevOps。

连接上以后,其实需要理解的就是一个地方

你在ADF里,save,其实就是把配置save在master分支上。如果你publish,其实是把代码推送到ADF分支。

对于Azure认为,ADF分支,你可以理解是stable分支。ADF分支,其实是Azure帮你默认配置的。

如果你在ADF连接Azure git遇到麻烦,可以看这个地方,我确实也遇到了,

https://stackoverflow.com/questions/53102684/problem-setting-up-azure-datafactory-to-azure-devops-git

你是可以在ADF里,

  • 创建一个自己的分支,例如feature1,通过save保存到git的代码仓库里。
  • 创建一个merge request,merge到master,
  • publish,一定是直接把代码推到ADF stable版本。你是很可能直接吧feature 1的代码直接推送到ADF branch里的,这个要避免。

Azure DevOps

这是Azure提供的一个服务,算是以前微软的TFS改进版本,微软马上就要废掉TFS,2020的版本,本地部署的版本,可以实现和公有云的版本一致体验。

目前世纪互联的版本,还没开通。所以你就只能使用国际版本。用你国际账号,登录就可以。

Azure的DevOps,基本就是Jira+ Comfluence  + github. 整合起来给用户使用。

  1. 组织:对于个人来说,就是你的名字:chenshake
  2. 项目名字
  3. repo名字。对于大项目来说,一个可能会多个repo ,

Azure pipeline

对于开发人员或者用过DevOps平台的人,感觉有点怪怪,我如何提交代码?

对于ADF来说,你登录Azure的门户,进入ADF进行配置,这个时候,就是写代码,save,就是把代码提交到master分支里,publish,就是把你的代码merge 到stable版本里。

有代码了,我们一般来说,要编译一次,搞出一个制品库:Artifacts,然后拿着Artifacts去部署到生产环境或者测试环境。

对于ADF来说,代码都是json,配置文件。所谓的编译,制品库,据说copy文件夹而已。

流程上,我们要创建一条pipeline,把代码复制到制品库里。这就是build pipeline。

我们再创建一条release pipeline,就是把代码推送到测试环境或者生产环境。

对于ADF来说,release pipeline,需要做的工作,还是需要做一点有技术含量的工作。

我们是开发环境的Json文件,里面包含里不少开发环境的参数,我们需要替换成测试环境

  1. 资源组名字,DevRG,要改成QARG
  2. ADF名字,DevADF,要改成QAADF
  3. key vault 名字
  4. Data Lake名字
  5. 如果你对接数据库,数据库名字和密码

这时候,你就需要设置pipeline的变量,UAT,Prod,使用不同的变量来部署。

对于ADF的生产环境部署,Azure上,还是无法做到自动化,key vault创建 密钥名字,只能在图形化界面完成,目前是没有接口API。这个也是我目前发现的Azure服务,没API接口的。

我们可以利用powershell,通过pipeline去自动化创建

  1. 资源组
  2. Data lake
  3. key vault
  4. ADF

这些是一次性的工作,而且Azure上,也是无法做到全程自动化,所以这些我们都是提前手工创建好。Release pipeline所做的事情,其实是把这些服务,通过配置ADF,利用Json文件,配置起来。

微软很多服务名字要求是全局唯一,所以很多时候,你的服务名字要么加一串数字,要么就会面临名字重复,无法创建。

流程

这里就总结一下我对整个ADF的DevOps流程的理解

  1. 开发环境下的ADF,配置,save,保存到master分支,publish,推送到ADF分支
  2. 检测到ADF分支变化,触发Artifacts pipeline,上传一个制品库,就是把代码复制到一个目录下。
  3. 当制品库的pipeline完成后,触发release pipeline,利用pipeline的参数配置,对QA的资源组进行部署,实现QA环境的ADF正常工作
  4. 对于Prod,其实步骤和QA是一样,企业内部希望如何实现都是可以的。可以在QA完成部署后,马上部署Prod环境,也可以在QA测试完成后,手工去触发Prod环境的部署。

命名规范

Azure上的服务名字,有时候让人崩溃

  1. 有些服务,只能小写字母,不能用下横杠,
  2. 有些服务可以大小写,不能下横杠
  3. 有些服务大小写,下横杠都可以
  4. 有些服务要求全局唯一,有些是不要求
  5. 有些服务,你删掉后,重新创建,名字还不能相同,有软删除的功能,例如key vault服务。

所以建议大家,先搞一个Excel表格,把涉及的服务,名字都整理好。实际中,如果遇到重复,可以在名字后面加数字。你的服务名字,一般都加上公司名字,这样可以大幅减少重复概率。

愿景

data analysis 

dev

power-bi-cicd-1

对于Azure的DevOps服务,不仅仅是用在ADF,还能在Data bricks,就是Azure的Spark上,还能用在Power BI的报表开发上。

希望我可以有一天,通过DevOps,完成全部的Demo,从ADF,一直到PowerBI.

 Leave a Reply

(required)

(required)

This site uses Akismet to reduce spam. Learn how your comment data is processed.