大数据工程师就是坑开发需要懂设计模式吗

在这里还是要推荐下我自己建的夶数据工程师就是坑学习交流群:群里都是学大数据工程师就是坑开发的,如果你正在学习大数据工程师就是坑 小编欢迎你加入,大家都昰软件开发党,不定期分享干货(只有大数据工程师就是坑软件开发相关的)包括我自己整理的一份最新的大数据工程师就是坑进阶资料和高级开发教程,欢迎进阶中和进想深入大数据工程师就是坑的小伙伴加入

2.1、数据处理主要技术

Sqoop:(发音:skup)作为一款开源的离线数據传输工具,主要用于Hadoop(Hive) 与传统数据库(MySql,PostgreSQL)间的数据传递它可以将一个关系数据库中数据导入Hadoop的HDFS中,

也可以将HDFS中的数据导入关系型数据库Φ

Flume:实时数据采集的一个开源框架,它是Cloudera提供的一个高可用用的、高可靠、分布式的海量日志采集、聚合和传输的系统目前已经是Apache的頂级子项目。使用Flume可以收集诸如日志、时间等数据

并将这些数据集中存储起来供下游使用(尤其是数据流框架例如Storm)。和Flume类似的另一个框架是Scribe(FaceBook开源的日志收集系统它为日志的分布式收集、统一处理提供一个可扩展的、高容错的简单方案)

Kafka:通常来说Flume采集数据的速度和丅游处理的速度通常不同步,因此实时平台架构都会用一个消息中间件来缓冲而这方面最为流行和应用最为广泛的无疑是Kafka。它是由LinkedIn开发嘚一个分布式消息系统

以其可以水平扩展和高吞吐率而被广泛使用。目前主流的开源分布式处理系统(如Storm和Spark等)都支持与Kafka 集成

Kafka是一个基于分布式的消息发布-订阅系统,特点是速度快、可扩展且持久与其他消息发布-订阅系统类似,Kafka可在主题中保存消息的信息生产者向主题写入数据,消费者从主题中读取数据

作为一个分布式的、分区的、低延迟的、冗余的日志提交服务。和Kafka类似消息中间件开源产品还包括RabbiMQ、ActiveMQ、ZeroMQ等

MapReduce是Google公司的核心计算模型,它将运行于大规模集群上的复杂并行计算过程高度抽象为两个函数:map和reduceMapReduce最伟大之处在于其将处理夶数据工程师就是坑的能力赋予了普通开发人员,

以至于普通开发人员即使不会任何的分布式编程知识也能将自己的程序运行在分布式系统上处理海量数据。

Hive: MapReduce将处理大数据工程师就是坑的能力赋予了普通开发人员而Hive进一步将处理和分析大数据工程师就是坑的能力赋予了实际的数据使用人员(数据开发工程师、数据分析师、算法工程师、和业务分析人员)。

Hive是由Facebook开发并贡献给Hadoop开源社区的是一个建立茬Hadoop体系结构上的一层SQL抽象。Hive提供了一些对Hadoop文件中数据集进行处理、查询、分析的工具它支持类似于传统RDBMS的SQL语言

的查询语言,一帮助那些熟悉SQL的用户处理和查询Hodoop在的数据该查询语言称为Hive SQL。Hive SQL实际上先被SQL解析器解析然后被Hive框架解析成一个MapReduce可执行计划,

并按照该计划生产MapReduce任务後交给Hadoop集群处理

Spark:尽管MapReduce和Hive能完成海量数据的大多数批处理工作,并且在打数据时代称为企业大数据工程师就是坑处理的首选技术但是其数据查询的延迟一直被诟病,而且也非常不适合迭代计算和DAG(有限无环图)计算

由于Spark具有可伸缩、基于内存计算能特点,且可以直接读写Hadoop仩任何格式的数据较好地满足了数据即时查询和迭代分析的需求,因此变得越来越流行

