[IT技术] 大数据工程师的日常工作内容是干嘛?

[复制链接]
i163 发表于 2023-11-9 21:45:18|来自:北京 | 显示全部楼层 |阅读模式
现在在做Java开发,利用下班时间在自学大数据。想了解下大数据工程师的日常工作内容,好有所针对的学。目前Hadooop权威指南看了四遍,hive权威指南看了三遍了,内容好多,怕走弯路,希望在做大数据的工程师们给点信息
全部回复5 显示全部楼层
sexyrobto 发表于 2023-11-9 21:46:11|来自:北京 | 显示全部楼层
面试造火箭,工作拧螺丝,你千万不能以日常工作内容去准备你的面试,不然你会找不到工作的,因为大数据的日常工作和你面试完全不是一个等级,先说说我的日常工作吧
现在是上午十点零一分,我在公司吃着早餐,就一杯黑芝麻糊,听说能改善脱发,所以我先提前预防着


公司是九点半上班,来了之后先去厕所待个二十分钟,然后吃早饭,顺便刷刷知乎,再写写问答,就像这条回答一样
十点半正式开始工作,上午的时间是非常短暂的,一般十一点半就开始吃饭了,所以上午基本干不了活,开开会时间基本就没了。
下午两点正式进入紧张的工作中,大部分时间都是在思考,理解需求,考虑架构,这个时间占整个项目周期的70%,剩下时间是在开发,我离线和实时都做,离线的项目好做点,直接在公司的数据中台上做,写写sql即可,实时稍微复杂点,sql有时完成不了需求,需要写写代码
目前离线开发主要是hive,实时开发基本全部是flink了
如果让我招大数据工程师,我第一看中的不是技术,而是你有没有独立思考的能力,给你一个你毫不熟悉的项目,能不能快速理清业务逻辑,能不能将需求完整的复述一遍,因为这太重要了,我司目前招进来两个大数据初级,不知道是跨行业的原因,还是笨,需求始终理解的差那么一点,也可能是我们的业务比较复杂。但是需求理解不到位,技术在厉害也是没用
但是话又说回来,需求这东西你没办法提前复习啊,只有需求来了才知道要干什么,所以面试时只能考察技术及你的过往项目经历,通过你之前做的项目看你对这个项目的理解情况,这主要看和面试官有没有眼缘,没有具体标准,,因为每个人做的项目可能不一样,你项目中会的地方多说一点,不会的少说一点或者干脆不说,面试官感觉你说得好,你就有希望
但是技术是有标准的,问你某个技术点,你会就是会,不会就是不会
但是在学技术的时候要多思考,这个技术点为什么这样实现,有什么好处,多思考会让大脑越来越灵活,就比如Flink支持精准一次处理语义,但是大家深入思考下flink的精准处理是怎么实现的,有人说是通过两阶段提交协议实现的,对,是通过这个协议,那再深入思考下,这个协议的主要内容是什么,底层的算法是怎么实现的,这样一步步的向下思考,你就会发现一个新世界
具体的文章可以看这篇
Flink 端到端精准一次处理语义 Exactly-once<hr/>以上都是随便扯扯,大家随便看看就好,接下来说说大数据怎么学习,怎么面试
想学大数据或者说想入门大数据,技术肯定是第一重要的,不会大数据的技术谈什么大数据。那么大数据的技术怎么学,要知道大数据是依赖Java的,首先要保证Java得会
咱们从业务来说,一个项目一般包含:前端,后端,后后端,大数据属于后后端,是在项目开发完成之后有了数据之后才到大数据这一步
从上帝视角看张图:


大数据工作分为图上这几种,和后端接触的是ETL工程师,负责将数据拿到大数据平台,然后供数仓开发工程师使用,大数据开发负责大数据平台的建设,后面还有数据分析师,AI工程师等

  • 数仓工程师 (全称:数据仓库工程师)
    数仓工程师日常工作一般是不写代码的,主要以写 SQL 为主
    数仓工程师是大数据领域公司招聘较多的岗位,薪资也较高,需要重点关注!
    数据仓库分为离线数仓实时数仓,但是企业在招聘时大多要求两者都会,进入公司之后可能会专注于离线或实时其中之一。
    就目前来说,大多数的企业还是以离线数仓为主,不过未来趋势肯定是实时数仓为主,所以学习时,为了现在能找到工作,需要学习离线数仓,为了以后的发展,需要学习实时数仓。所以,离线和实时都是我们重点掌握的!
    需要掌握的技能:
    不管离线还是实时,重中之重就是SQL
    SQL 语法及调优一定要掌握,这里说的 SQL 包括 mysql 中的 sql,hive中的 hive sql,spark 中的 spark sql,flink 中 的 flink sql。
    在企业招聘的笔记及面试中,一般问的关于 sql 的问题主要是以 hive sql 为主,所以请重点关注!
    除 sql 外,还需要重点掌握以下技能,分为离线和实时
    离线数仓需要重点掌握的技能:


  • Hadoop(HDFS,MapReduce,YARN)
  • Hive(重点,包括hive底层原理,hive SQL及调优)
  • Spark(Spark 会用及了解底层原理)
  • Oozie(调度工具,会用即可)
  • 离线数仓建设(搭建数仓,数仓建模规范)
  • 维度建模(建模方式常用的有范式建模和维度建模,重点关注维度建模)
