为了方便大家梳理清楚大数据学习路线,本文从以下四个方面来介绍大数据技术: 大数据技术栈 大数据发展史 大数据应用 大数据开发岗位
之前有同事问我怎么转大数据开发,他在网上搜了一堆大数据相关的技术,但是不知道从哪里开始入门,也不知道要学习哪些技术,这些技术栈之间的关系是什么。我一开始转大数据的时候也有点懵逼,整体接触了一遍之后才把大数据技术栈给弄明白了。
做大数据开发,无非要干四件事情,采集、存储、查询、计算。此外,一些开发必备的基础语言能力是需要的。我按照这几个维度,对大数据常见技术栈做了下划分。
基础能力 java不用说,当今世界使用最广泛的语言,做程序员基本必会的,而且大数据生态很多组建都是通过java开发的。python通常用在爬虫,数据分析,机器学习上,部分大数据组件是python开发的,例如airflow。scala底层还是java,由于spark是scala开发的,且scala也集成了很多spark的算子,所以scala一般用在spark开发上。
数据采集 一般通过filebeat,logstash,kafka,flume做日志采集。一些应用系统的数据,也会通过kafka或者binlog的方式同步到大数据组件做存储。
数据存储 这里的数据存储引擎和传统的关系型数据库有很大的区别。常见分布式存储文件系统有hdfs。此外,对于一些非结构化的数据会通过nosql的方式做存储,常见的nosql存储组件有hbase,redis。
数据查询 常见的有hive、spark sql、presto、kylin、impala、durid、clickhouse、greeplum,每个组件都有自己的查询特性和使用场景。这里不展开篇幅详细介绍了,后面慢慢聊。
数据计算 常见的计算方式有流计算和批处理,按实效性又分离线计算和实时计算。对应的计算组件有storm,spark stream,flink。
其它 分布式协调器:大数据组件为了提高可靠性通常是分布式存储的,这样就涉及到各个组件之间的协调同步。最常见的协调器就是zookeeper。 资源管理器:为了提高计算能力,会对计算资源(CPU,内存,磁盘)做分配,常见的组件有yarn,mesos。 调度管理器:调度管理器管理任务何时执行,周期执行,是否重试等。常见的有airflow,dalphine schduler,oozie,azkaban。
学习一门技术,知道会用已经够了,至少能解决问题。但是要想走得更远,还是需要知道一门技术的发展历史,通过发展史可以更深刻的理解为何会产生这门技术,它背后这样设计的原有,它的使用场景。
大数据技术的起源 大数据最早是起源于google。大家都知道google主要是提供网页检索服务,而这项服务依赖两个能力:网页的收集,索引的构建。有了这两个能力,我们才能通过检索服务搜索到互联网上的网页。这些网页和索引都需要大量的存储和计算能力。为了提高这两个能力,谷歌发表了三篇重要的论文。 2003年,分布式文件系统GFS。 2004年,大数据分布式计算框架MapReduce。 2006年,NoSql数据库系统。 这三篇论文奠定了大数据技术的基础。
Hadoop技术 受谷歌论文启发,2004年7月Doug和Mike Cafarella在Nutch(Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取、索引、查询等功能)中实现了类似于GFS的功能,也就是HDFS的前身。2005年2月,Mike Cafarella在Nutch中实现了MapReduce的最初版本。GFS和MapReduce作为hadoop前身,2006年hadoop从Nutch项目中分离出来,贡献给了Apache,至此成为Apache顶级项目。
Yahoo的Pig 2006年,为了让MapReduce技术更好使用,雅虎对MapReduce技术做了封装,开发了一套通过类似于SQL脚本查询的工具Pig,使用Pig写SQL会自动转换成MapReduce来执行,大大优化了MapReduce的使用难度。
Facebook的Hive 2007年,facebook对查询方式做了进一步优化,开发出了一套可以直接使用SQL的工具做大数据查询-HIVE,只要懂得SQL的开发人员都能使用这个组件。
Powerset的HBASE 2007年Powerset的工作人员,通过google的论文开发出了BigTable的java版本,即HBASE。2008年HBASE贡献给了Apache。
Spark的产生 2009年,UC伯克利里面的研究员在使用MapReduce做实验项目时,性能无法满足需求。于是着手开始设计spark,基于内存计算的spark性能要远远高于spark
推荐领域:电商购物,猜你喜欢。信息流方面,像头条文章推荐,抖音视频推荐。
风控:仿电信诈骗,黄赌毒识别,反洗钱等等。
医疗:通过用户一些医疗信息做疾病的识别。
智慧城市:自动驾驶,智慧物流,城市交通管理等等。
基础组件开发:需要扎实的java或者C++语言能力,对大数据组件有独到认知,能对大数据组件结合公司业务场景做二次封装。
大数据应用开发:开发一些大数据工具,比如标签管理系统,元数据管理系统,埋点系统,爬虫系统等。需要具备扎实的java或者python能力,能熟练使用大数据相关组件。
数仓工程师:一般都是做一些BI报表的开发,数据治理。精通SQL,精通常见的数仓模型。
算法工程师:精通常见机器学习算法,能熟练使用大数据组件。结合公司的业务场景灵活的使用算法能力赋能。