7. 快一点吧 Spark
其实大家都已经发现Hive后台使用MapReduce作为执行引擎,实在是有点慢。Spark SQL 应运而生,它是用来弥补基于MapReduce处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。
特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。
你还需要:
掌握Spark的运行原理与架构,熟悉Spark的各种应用场景
掌握基于Spark RDD的各种算子的使用
掌握Spark Streaming针对流处理的底层原理
熟练应用Spark SQL对各种数据源处理
熟练掌握Spark机器学习算法库
达到能够在掌握Spark的各种组件的基础上,能够构建出大型的离线或实时的业务项目
是不是有些慌张,哈哈哈,慢慢学啊,Spark 超级重要!(;´д`)ゞ
-------> Spark SQL 系列专题
对了,别忘啦,此时你顺便需要熟悉(掌握)两门新语言了,惊喜吧!(ಥ _ ಥ)
-------> Python 基础系列专题
-------> Scala 基础系列专题
8. 数据传输 Kafka
这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来。
你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情,而不是你给的问题。ㄟ( ▔, ▔ )ㄏ
这时,使用Flume采集的数据,不是直接到HDFS上,而是先到Kafka,Kafka中的数据可以由多个消费者同时消费,其中一个消费者,就是将数据同步到HDFS上。
目前 Flume + Kafka,在实时流式日志的处理非常常见,后面再通过Spark Streaming等流式处理技术,就可完成日志的实时解析和应用。
-------> Kafka 系列专题 !!
如果你完成了上面的学习,此时,你的“大数据平台”应该是这样的(^∀^●)ノシ
从前面的学习,已经掌握了大数据平台中的数据采集、数据存储和计算、数据交换等大部分技能,而这其中的每一步,都需要一个任务(程序)来完成,各个任务之间又存在一定的依赖性,比如,必须等数据采集任务成功完成后,数据计算任务才能开始运行。如果一个任务执行失败,需要给开发运维人员发送告警,同时需要提供完整的日志来方便查错。
10. 任务调度 Oozie / Azkaban
不仅仅是分析任务,数据采集、数据交换同样是一个个的任务。这些任务中,有的是定时触发,有点则需要依赖其他任务来触发。当平台中有几百上千个任务需要维护和运行时候,仅仅靠crontab远远不够了,这时便需要一个调度监控系统来完成这件事。调度监控系统是整个数据平台的中枢系统,类似于AppMaster,负责分配和监控任务。
-------> Oozie 系列专题
-------> Azkaban 系列专题
你的“大数据平台”升级了 (ง •_•)ง!
11. 实时数据的处理 Flink / Spark Streaming
在前面讲Kafka的时候提到了一些需要实时指标的业务场景,实时基本可以分为绝对实时和准实时,绝对实时的延迟要求一般在毫秒级,准实时的延迟要求一般在秒、分钟级。
对于需要绝对实时的业务场景,用的比较多的是Storm,对于其他准实时的业务场景,可以是Storm,也可以是Spark Streaming,简单业务场景 Kafka Streams 也能搞定,当然现在最火的是Flink 。
是不是晕了,这么多流式处理框架,我该怎么选择呢?::>_<::
看这里:Storm vs. Kafka Streams vs. Spark Streaming vs. Flink ,流式处理框架一网打尽!
-------> Flink 系列专题
------->Spark Streaming 系列专题
你的“大数据平台”变得更加强大了 (●ˇ∀ˇ●)!
至此,你的大数据平台底层架构已经成型了,其中包括了数据采集、数据存储与计算(离线和实时)、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提供数据了。
12. 数据对外(支撑业务)
离线:比如,每天将前一天的数据提供到指定的数据源(DB、FILE、FTP)等;离线数据的提供可以采用Sqoop、DataX等离线数据交换工具。
实时:比如,在线网站的推荐系统,需要实时从数据平台中获取给用户的推荐数据,这种要求延时非常低(50毫秒以内)。
根据延时要求和实时数据的查询需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
分布式数据库HBase,这是Hadoop生态体系中的NOSQL数据库,它的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MySQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
了解MongoDB及其它分布式数据库技术,能够掌握分布式数据库原理、应用场景、HBase数据库的设计、操作等,能结合Hive等工具进行海量数据的存储于检索。
OLAP分析:OLAP除了要求底层的数据模型比较规范,另外,对查询的响应速度要求也越来越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的数据模型比较规模,那么Kylin是最好的选择。
即席查询:即席查询的数据比较随意,一般很难建立通用的数据模型,因此可能的方案有:Impala、Presto、SparkSQL。
这么多比较成熟的框架和方案,需要结合自己的业务需求及数据平台技术架构,选择合适的。原则只有一个:越简单越稳定的,就是最好的。
-------> HBase 系列专题
-------> MongoDB 系列专题
-------> Redis 系列专题
基于上述技术栈,你已经能完成一个大数据平台通用架构了,独当一面或许就是你吧 !
吨吨吨 ( ̄y▽, ̄)╭ !
有些没提到的,我还在学,哈哈哈 (真的让人头秃啊 X﹏X)!
13. 机器学习 Spark MlLib
在我们的业务中,遇到的能用机器学习解决的问题大概这么三类:
分类问题:包括二分类和多分类,二分类就是解决了预测的问题,就像预测一封邮件是否垃圾邮件;多分类解决的是文本的分类;
聚类问题:从用户搜索过的关键词,对用户进行大概的归类。
推荐问题:根据用户的历史浏览和点击行为进行相关推荐。
大多数行业,使用机器学习解决的,也就是这几类问题。
入门学习线路:
数学基础(这里就要求数学好一点啦 =。=)
机器学习实战(Machine Learning in Action),前面学的Python派上用场了
Spark MlLib提供了一些封装好的算法,以及特征处理、特征选择的方法
机器学习确实牛逼高大上,也是我学习的目标。
至此,可以把机器学习部分也加进你的“大数据平台”了。
-------> Python 基础系列专题
-------> Spark MLlib 系列专题
四、大数据下的数仓体系架构
数据仓库是从业务角度出发的一种数据组织形式,它是大数据应用和数据中台的基础。数仓系统一般采用下图所示的分层结构。
按照这种分层方式,我们的开发重心就在dwd层,就是明细数据层,这里主要是一些宽表,存储的还是明细数据;到了dws层,我们就会针对不同的维度,对数据进行聚合了,按道理说,dws层算是集市层,这里一般按照主题进行划分,属于维度建模的范畴;ads就是偏应用层,各种报表的输出了。
-------> 数仓分层架构 系列专题
-------> 数仓理论相关 系列专题
五、学习指南
首页,收下一本看书学习指南
-------> 大数据开发工程师的成长之道 (整理自知乎)
其次,阿里云大数据 ACA 和 ACP (两个是阿里云的大数据认证,值得一考!)
-------> 阿里云大数据开发实践 系列专题 (又名我在阿里云的大数据开发之路 )
下面,是我用阿里云的大数据开发组件设计的一套系统架构图和数仓分层模型图(具体的设计思路,有机会我会和大家再细说) 。
到这里,得强烈推荐阿里的这本书,《大数据之路:阿里巴巴大数据实践》 !精华大作啊!!
然后,看下前辈整理的大数据开源框架学习指南(很详细,我偷懒不想画了つ﹏⊂)
写在最后,毕竟博主入行也就两年时间。然后对于一些小伙伴的问题,我尽量,针对不同的人给一些不同的建议。
对应届生
个人觉得应届生应该打好基础,大学本科一般都会开设数据结构,算法基础,操作系统,编译原理,计算机网络等课程。这些课程一定要好好学,基础扎实了学其他东西问题都不大,而且好多大公司面试都会问这些东西。如果你准备从事IT行业,这些东西对你会很有帮助。
至于学什么语言,我觉得对大数据行业来说,Java还是比较多。有时间有兴趣的话可以学学Scala,这个语言写Spark比较棒。
集群环境一定要搭起来。有条件的话可以搭一个小的分布式集群,没条件的可以在自己电脑上装个虚拟机然后搭一个伪分布式的集群。一来能帮助你充分认识Hadoop,而来可以在上面做点实际的东西。你所有踩得坑都是你宝贵的财富。
然后就可以试着写一些数据计算中常见的去重,排序,表关联等操作。
然后我有个小伙伴,今年某211大数据专业毕业,刚来杭州实习两周就上线了两个数仓的任务了,我奉他为( ﹁ ﹁ ) ~→最强实习生(他和我得瑟,比他早来的实习生还在打杂…),哈哈哈。
对有工作经验想转行的
主要考察三个方面,一是基础,二是学习能力,三是解决问题的能力。
基础很好考察,给几道笔试题做完基本上就知道什么水平了。
学习能力还是非常重要的,毕竟写Javaweb和写Mapreduce还是不一样的。大数据处理技术目前都有好多种,而且企业用的时候也不单单使用一种,再一个行业发展比较快,要时刻学习新的东西并用到实践中。
解决问题的能力在什么时候都比较重要,数据开发中尤为重要,我们同常会遇到很多数据问题,比如说最后产生的BI数据对不上,一般来说一份最终的数据往往来源于很多原始数据,中间又经过了N多处理。要求你对数据敏感,并能把握问题的本质,追根溯源,在尽可能短的时间里解决问题。
基础知识好加强,换工作前两周复习一下就行。学习能力和解决问题的能力就要在平时的工作中多锻炼。社招的最低要求就上面三点,如果你平日还自学了一些大数据方面的东西,都是很好的加分项。
以上是个人的一些经历和见解,希望能帮到你 (๑•̀ㅂ•́)و✧。