实时数仓需要重点掌握的技能:



    • Hadoop(这是大数据基础,不管离线和实时都必须掌握)
    • Kafka(重点,大数据领域中算是唯一的消息队列)
    • Flink(重中之重,这个不用说了,实时计算框架中绝对王者)
    • HBase(会使用,了解底层原理)
    • Druid(会用,了解底层原理)
    • 实时数仓架构(两种数仓架构:Lambda架构和Kappa架构)

2. 大数据开发工程师
数据开发工程师一般是以写代码为主,以 Java 和 Scala 为主。
大数据开发分两类,第一类是编写Hadoop、Spark、Flink 的应用程序,第二类是对大数据处理系统本身进行开发,如对开源框架的扩展开发,数据中台的开发等!
需要重点掌握的技能:



    • 语言:Java 和 Scala(语言以这两种为主,需要重点掌握)
    • Linux(需要对Linux有一定的理解)
    • Hadoop(需理解底层,能看懂源码)
    • Hive(会使用,能进行二次开发)
    • Spark(能进行开发。对源码有了解)
    • Kafka(会使用,理解底层原理)
    • Flink(能进行开发。对源码有了解)
    • HBase(理解底层原理)

通过以上技能,我们也能看出,数据开发和数仓开发的技能重复率较高,所以很多公司招聘时 大数据开发 和 数仓建设 分的没有这么细,数据开发包含了数仓的工作!
3. ETL工程师
ETL是三个单词的首字母,中文意思是抽取、转换、加载
从开始的图中也能看出,ETL工程师是对接业务和数据的交接点,所以需要处理上下游的关系
对于上游,需要经常跟业务系统的人打交道,所以要对业务系统比较熟悉。比如它们存在各种接口,不管是API级别还是数据库接口,这都需要ETL工程师非常了解。
其次是其下游,这意味着你要跟许多数据开发工程师师、数据科学家打交道。比如将准备好的数据(数据的清洗、整理、融合),交给下游的数据开发和数据科学家。
需要重点掌握的技能



    • 语言:Java/Python(会基础)
    • Shell脚本(需要对shell较为熟悉)
    • Linux(会用基本命令)
    • Kettle(需要掌握)
    • Sqoop(会用)
    • Flume(会用)
    • MySQL(熟悉)
    • Hive(熟悉)
    • HDFS(熟悉)
    • Oozie(任务调度框架会用其中一个即可,其他如 azkaban,airflow)

4. 数据分析工程师
在数据工程师准备好数据维护好数仓后,数据分析师就上场了。
分析师们会根据数据和业务情况,分析得出结论、制定业务策略或者建立模型,创造新的业务价值并支持业务高效运转。
同时数据分析师在后期还有数据爬虫、数据挖掘和算法工程师三个分支。
需要重点掌握的技能:



    • 数学知识(数学知识是数据分析师的基础知识,需要掌握统计学、线性代数等课程)
    • 编程语言(需要掌握PythonR语言)
    • 分析工具Excel是必须的,还需要掌握 Tableau 等可视化工具)
    • 数据敏感性(对数据要有一定的敏感性,看见数据就能想到它的用处,能带来哪些价值)


大数据学习路线

