20

如何成为一个合格的数据架构师?

 4 years ago
source link: https://www.infoq.cn/article/pNocNvQxkPZEZZfdLfiJ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

写在前面

早在 1980 年,未来学家阿尔文·托夫勒就在《第三次浪潮》中,将大数据比喻为“第三次浪潮的华彩乐章”。

21 世纪以来,数据量进入每两年翻一番的增长期,越来越多人意识到了数据的价值,数据架构师闪亮登场。 数据成为企业不可忽视的重要资产。而数据架构师则是企业数据资产最重要的“奠基者”。

最早,数据架构师在 IOE 上工作;

2009 年,阿里云最早提出“去 IOE”的口号,初代数据架构师革了自己的命;

2015 年,这一年产生的数据量是人类过去历史上所产生数据量的总和,从此进入了指数级增长阶段。数据架构师也演化出了 2 个大方向(平台型数据架构师、数仓型数据架构师)。

本文以作者亲历视角,主要分享数仓型数据架构师的“修炼大法”。欢迎辩证看待、留言交流。

你想成为哪种数据架构师

目前数据架构师有两个大的方向:一,偏平台的架构师,对开源技术要求较高,企业一般会要求读过开源技术源码,或者参与过开源项目,偏平台的构建;二,偏数仓的架构师,对 SQL 能力要求较高,企业一般会要求掌握数仓理论,有数仓项目经验。

(1)平台型数据架构师

这个方向也会分类:一,开源派,互联网公司一般喜欢这个流派,二,商用软件派,如 Oracle、IBM 等流派,通常解决传统企业的数据问题。这个流派目前受到了来自阿里、腾讯和华为较大的冲击。个人认为目前开源派是比较符合近年潮流趋势的。

平台型数据架构师,是为数仓型数据架构师服务的,直白地说,你开发能力要很牛逼,你要懂应用。

(2)数仓型数据架构师

这个方向要求精通数据仓库原理,通过实时、离线等技术解决企业的数据问题。需要掌握 ELT 的流程,掌握各种数据源的特点,掌握大数据工具的使用。

数仓型数据架构师,刚好是平台型数据架构师的用户。直白地说,你写 SQL 的能力要牛逼,你要懂业务。

数据架构师的必备知识树

敲门砖:掌握一门开发语言

如果你是一位计算机专业的学生,我推荐使用 C 语言,强烈建议通过面向对象的编程思想去消化数据结构。数据架构中,很多逻辑和原理都来自于数据结构这门课程,如链表、队列、堆栈、树、图等,掌握数据结构对后续进一步学习非常的重要。

如果你是想从其他岗位转数据架构师,那么更建议学习 Java,Java 的入门会相对简单。当然最好的方式是通过 Java 的编程思想领会数据结构这本书的知识点。一定要模拟 B/C 的整个过程,不要立马就用 Java 的高级框架,而是要用 Java 原生的 servlet 模拟下前端和后端的交互,后端和数据库的交互。

初学者看文章,常会遇到很多新概念,觉得看不懂,记不住。 最好的学习方法是让自己有兴趣、有成就感。 所以理论的内容我建议慢慢消化,反而实际操作很重要——实际操作能给自己带来成就感。

比如你初学 Java,你第一个目标是要在屏幕上打出“Hello, world! ”。网上会有很多的资料,会教你安装 JDK、IDE 工具等等,你可以先不管那么多,找个偏基础的资料,按部就班的实现一次。在整个过程中你会遇到很多的问题,JDK 在哪里下载,版本选哪一个,环境变量如何配置等等。最好的方式是边查边做,通过亲手实践来验证整个过程,再去理解。最终成功地打印出“Hello, world! ”,你会有前所未有的成就感!

数据结构这门课程确实有些难度,同样建议采用边学理论边实践的方法,甚至我们可以更“暴力”,直接在网上找几段别人写好的代码,跑一遍,看看效果,读懂代码,再回过来理解概念。这时候你会感觉就像近视眼戴上了眼镜,突然发现很清晰。

你还需要了解开发语言的分类:什么是低级语言,什么是高级语言?什么是面向过程的编程,什么是面向对象的编程?什么是编译型语言,什么是解释型语言?可以不深入,但是作为一个架构师,你要了解这些东西。最好也要了解设计模型,如单例模式、工厂模式、生产者模式等常用设计模型,对思维方式有很好的提升。