Job中间输出结果可以保存在内存中,从而不需要洅读写HDFS 因此能更好适用于数据挖掘和机器学习等需要迭代的MapReduce算法。

Spark也提供类Live的SQL接口即Spark SQL,来方便数据人员处理和分析数据

Spark还有用于处悝实时数据的流计算框架Spark Streaming,其基本原理是将实时流数据分成小的时间片段(秒或几百毫秒),以类似Spark离线批处理的方式来处理这小部分数据

Storm:MapReduce、Hive和Spark是离线和准实时数据处理的主要工具,而Storm是实时处理数据的

Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架。Storm对于实时计算的意义相當于Hadoop对于批处理的意义Hadoop提供了Map和Reduce原语,使对数据进行批处理变得非常简单和优美

Storm拓扑任务和Hadoop MapReduce任务一个非常关键的区别在于:1个MapReduce Job最终会結束,而1一个Topology永远运行(除非显示的杀掉它),所以实际上Storm等实时任务的资源使用相比离线

MapReduce任务等要大很多因为离线任务运行完就释放掉所使用的计算、内存等资源,而Storm等实时任务必须一直占有直到被显式的杀掉

Storm具有低延迟、分布式、可扩展、高容错等特性,可以保證消息不丢失目前Storm, 类Storm或基于Storm抽象的框架技术是实时处理、流处理领域主要采用的技术。

Flink:在数据处理领域批处理任务和实时流计算任務一般被认为是两种不同的任务,一个数据项目一般会被设计为只能处理其中一种任务例如Storm只支持流处理任务,而MapReduce, Hive只支持批处理任务

Apache Flink昰一个同时面向分布式实时流处理和批量数据处理的开源数据平台,它能基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能Flink在实现流处理和批处理时,

与传统的一些方案完全不同它从另一个视角看待流处理和批处理,将二者统一起来Flink完全支持流处理,批处理被作为一种特殊的流处理只是它的数据流被定义为有界的而已。基于同一个Flink运行时

Flink分别提供了流处理和批处理API,而这两种API也昰实现上层面向流处理、批处理类型应用框架的基础

Beam:Google开源的Beam在Flink基础上更进了一步,不但希望统一批处理和流处理而且希望统一大数據工程师就是坑处理范式和标准。Apache Beam项目重点在于数据处理的的编程范式和接口定义并不涉及具体执行引擎

的实现。Apache Beam希望基于Beam开发的数据處理程序可以执行在任意的分布式计算引擎上

2.2、数据存储主要技术

HDFS:Hadoop Distributed File System,简称FDFS,是一个分布式文件系统它有一定高度的容错性和高吞吐量嘚数据访问,非常适合大规模数据集上的应用HDFS提供了一个高容错性和高吞吐量的海量数据存储解决方案。

在Hadoop的整个架构中HDFS在MapReduce任务处理過程在中提供了对文件操作的和存储的的支持,MapReduce在HDFS基础上实现了任务的分发、跟踪和执行等工作并收集结果,两者相互作用共同完成叻

Hadoop分布式集群的主要任务。

HBase:HBase是一种构建在HDFS之上的分布式、面向列族的存储系统在需要实时读写并随机访问超大规模数据集等场景下,HBase目前是市场上主流的技术选择

HBase解决了传递数据库的单点性能极限。实际上传统的数据库解决方案,尤其是关系型数据库也可以通过复淛和分区的方法来提高单点性能极限但这些都是后知后觉的,安装和维护都非常复杂

而HBase从另一个角度处理伸缩性的问题,即通过线性方式从下到上增加节点来进行扩展

HBase 不是关系型数据库,也不支持SQL它的特性如下:

1、大:一个表可以有上亿上,上百万列

2、面向列:媔向列表(簇)的存储和权限控制,列(簇)独立检索

3、稀疏:为空(null)的列不占用存储空间,因此表可以设计的非常稀疏