系统的学习大数据相关的课程,可按照如下顺序学习
需要先掌握 Java SE 阶段,Linux 基础命令,MySQL数据库
如果上述基础技能没有掌握,可网上搜索相关课程进行学习(这类基础课程网上免费的特别多)
Java只需要学习 Java SE 阶段即可
会在虚拟机中安装Linux发行版本(建议安装 CentOS),学完Linux基础即可。
MySQL需要学习 sql 语法,范式,事务等。
如果以上技能你都掌握的话,接下来就进入大数据框架
可按照如下顺序进行学习(涵盖ETL、数仓、开发等岗位)
hadoop -> zookeeper -> hive -> flume && sqoop -> azkaban && oozie -> 数仓建模理论+实践 -> hbase -> redis -> kafka -> elk -> scala -> spark -> kylin -> flink -> 实时数仓项目
以上为大数据学习必备知识!!!
学完以上技能后,有时间还需要学习比较流行的 OLAP 查询引擎
Impala 、 Presto、Druid 、 Kudu 、 ClickHouse 、 Doris
如果还有时间,可以学习数据治理相关的内容,如元数据管理,数据湖等
Atlas 、 Hudi
大数据面试:
全套大数据开发面试题库教程,包含大数据知识点复习,简历编写指导精挑细选的大数据技术书籍:
上百本优质大数据书籍下载,附必读清单(大数据宝藏)
lsh981688 发表于 2023-11-9 21:46:58|来自:北京 | 显示全部楼层
@JianJian 大佬的回答基本已经比较全了。在中小公司大数据开发可能需要兼任数据业务开发和Hadoop生态各组件的简易搭建,在中大型公司里分工就很细很深入了,为了便于理解我很粗略地把岗位分为两大类:数据业务开发和大数据平台开发
一、岗位介绍

(1)中大型公司里大数据技术人员绝大部分都是数据业务开发,也就是利用已经建好的大数据平台友好界面和Hive、Spark、Flink等组件的API编写业务需求逻辑(数据中台ETL、机器学习模型训练等),同时配合平台开发人员一起进行任务性能优化、数据资产治理、权限管控等
数据业务开发岗位是人员水平相对鱼龙混杂的一种,我也在数据业务开发部门呆过,最差和最好的数据业务开发差距非常大,比如我见过的素养最弱的业务开发对Hadoop、Spark等大数据组件的表层基本原理丝毫不了解,没有良好的代码书写素养和性能优化意识,写出的代码冗余复杂且性能也不够优化,经常会导致数据倾斜、OOM、性能慢等问题,却觉得是平台的锅。。遇到性能问题首先堆资源堆并发,但想不到优化代码与合理调参,也不知道怎么调合适,甚至不了解自己手头业务需求的数据量有多大。如果是这一种只知道如何完成业务需求,其他都不考虑的数据开发,基本就废了,出去面试问到一些原理层面的东西和性能优化经验就会碰壁
而厉害的数据业务开发有一个共同点,就是有主动学习心和性能优化意识。我做平台开发后遇到过一些用户,会认真了解自己业务需求的数据特性(例如哪些hive表字段里会有大量重复值导致数据倾斜)、有性能优化意识(如何避免过多连续join和复杂嵌套子查询导致性能低下等),甚至不满足于封装了所有复杂底层细节的数据开发图形化界面,会去了解甚至询问大数据平台实现的技术思路,这样懂得将业务需求与技术结合,懂得性能优化并且对技术原理有更深了解的业务开发,走到哪里都吃香,水平不亚于底层平台的源码开发
(2)只有中大型公司里才会有专职的大数据平台开发,小公司会网上博客参考一下Hadoop如何在Linux上搭建好后,就直接通过命令行提交任务跑数据业务了,高级一点加个crontab定时自动任务等,但也比较简陋,对中小公司来说业务需求先赚钱才是核心,不需要过于深入的优化和底层原理考虑。等公司体量大了需要长远考虑了,就会开始重视通用基础技术中台能力建设
而平台开发在我们公司分为两大类:
(a)基础平台开发。负责深入开源组件源码细节和复杂底层原理,对源码进行定制魔改与开发、跟进合入社区源码特性、集群建设、对通用高负载场景进行数据开发用户无感知的自动优化、SQL引擎根据特定条件自动切换等底层功能。
各大厂都会分享各自平台的表面实现思路,但是不会说细节实现(因为改源码和细节代码实现是自己的核心竞争力),源码细节原理层面网上资料也很少,大部分资料还停留在表面API上。各大厂对这个岗位的面试要求和薪资待遇是高于数据业务开发的,技术门槛和天花板较高,对于社区源码contributor(如Spark contributor)可以开到40K以上的薪资。
但是这种岗位的需求量远比数据业务开发少,人员流动相对较为稳定有自己的行业圈子,知识需要足够深入专精,也很低调应用层数据业务开发很少直接接触到他们,也不知道原来自己的代码实际执行时,是有被自动解析优化过的(涉及到编译原理等优化思路)。
(b)工具平台开发。负责开发开源组件所配套的友好图形界面工具以降低使用大数据技术的知识技能门槛、封装隐藏复杂底层实现细节、规范化与权限控制、资源与数据资产治理等,让业务数据开发人员避免被Hadoop等复杂底层细节知识困扰,专注于业务需求逻辑实现、提高业务需求开发效率和规范性。属于基础平台开发的兄弟部门,岗位需求量比基础平台开发多,比数据业务开发少
比如对于提交任务后如何在内部数据开发网页上看到任务的执行状态,他们会通过YARN源码中的状态机来实现。这个岗位更像是了解大数据原理知识的Java Web后端开发,将数据业务开发用到的各种前后端界面连接到底层Hadoop集群,并开发公司内部数据场景需要的其他工具界面、如HDFS服务化网页(这样就不需要每次都用命令行查文件)、数据血缘资产管理网页、小文件自动合并工具等。
二、岗位选择