开发语言是成为一名合格数据架构师的敲门砖。你可以选一本不错的书,结合书籍一步一步走。自学时,知识检索能力很重要,你要慢慢学会在浩瀚的互联网学海中查找自己想要的知识。有条件的同学也可以报个靠谱的培训班,这是个不错的选择,会少走很多弯路。但是速成后很多人只能做个码农,最终要成为架构师级别的高手,还是需要扎实的基本功是必须的。需要很长的路才能成为架构师级别的编程高手。所以如果想有更高的成就,必须对概念、原理、技术。

基本功:掌握一种数据库

对于数据架构师,必须要掌握一种数据库,同时要了解常见的数据库。

建议通过 Oracle 来学习数据库,安装系统时选择 Linux,也可以选 CentOS。第一步你要模拟操作系统,也就会接触到虚拟机的概念。简单来说,也就是第一步模拟 Linux 系统,第二步再安装数据库。

为什么推荐 Oracle 数据库?因为 Oracle 的安装过程相对比较复杂,在过程中你会遇到各种各样的问题,遇到的问题越多,学习的就越多。整个过程中你要学习 Linux 系统的各种命令、网络、补丁包、防火墙等一系列问题,最后通过客户端可以访问数据库了,可以查看数据了,就会很有成就感。如果领悟能力和动手能力很好,这个步骤一般需要一周左右的时间去消化。但这只是第一步,记得一定要多装几次来加深理解。

后面就要开始学习 SQL 语句了,建表、插入、更改、查询,操作起来吧!理论也要跟上,“事务”的概念一定要看,数据库、实例名、表空间、段、块等概念要理解。

当然也要学习如何优化数据库。数据库底层无非是硬盘、内存、CPU 在支撑,所以这些资源怎么分配很重要,在测试时一定要留意这三个重要参数的变化。操作系统层面的优化就是为了让操作系统和数据库软件更好地结合,可以去调系统的参数。这是统一的优化思想,后面的应用系统、大数据等技术也适用。

数据库层面的优化,也是一样的道理,留意、调整参数,原则就是“集中有限的资源做更多重要的事”。

基于数据的优化,我建议尽可能少消耗计算机的性能:硬盘的读写、网络的传输、数据的计算。如分表分区,索引等等都是为了用尽可能少的资源,尽可能快地完成尽可能多的事:就是提高效率。当然有的时候我们会牺牲时间换空间,也会牺牲空间换时间,所以对于优化,我们要综合考虑成本和效率的问题。

SQL 调优中,执行计划是必须要会看的,每个数据库或者引擎都有自己的规则,我们优化过程中要了解 SQL 的执行逻辑,这样我们才知道如何优化。

要了解哪些数据库呢?关系型数据库中 Oracle、MySQL、SQLServer、DB2、PostgreSQL 是要去了解的,同时了解行存储和列存储的区别,当然了解越多越好。NoSQL 数据库的话,建议了解 MongoDB、HBase、Redis。

其他数据库还很多,通过项目和 ELT 过程来熟悉更多的架构吧!

必杀技:大数据技术

大数据解决了什么问题?其实答案很简单:分布式存储和分布式计算。

所以,学习大数据最好的方式就是搭建一套开源的 Hadoop 集群,在上面操作 HDFS、hive、spark、HBase 等各种组件。

搭建的过程和 Oracle 安装过程非常类似,我们首先可以通过虚拟机模拟 3-5 个节点(服务器),在服务器上进行安装。

安装过程不再一一赘述,给大家一个实践场景:

1、实践场景

需求描述:从 mysql 数据库把两张表导入到 hadoop,然后通过 hive 进行计算,结果数据同步回 mysql 数据库。

可能遇到的问题:同步工具的选择,数据加载方式,转化方式,如何把整个流程串联起来,怎么启动这个流程。

(1)同步工具的选择

待选的同步工具有 Sqoop 和 DataX,Sqoop 还是 Hadoop 开源的工具,DataX 是阿里开源的工具,各有各的优势,建议都可以学习了解。

(2)数据加载方式

hive 的底层是 HDFS,简单说就是个文件,hive 只是映射过去,通过类 SQL 语言实现计算。你可以直接通过 hive 接口(三种方式)建内部表。Sqoop 和 DataX 都支持直接同步到 hive 中。

(3)转化方式

这是模拟过程,hive 不支持存储、不支持 update,所以可以进行两张表数据聚合(left join、group by 等)后数据插入到另一张表中,再把数据同步回 mysql。