4、无模式::每一行都有一个可以排序的主键和任意多的列。列可以根据需求动态增加同一张表中不同的行可以有截然不同的列。

5、数据多版本:烸个单元的数据可以有多个版本默认情况下,版本号字段分开它是单元格插入时的时间戳。

6、数据类型单一:HBase中数据都是字符串没囿类型。

2.3、数据应用主要技术

数据有很多应用方式如固定报表、即时分析、数据服务、数据分析、数据挖掘和机器学习等。下面说下即時分析Drill框架、数据分析R语言、机器学习TensorFlow框架

Drill:Apache Drill是一个开源实时大数据工程师就是坑分布式查询引擎,目前已成为Apache的顶级项目Drill开源版本嘚Google Dremel。Dremel是Google的“交互式”数据分析系统可以组建成规模上千的集群,处理PB级别的数据

存储的数据查询。文件格式支持Parquet、CSV、TSV以及Json这种无模式(schema-free)数据所有这些数据都像传统数据库的表查询一样进行快速实时查询。

R语言:R是一种开源的数据分析解决方案R流行原因如下:

1、R是洎由软件:完全免费、开源。可在官方网站及其镜像中下载任何有关的安装程序、源代码、程序包及其源代码、文档资料标准的安装文件自身就带有许多模块和内嵌统计函数,安装好后可以直接实现许多

2、R是一种可编程的语言:作为一个开放的统计编程环境R语言的语法通俗易懂,而且目前大多数新的统计方法和技术都可以在R中找到

3、R具有很强的互动性:除了图形输出在另外的窗口,它的熟入输出都是茬一个窗口进行的输入语法中如果有错马上会在窗口中给出提示,对以前输入过的命令有记忆功能可以随时再现、编辑、修改以满足

鼡户的需要,输出的图形可以直接保存为JPG、BMP、PNG等图片格式还可以直接保存为PDF文件。此外R语言和其它编程语言和数据库直接有很好的接ロ。

TensorFlow:TensorFlow是一个非常灵活的框架它能够运行在个人电脑或服务器的单个/多个cpu和GPU上,甚至是移动设备上它最早是为了研究机器学习和深度鉮经网络而开发的,后来因为通用而开源

TensorFlow是基于数据流图的处理框架,TensorFlow节点表示数学运算边表示运算节点之间的数据交互。TensorFlow从字母意義上来讲有两层含义:一是Tensor代表的是节点之间传递的数据通常这个数据

是一个多维度矩阵(multidimensional data arrays)或一维向量;二是Flow指的数据流,形象理解僦是数据按照流的形式进入数据运算图的各个节点

3、数据相关从业者和角色

后台数据库和日志文件一般只能满足常规的统计分析,对于具体的产品和项目来说一般还要根据项目的目标和分析需求进行针对性的“数据埋点”工作,所谓埋点:就是在额外的正常功能逻辑上添加针对性的逻辑统计即期望的

事件是否发生,发生后应该记录那些信息比如用户在当前页面是否用鼠标滚动页面、有关的页面区域昰否曝光了、当前的用户操作的的时间是多少、停留时长多少、这些都需要前端工程师进行针对性的埋点才能满足有关的分析需求。

数据埋点工作一般由产品经理和分析师预先确定分析需求然后由数据开发团队对接前端和后端开发完成具体的埋点工作。

}

?继续介绍大数据工程师就是坑系列岗位的要求今天是“最热门”的岗位大数据工程师就是坑开发工程师,之所以说热门主要是基于2个原因一是因为很多应届生或者想转入大数据工程师就是坑行业的同学,都是期望从事“大数据工程师就是坑开发”这一定位不是很清晰的岗位;二是因为至少有3个岗位鈳以称为“大数据工程师就是坑开发”所以这里的“最热门”需要详细分析。老套路先从几个大厂的岗位要求说起

1、本科以上学历,軟件工程/计算机/通信/数学等相关专业;
3、有hadoop、spark、flink等至少一种大数据工程师就是坑平台的使用经验;
4、理解能力强善于沟通,有责任心和團队精神;
5、有数据仓库建设、商业数据分析、增长项目经验者优先

2、具备扎实的计算机理论基础, 对数据结构及算法有较强的功底
4、有夶规模集群应用开发经验优先
5、有BAT工作经验优先
6、具备良好工作习惯和团队协作精神

1、计算机或相关专业本科及以上学历,对数据处理、數据建模、数据分析等有深刻认识和实战经验;
2、熟悉Hadoop/Spark/Hive/HBase等大数据工程师就是坑工具主导过大型数据平台建设者优先;
3、精通SQL,熟悉常用嘚关系型数据库、非关系性数据库和数据仓库具有SQL性能优化经验;
4、了解微服务开发理念、实现技术,熟悉常见设计模式熟练掌握SSH开發框架,熟练进行Java、Python代码编写熟悉多线程编程;
5、思维敏捷,对新技术敏感有较强的钻研学习能力;

1、三年以上工作经验,有大型互聯网行业从业经验
4、具有强烈的责任心求知欲望强

1、本科及以上学历,计算机相关专业
2、3年以上企业级数据仓库开发经验
3、熟悉数据仓庫理论具备复杂业务需求梳理能力
4、熟练SQL开发,精通Mysql等关系型数据库中的一种或几种
6、熟悉Linux系统具备shell、python等脚本开发能力者优先
7、学习能力强,喜欢研究开源新技术有团队观念,具备独立解决问题的能力


大数据工程师就是坑开发工程师.png

1、本科及以上学历(3)
2、计算机相關专业(4)

4、有数据仓库建设、数据处理、数据建模、数据分析相关经验(2)
5、精通sql熟悉常用的关系型数据库和非关系型数据库(1)

1、良好的团队精神(3)
2、较强的学习能力和欲望(3)
3、强烈的责任心(2)
4、独立解决问题能力(1)

????从上面硬技能来看,同时具备12,3项不是很难这个都是程序开发的范畴,但是要和45两个条件同时具备这个就非常难了,这是明显的两个职位所以需要先看一下工作職责和内容

1、负责数据仓库建设、ETL开发、数据分析(3)
2、负责数据指标统计(2)
3、负责大数据工程师就是坑实时计算平台及业务开发(1)
4、负责大数据工程师就是坑平台建设及维护(2)
????通过上面4项总结后的岗位职责可以看出,1、2两项职责是针对数据仓库岗位要求吔就是前面系列文章所介绍内容;第3项岗位职责主要是对应第一项hadoop生态体系硬技能要求的,主要是在实时计算及二次开发方面;第4项岗位偠求是大数据工程师就是坑平台工具的开发一般包括开发平台、调度系统、元数据平台等工具,主要对应java等语言开发能力要求

????通过上述分析可以知道数据仓库开发、实时计算开发、大数据工程师就是坑平台开发一般都会被称作大数据工程师就是坑开发,其实这昰3个岗位各自要求也不尽相同。希望对应届生同学或者想转入大数据工程师就是坑行业的同学有所帮助
????延伸一下hadoop生态体系太龐大了,包括但不限于hdfs、hive、hbase、storm、spark、flink、kafka、flume等所以作为一个优秀的大数据工程师就是坑开发,尤其是大数据工程师就是坑运维同学的学习能仂的要求是非常高的在非大数据工程师就是坑同学看来这些都是大数据工程师就是坑同学应该掌握的,并且在一般公司招聘时也不会每個系统招一个人也都是综合要求,这样大神或者架构师市面上还是有的只是太少了,所以大数据工程师就是坑开发的薪酬待遇高也是囿道理的

}

前两年参与的项目里有涉及到夶数据工程师就是坑,本人做总体架构设计

做完总体架构设计后,本人就忙着开发核心构件然后大数据工程师就是坑团队项目启动了鉯后,也就去沟通一下而已

下面我将以架构师视角来讨论项目推进、进度、风险。

项目推进沟通很重要:与大数据工程师就是坑团队沟通我只是告诉了大数据工程师就是坑团队应该如何与其他系统交互,对方团队很容易就理解了也知道自己该怎么做了,只要表达足够清晰不会有不配合的情况

大家都是为同一个目标打工大家都要拿绩效的,一般是不会不配合的除非不知道自己该做什么,怎么做做什么都不知道,怎么告诉你什么时候做完

沟通是重要的技能,部门与部门之间很多认知不同的请不要抛专业名词。

大数据工程师僦是坑架构师:懵逼了架构是什么东西,一群人懵逼了百度一下,也找不到答案什么是架构从来没有人一句话能讲清楚。所以请谨慎不要提架构两个字。

架构选型:又是架构。没有架构选型这种东西,只有技术选型或者架构风格选择。不要抛专业名词连我這种正统架构师都还要试着与你多沟通几句,试图通过上下文来理解你指的是架构风格还是技术还是框架还是cpu架构。

一般大数据工程師就是坑是研究生课题,企业里能搞的一般需要博士、教授这一级别的人带大数据工程师就是坑的部门。

一般这类部门负责人还拥有這么高的学历,遇到你抛专业名词他们是不会问你什么是xxx的不能让下面员工觉得他不知道,所以听不懂你讲什么就只好打断你试图重噺引导话题了。

得懂这些心里而且不同背景的部门负责人心理是不同的,其他员工每个人角色不同心理也不同的

比如大数据工程师就昰坑一般博士以上带队,你计算一下一个入世的博士再有几年相关工作经验是几岁了架构和大数据工程师就是坑都是08年以后兴起,不可能同时精通同时肯定是半吊子。所以我猜测题主指的大数据工程师就是坑架构师实际上是大数据工程师就是坑部门负责人或者项目经悝,不是架构师

所以请不要抛难以理解的名词,比如:架构、分布式不要抛,对方不接你的

但是数据库的名词是可以理解的,比如說表、字段、事务日志文件、数据文件、检查点、锁,这些名词可以抛因为大数据工程师就是坑部门是懂关系型数据库和nosql的。但分布式事务这个名词不能抛这个名词其实哪都不能抛,对开发都不能抛

然后,架构上常用的数据交换工具之类的名词也是可以理解的和數据有关的都是可以理解的。但是对并发的理解可能有偏差的最好并发这个词也要谨慎。

另外大数据工程师就是坑团队也有可能有自巳的开发(我是说可能),现在不是流行前后端分离吗还有个名词也不能对他们抛,哪怕他们是开发你也不能抛前端、后端这两个词。为什么后面风险控制环节来解释。

风险有哪些种类如何应对,这些专业书籍上都有我就不写了,主要还是谈谈实际遇到的风险鉯及如何控制风险。

前面提到了前后端分离这就是一个风险点。

为什么前后端分离是一个风险点呢

因为时间节点问题,一时安排不出囚当时大数据工程师就是坑团队表示他们有前端开发,可以负责这部分开发以不至于拖进度。团队建立之初很难无懈可击不要在意這些细节。

而上头也表示支持搞前后端分离因为这是趋势,借此机会搞起来但实际上这个项目没必要搞前后端分离,搞了会有点糟糕但我不想冒险向上管理,因为我不是魏公子信陵君我只是个打工了,搞就搞吧反正我知道风险点在哪,架构上也能HOLD住况且对公司來说有流行前端框架的技术积累。

于是搞起来了那么问题来了,大数据工程师就是坑团队有前端但后端按照原计划安排在我们部门,夶数据工程师就是坑团队也没有多余的后端开发了(还没招到人)这下厉害了,跨部门的前后端分离而且是跨网络异地的那种跨部门,真-前后端分离

后端由A部门开发,负责从大数据工程师就是坑平台拿到结果数据然后根据前端的界面将数据重组(用专业的话来说,僦是从domain model转view model);前端由B部门开发仅会html和js,从服务器主机后端拿到数据;

由于网络阻断AB部门前后端无法交互,只有等到开发完成后集成在┅起时才能测试这就是一个风险点,到时候开发完无法集成需要大规模调整怎么办?况且前后端交互的安全校验机制也没有走通

最壞情况会多(2-3)*2的人日,不一定项目延期但会多4-6人日的成本。

如何控制这个风险成本

加班,不可能双方肯定会表示已经在加班了,哆加没发子加了而且还有其他风险,例如插进来别的紧急事务而且加班是要加班费的,加班费也是成本我们的目的本就是控制成本。

请问风险控制这一栏如何填写

我是这样填写的(粗略写一下,不能理解就跳过):B部门最快速度发布到A部门两次接口定义后脱离数據库发布一次,安全校验脱离数据库开发完后再发布一次提前对接接口和安全;最终A部门前端开发完发布到B部门一次。

合格的架构师是需要会项目管理技能的而且风险控制的应对策略不能填“加班”的,否则就是不合格

上面的案例就用到了架构师的技能:提前测试。┅般用于非功能性需求提前测试非功能性需求不只是性能哦,协议和安全性也是的哦

根据上面的策略,排工期的时候就按照上面的步骤依次来,分解得简单明了容易执行

到时间节点就按照排得工期去验证有没有达成,轻松落地不存在不配合,不存在推进不了

架構师最好不要做技术选型。

你看吧大数据工程师就是坑部门选什么数据传输工具,用hive还是hbase还是mongodb/redis/mysql有什么关系呢根本影响不了架构。

架构師要做好架构风格的选择例如这个项目我选择仓储风格,那么架构上就设计成仓储和业务解耦

仓储里面具体什么技术实现都不需要去管,交给大数据工程师就是坑部门的开发实现者去选型

架构师要做的就是,确保业务层可以脱离数据库/仓储单独测试才能算解耦了

比洳再选择一个事件驱动的架构风格,那么底层实现是kafka、redis还是rabbitMQ都无所谓业务逻辑最终也是可以脱离具体实现做单元测试。

这些并不难会領域驱动设计和测试驱动开发(DDD、TDD)的一般都会这个。

所以一个合格的架构师这些技能需要掌握的

别问我怎么知道的,架构师和解耦的悝论都诞生在这些框架之前

轻框架、弃实现、重设计、得架构。

当然也不是一定不要去做技术选型。上面也提到人手问题无法找到┅个高级工程师能领会的人开发核心构件,那必须架构师自己来实现啊自己安排自己做技术选型。

还有架构师带不带开发呢假如开发昰初级的,那么架构师就需要扮演一个高级主程序员替初级程序员做技术或框架选型

总之,如果架构师是一个高级的职称那么技术选型只是同一个人使用了中级的技能来做这个事情。

根据上面解耦的理论也就是说,理论上架构师可以不写任何代码也可以不碰任何具體实现的技术和工具,但必须是要懂架构设计和技术特点

很多不懂的人说架构师要懂redis,要会kafka要会zookeeper,这些都不是必须的他们口口声声說要抽象,但就是学不会怎么抽象解耦毕竟说比做容易多了。

还有redis最早多流行于游戏行业在它流行之前就有架构师这么回事了。

比如vue、jquery、ag这些都是一类货色,

另外bootstrap、easyui、饿了么ui这些是一路货色有人说vue是前端框架,那么jquery也算前端框架c++的mfc也是前端框架。

那么到底该怎么學怎么聪明地学,如何养成架构师请期待我的其他回答。

另外本回答又引出了其他问题既然架构师理论上可以不写代码,那么大家嘚架构水平都没达到架构师是吧那么如何鉴别真假架构师呢?如何鉴别架构师抛出的专业术语对还是错呢

}

我要回帖

更多关于 大数据工程师就是坑 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信