在大厂,数据业务开发和平台开发都会有很大的成长空间和复杂技巧经验可以学(更大的数据量导致更高的代码性能要求、更复杂的业务需求场景等),但是对于业务量和复杂程度不那么大的公司来说,实事求是讲业务需求的技能门槛是不太高的,如果再加上有友好图形界面封装底层细节,需求多时间紧只想赶紧做完这个需求再做下一个的话,学到的东西会比较有限(亲身体会),这种情况下底层平台开发会是一个静下心认真钻研深层技术、沉淀基础知识(编译原理、设计模式、源码细节、JVM、社区与行业趋势等)的好选择。
比较出乎大家意料的是,阿里这种体量的公司,最赚钱的方面并不是淘宝等业务,而是阿里云平台。阿里云和其他大厂的底层平台架构部门,往往会用最核心精锐的力量去建设(底层基础不牢固应用层也会遭殃),只是底层部门的人很少出来抛头露面所以平时大家了解的不多,这些人其实一些已经财务自由,工资实际高于业务开发部门不少,面试难度也是地狱级别,只有少数技术深度很专精的人才进得去。
比如阿里和腾讯实现了10万个节点的Hadoop集群调度,实际上社区源码实现一点不改的话,调度到3000到4000个节点左右就已经开始出现明显的调度性能瓶颈问题,这两个大厂显然是已经把hadoop yarn源码魔改的已经完全不是yarn了才能实现。而这种源码魔改与定制能力,也是各大厂大数据平台的核心技术能力之一,是不会轻易公布的。
农夫三拳 发表于 2023-11-9 21:47:22|来自:北京 | 显示全部楼层
日常工作无他,三个而已:(警告:不要迷恋SQL)
一,有数据可看
二,可看的数据及时呈现
三,呈现完整可靠易解释的数据
一,有数据可看,要写SQL:

多是select 提取基于业务(日志,业务表)场景join的大表用 group by 多维度聚合加工后的数据结果集;

  • 搭建业务指南针数据报表体系
  • 多变活动的效果评估体系
  • 临时突发的数据提取
写的SQL要归档保存,目标少写SQL。
二,可看的数据及时呈现:

SQL任务-由于业务数据的增长,跑不动了,开始优化了:SQL优化,处理数据倾斜,一个大任务拆多个小任务,设置参数等等;实时数据开发-是提升数据时效性的关键技术。

  • 优化计算的复杂度
  • 分布式任务的均衡
  • 处理实时数据开发
多涉足一门技术,好好学习实时开发,提升自己的竞争力。
三,呈现完整可靠易解释的数据:

多维模型建设数据仓库:结合业务数据,组建维表与事实表星型数据仓库,数仓模型完整表达业务过程,数据可解释,帮助业务快速拿到想看的数据。

  • 完善事实表,覆盖常见业务过程。(完整性)
  • 完善维度模型,统一事实表的引用。(一致性)
  • 建设数据问题发现机制,及时主动发现数据问题。(正确性)
  • 提升模型易用性,为业务自建分析能力提供支持。(易用性)
做一件事容易,做出学问做出价值才是出彩点。

数据分析人员需要掌握sql到什么程度?
最后:愿每一个大数据开发,少写一点SQL,多学一门技术(实时开发),做出学问做出价值才是出彩点。
点赞的你,最出彩!!!
东德 发表于 2023-11-9 21:47:42|来自:北京 | 显示全部楼层
回答一波,刚写完SQL,来说说日常工作吧。大数据4年,3家公司,3份工作经历。


第一家公司:应用开发层面,离线数据清洗。写mapredcue实现ETL功能,使用flume采集日志数据,对不同业务的数据清进行清洗。这些业务数据包括flume采集的日志数据,如用户浏览网站信息、统计PV和UV,留存率等等;用户信息、用户消费、会员、积分等业务数据;python爬虫工程师指定网站爬取的数据。我平时工作就是对这些数据清洗,存到不同的库里。
第二家公司:应用开发层面,实时数据处理。这家主要做实时处理系统,spark、flink等,离开了离线数据清洗层面,主要处理实时业务系统。具体参考淘宝双11大屏功能,这也是最有意思的工作。数据人员会把数据清洗完成,我只要把这些数据接到kafka供sparkstreaming和flink消费进行下游任务开发就行。
第三家公司:写SQL,数据仓库开发。第三家也就是上图中,开始建设数据仓库,基本天天写sql,数据建模,建设数仓,偶尔碰碰代码写写UDF函数,那个激动、高兴啊。下一步实时数仓建设,我相信应该能用到代码了吧。
这只是主要的日常工作,如果你认为是这样就打错特错了。大数据不像前端、后端一样可能专注一个方面就行了,大数据是不行的。
第一家公司的集群是我搭建的,后续运维工作也是我来做的,数据分析也是我来做的。搭集群,搞运维,数据分析,出报表,做过相似度推荐系统。理论上一家大数据体系成熟的公司,集群和运维是不用我们大数据开发进行负责的,还有数据分析也是有专门的分析人员。我们只需要底层数据归一化就行。
第二家公司很好,我只做实时开发工作,跟后端一样,每天各种需求,ctrl+c,ctrl+v就行。不过实时开发真的很有意思。但是因为受不了政务这行的氛围,愤而离职。
第三家公司,也就是现在这件。主要做数据仓库开发工作,目前做了5个月不到,前期做数据迁移、建表、写sql汇总数据。期间做了一个规则相似度推荐系统。反正做的一系列工作都是围绕着数仓建设开展的。
忘记说了,一般电商很多公司不会单独招算法的,他们要做相似度推荐系统,需要我们大数据开发来做的,我们并不需要研究的太高深了,一般掌握相似度推荐算法就成了,其他算法我倒是没做过。
網絡被詐騙錢財 发表于 2023-11-9 21:48:01|来自:北京 | 显示全部楼层
1 写 SQL (很多入职一两年的大数据工程师主要的工作就是写 SQL )
2 为集群搭大数据环境(一般公司招大数据工程师环境都已经搭好了,公司内部会有现成的大数据平台,但我这边会私下搞一套测试环境,毕竟公司内部的大数据系统权限限制很多,严重影响开发效率)
3 维护大数据平台(这个应该是每个大数据工程师都做过的工作,或多或少会承担“运维”的工作)
4 数据迁移(有部分公司需要把数据从传统的数据库 Oracle、MySQL 等数据迁移到大数据集群中,这个是比较繁琐的工作,吃力不讨好)
5 应用迁移(有部分公司需要把应用从传统的数据库 Oracle、MySQL 等数据库的存储过程程序或者SQL脚本迁移到大数据平台上,这个过程也是非常繁琐的工作,无聊,高度重复且麻烦,吃力不讨好)
6 数据采集(采集日志数据、文件数据、接口数据,这个涉及到各种格式的转换,一般用得比较多的是 Flume 和 Logstash)
7 数据处理
7.1 离线数据处理(这个一般就是写写 SQL 然后扔到 Hive 中跑,其实和第一点有点重复了)
7.2 实时数据处理(这个涉及到消息队列,Kafka,Spark,Flink  这些,组件,一般就是 Flume 采集到数据发给 Kafka 然后 Spark 消费 Kafka 的数据进行处理)
8 数据可视化(这个我司是用 Spring Boot 连接后台数据与前端,前端用自己魔改的 echarts)
9 大数据平台开发(偏Java方向的,大概就是把开源的组件整合起来整成一个可用的大数据平台这样,常见的是各种难用的 PaaS 平台)
10 数据中台开发(中台需要支持接入各种数据源,把各种数据源清洗转换为可用的数据,然后再基于原始数据搭建起宽表层,一般为了节省开发成本和服务器资源,都是基于宽表层查询出业务数据)
11 搭建数据仓库(这里的数据仓库的搭建不是指 Hive ,Hive 是搭建数仓的工具,数仓搭建一般会分为三层 ODS、DW、DM 层,其中DW是最重要的,它又可以分为DWD,DWM,DWS,这个层级只是逻辑上的概念,类似于把表名按照层级区分开来的操作,分层的目的是防止开发数据应用的时候直接访问底层数据,可以减少资源,注意,减少资源开销是减少 内存 和 CPU 的开销,分层后磁盘占用会大大增加,磁盘不值钱所以没什么关系,分层可以使数据表的逻辑更加清晰,方便进一步的开发操作,如果分层没有做好会导致逻辑混乱,新来的员工难以接手业务,提高公司的运营成本,还有这个建数仓也分为建离线和实时的)

总之就是离不开写 SQL ...

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则