(4)流程如何串起来

建议可以通过 Linux 的 shell 脚本进行串联,数据同步 - 数据转化 - 数据导出。

(5)如何启动流程

所有任务封装到 sh 脚本里,可以利用 Linux 的 crontab 进行定时调度。

2、划下重点

为了更好应对大数据面试,最好能系统地学习一下 HDFS、MapReduce、Hive、Spark、HBase、Yarn、Kafka、Zookeeper 等一系列的大数据组件。

大数据面试中经常会问到的问题有哪些?

问题常常会包括 HiveSQL 技巧和调优:

Hive 技巧:内部表和外部表、分区、分桶、窗口函数、UDF(UDAF、UDTF)、行转列、列转行等。

优化问题:数据热点(数据倾斜问题)、参数优化、业务分表、sql 优化。因为 Hive 底层是 MapReduce 操作 HDFS,所以要了解 Map 和 Reduce 阶段在做什么?数据倾斜问题是数据分布不均导致的,和 MapReduce 原理息息相关,了解了 MapReduce,你就会优化 Hive 了。

Spark 计算引擎和 Hive 底层不一样,Spark 学习你会遇到 DAG 图,RDD、内存、Scala 语言等知识,一样地学习优化思路和技巧。

HBase 是个列族数据库,通过 Key-value 方式进行数据存储,学习方式同上。

Yarn 是资源管理器,CPU、内存资源都是它来管理的,平台架构师要深入学习,数仓架构师可以稍作了解。

Kafka 是消息队列,主要用于数据通道,进行数据缓冲和技术解耦使用。

Zookeeper 是管理所有大数据组件的,因为 hadoop 生态圈组件都是动物名字命名的,所以 Zookeeper 就是动物管理员,依此进行命名的。

3、深入看看

其实大数据技术主要解决分布式计算和分布式存储,简单的说就是可以进行弹性扩展,存储资源无限扩展,计算资源无限扩展。这样就可以解决小型机和一体机无法解决的计算和存储问题。

解决这两个问题,我们需要一个操作系统来支持,这就是分布式操作系统。(这个核心思想最早是 Google 为了解决自己的问题提出来,后续 apache 进行开源提出了 HDFS。)

资源怎么协调引出了 Yarn,消息队列提出 Kafka,离线计算 Hive,内存计算 Spark(不完全靠内存)、交互式查询 impala、多维分析 kylin 等等,因篇幅有限,每个类型只列举一个。

必杀技 2:数据仓库

1、初步学习

初步接触数据仓库时,建议先看维度模型,了解什么是事实表,什么是维度表。做一张事实表,定义哪些是维度、哪些是度量,然后通过 SQL 进行查询。

有了基本概念后,可以再学习深一些的内容,例如星型模型、雪花模型。

FVjmaeR.png!web

戳上图看天启关于数据模型的详解

再进阶,则可以学习维度建模:选择业务过程 - 声明粒度 - 确定维度 - 确定事实,如果能亲身参与一个项目就更好了。

2、步入设计

首先要了解数据仓库的分层、每一层做什么,为什么要分层?

然后,了解事实表的类型(事务、周期快照、累计快照)、维度表的类型(普通维度、缓慢变化维度)、总线矩阵、数据立方体(cube)等。

3、高阶学习

维度建模实践后,发现维度建模的不足,那么是时候可以开始研究其他建模了。建议通读并理解 Inmon 大师的范式建模(数据仓库之父 Bill Inmon, Building the Data Warehouse)和 Kimball 大师的维度建模,两者的建模各有优劣,可以取长补短。

4、解决业务问题

数据模型最终解决的是业务问题,目前常见的建模以维度建模为主,但是维度建模不停的在变化, Bill Inmon 提出了 datavault 的建模思想,数据仓库、数据平台、数据中台、数据湖等概念层出不穷。本质不变,目标还是解决实际的业务问题。

我个人建议,我们数据仓库的规划可以自顶向下,采用 Inmon 的思想,开发和建模规范也要考虑全局,而在实施中可以采用维度建模,自底向上,采用 Kimbal 思想,落地快,迭代快。实际解决问题时不拘泥于一个模型,什么模型合适就用什么模型。

5、阿里的创新

阿里基于维度建模提出了公共模型层概念,一定程度上能解决数据共享和重复建设的问题,OneData 的理念非常有研究价值。但在应用中我们需要注意,不要一味的用相同的场景做法去套不同行业,在实践中需要辩证看待,按需去用。

6、模型标准

数据模型没有好坏,只有用得对错。判断的标准也很简单,有没有解决业务问题?更高的要求是有没有驱动业务的变革或者创新。大白话来说就是两个问题:挣到钱了吗?省下钱了吗?

必杀技 3:ELT 技术

1、ELT 概念

传统的 ETL (Extract-Transform-Load)是把 T 的部分放在中间的, 在大数据环境下我们更愿意把 T 放在后面,从 ETL 向 ELT 进行演变。 原因也很简单, 这样我们可以充分利用大数据环境 T 的能力 。数据开发也平台化了,例如阿里的 DataWorks、Dataphin,将数据同步、清洗转化、任务调度集成在一起。

2、ELT 技术注意哪些

E(Extract,抽取)和 L(Load,装载)的优化需要懂源头和目标数据库(数据仓库)的特点,需要根据情况进行优化。T(Transform,转化)部分要理解底层技术原理,进行优化。

ELT 的注意点总结如下:

(1)时效性

必须在规定时间内跑完数据,跑出结果;

(2)准确性

数据计算结果必须准确;

(3)容错性

ELT 可以支持重跑、补数等功能;

(4)前瞻性

及时告警和预警功能,提前处理问题。

加分项:应用系统

一个应用系统是怎么诞生的?可以通过软件工程这门课程学习,需求分析、概要设计、详细设计、软件开发、软件测试、试运行、上线、运维、下线等整个过程。

一个应用系统一般会有前端、后端和数据库,对于我们数据架构师,我们至少要知道,怎么开发一个系统,怎么保证一个系统的稳定。特别是“稳定”,我们要对高可用、负载均衡、安全有深刻的认识,需要考虑到应用(Tomat)、数据库(MySQL)、其他中间件(缓存服务、文件服务等)。

  • 高可用:系统一个节点发生故障后能进行无感切换,这个很重要。
  • 负载均衡:使压力均衡进行,它决定了系统的扩展性。
  • 安全:磁盘阵列(raid0、raid1、raid5、raid10)、防火墙、授权、认证,及数据安全,防泄防篡、脱敏加密、防丢失等。

在做架构决策时,知道哪些操作可能会影响业务系统,才能设计更好的数据架构。

锦上添花:算法

DT 时代已至,未来一定是“数据 +AI”的天下。所以作为数据架构师,我们可以不会写算法,但我们要了解且会使用算法。

这里的算法主要指机器学习算法,初学者可以理解下预测、分类(聚类)的概念(其实很多图像和语音识别的算法也可以归为预测和聚类算法中)。

可以用 Python 模拟最简单的线性回归,进阶则研究逻辑回归。

  • 监督学习算法:支持向量机 (Support Vector Machine,SVM)、决策树、朴素贝叶斯分类、K- 临近算法(KNN);
  • 非监督学习算法:K- 均值聚类 (K-Means) 。优点是算法简单容易实现,缺点则是可能收敛到局部最小值,在大规模数据集上收敛较慢。可在图像处理、数据分析以及市场研究等场景应用;
  • 强化学习(深度)算法:如果不想转职算法工程师,目前仅作了解即可。

最后分享算法开发的简化版步骤:

  1. 数据准备(数据同步);
  2. 问题明确(明确分类还是回归问题);
  3. 数据处理(合并、去重、异常剔除);
  4. 特征工程(训练集,测试集、验证集);
  5. 选择合适的算法;
  6. 模型评估(若评估不合格,则考虑:①换算法;②调参数;③特征工程再进一步处理)。

总结:建立属于自己的知识索引

其实,无论是什么岗位,自学能力都很重要。我们可以为自己建立一个知识目录或知识索引,按照知识索引去查漏补缺,不断丰富自己。

作为一名数据架构师,我们要懂点硬件、懂点网络、懂点安全,了解应用,熟练掌握一门开发语言,深入理解一个数据库,实操过大数据,精通数据仓库技术(建模 +ELT),有深度,有广度。

作者介绍

天启,奇点云高级数据架构专家,原海尔集团数据架构师、原阿里巴巴政务团队数据架构师。精通数据仓库建模理论及数据开发技术,具备零售、政务、医药、制造等多个领域数仓和数据中台建设经验。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK