从BAT大数据工程师那里总结的大数据学习方法
点击蓝字
关注我
什么是大数据?
可能有人会说写字楼的所有人的资料信息就是个大数据。NO!这里的数据只能说比较大,但却不能称之为大数据。百度百科上给出了很明确的解释“大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。”
大数据技术的战略意义不在于掌握庞大的数据信息,而在于对这些含有意义的数据进行专业化处理。换而言之,如果把大数据比作一种产业,那么这种产业实现盈利的关键,在于提高对数据的“加工能力”,通过“加工”实现数据的“增值”。
现在我们“从相认到相识”,清楚的认识什么是大数据,如何区分大数据和数据大,是我们学习大数据走的第一步。
怎么开始学
拥有了“第一砖”后就是你即将选择师门的时候了,敲开山门的“第二砖”则是学习大数据的基础,就如同在门派中修炼内功,有助你行走江湖,话不多说我们来看看会涉及到哪些基础技术吧!
No.1
Java
以Java语言为基础掌握面向对象编程思想所涉及的知识,以及面向对象编程,然后主流的SSM、Spring Boot等开源框架最好也能掌握。
No.2
MySQL
MySQL数据库掌握关系型数据库的原理,主要是各种复杂SQL语句的编写,这会对后面学Hive数仓的HQL起到事半功倍的效果。
No.3
Linux
因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解Hadoop、Hive、HBase、Spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会Shell就能看懂脚本这样能更容易理解和配置大数据集群。
No.4
Hadoop 技术
这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapReduce和Yarn。
HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapReduce是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Yarn是体现Hadoop平台概念的重要组件有了它大数据生态体系的其它软件就能在Hadoop上运行了,这样就能更好的利用HDFS大存储的优势和节省更多的资源,比如我们就不用再单独建一个Spark的集群了,让它直接跑在现有的HadoopYarn上面就可以了。
Hadoop是我们大数据学习过程中的第一道坎,所以这里我就先拓展开来讲一下 ( •̀ ω •́ )✧后面技术栈的学习大家可以照此办理!
4.1 学会百度与Google
不论遇到什么问题,先试试搜索并自己解决。Google首选,翻不过去的,就用百度吧。
4.2 参考资料首选官方文档
特别是对于入门来说,官方文档永远是首选文档。相信搞这块的大多是文化人,英文凑合就行,实在看不下去的,请参考第一步。
4.3 先让Hadoop跑起来
Hadoop可以算是大数据存储和计算的开山鼻祖,现在大多开源的大数据框架都依赖Hadoop或者与它能很好的兼容。
关于Hadoop,你至少需要搞清楚以下是什么:
Hadoop 1.0、Hadoop 2.0 MapReduce、HDFS NameNode、ResourceManager、NodeManager等等。
自己搭建Hadoop,请使用第一步和第二步,能让它跑起来就行。建议先使用安装包命令行安装,不要使用管理工具安装。另外:Hadoop1.0知道它就行了,现在都用Hadoop 2.0。
4.4 试试使用Hadoop
HDFS目录操作命令;上传、下载文件命令;提交运行MapReduce示例程序;打开Hadoop WEB界面,查看Job运行状态,查看Job运行日志。知道Hadoop的系统日志在哪里。
4.5 你该了解它们的原理了
MapReduce:如何分而治之;HDFS:数据到底在哪里,什么是副本;Yarn到底是什么,它能干什么;NameNode到底在干些什么;ResourceManager到底在干些什么;
4.6 自己写一个MapReduce程序
请仿照WordCount例子,自己写一个(照抄也行)WordCount程序,打包并提交到Hadoop运行。你不会Java?Shell、Python都可以。如果你认真完成了以上几步,恭喜你,你的一只脚已经进来了。
上述完整技术栈的学习可以去我的博客
你想要的我都有哦( •̀ ω •́ )✧
No.5
数据仓库 Hive
这个东西对于会SQL语法的程序猿来说简直就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapReduce程序。
通过前面的学习,我们已经了解到了,HDFS是Hadoop提供的分布式存储框架,它可以用来存储海量数据,MapReduce是Hadoop提供的分布式计算框架,它可以用来统计和分析HDFS上的海量数据,而Hive则是SQL On Hadoop,Hive提供了SQL接口,开发人员只需要编写简单易上手的SQL语句,Hive负责把SQL翻译成MapReduce,提交运行。
简单点来说就是,Hive的底层是MapReduce,你只要写HQL(和SQL差不了多少)就完事了!Σ(っ °Д °;)っ
此时
你的“大数据平台”是这样的 ( •̀ ω •́ )✧
No.6
数据采集 Sqoop / Flume / DataX
Sqoop主要用于把MySQL里的数据导入到Hadoop里的。当然你也可以不用这个,直接把MySQL数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意MySQL的压力。
Flume是一个分布式的海量日志采集和传输框架,因为“采集和传输框架”,所以它并不适合关系型数据库的数据采集和传输。
Flume可以实时的从网络协议、消息系统、文件系统采集日志,并传输到HDFS上。因此,如果业务有这些数据源的数据,并且需要实时的采集,那么就应该考虑使用Flume。
阿里开源的DataX也非常好用,有兴趣的可以研究和使用一下。
如果你完成了上面的学习
你的“大数据平台”长这样(^∀^●)ノシ
No.7
快一点吧 Spark
其实大家都已经发现Hive后台使用MapReduce作为执行引擎,实在是有点慢。Spark SQL 应运而生,它是用来弥补基于MapReduce处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。
特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。
你还需要:
1.掌握Spark的运行原理与架构,熟悉Spark的各种应用场景
2.掌握基于Spark RDD的各种算子的使用
3.掌握Spark Streaming针对流处理的底层原理
4.熟练应用Spark SQL对各种数据源处理
5.掌握Spark机器学习算法库
达到能够在掌握Spark的各种组件的基础上,能够构建出大型的离线或实时的业务项目
是不是有些慌张,哈哈哈,慢慢学
Spark 很重要 (;´д`)ゞ
No.8
数据传输 Kafka / Datahub
这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来。
你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情,而不是你给的问题。ㄟ( ▔, ▔ )ㄏ
这时,使用Flume采集的数据,不是直接到HDFS上,而是先到Kafka,Kafka中的数据可以由多个消费者同时消费,其中一个消费者,就是将数据同步到HDFS上。
目前 Flume + Kafka,在实时流式日志的处理非常常见,后面再通过Spark Streaming等流式处理技术,就可完成日志的实时解析和应用。
如果你搞定了数据传输
你的“大数据平台”当是这样(^∀^●)ノシ
从前面的学习,已经掌握了大数据平台中的数据采集、数据存储和计算、数据交换等大部分技能,而这其中的每一步,都需要一个任务(程序)来完成,各个任务之间又存在一定的依赖性,比如,必须等数据采集任务成功完成后,数据计算任务才能开始运行。如果一个任务执行失败,需要给开发运维人员发送告警,同时需要提供完整的日志来方便查错。
No.9
任务调度 Oozie / Azkaban
不仅仅是分析任务,数据采集、数据交换同样是一个个的任务。这些任务中,有的是定时触发,有点则需要依赖其他任务来触发。
当平台中有几百上千个任务需要维护和运行时候,仅仅靠crontab远远不够了,这时便需要一个调度监控系统来完成这件事。调度监控系统是整个数据平台的中枢系统,类似于AppMaster,负责分配和监控任务。
你的“大数据平台”升级了 (ง •_•)ง!
No.10
实时数据的处理 Flink
在前面讲Kafka的时候提到了一些需要实时指标的业务场景,实时基本可以分为绝对实时和准实时,绝对实时的延迟要求一般在毫秒级,准实时的延迟要求一般在秒、分钟级。
对于需要绝对实时的业务场景,用的比较多的是Storm,对于其他准实时的业务场景,可以是Storm,也可以是Spark Streaming,简单业务场景 Kafka Streams 也能搞定,当然现在最火的是Flink 。
是不是晕了,这么多流式处理框架,我该怎么选择呢?
掌握了实时流技术
你的“大数据平台”也变得更加强大了 (●ˇ∀ˇ●)
至此,你的大数据平台底层架构已经成型了,其中包括了数据采集、数据存储与计算(离线和实时)、数据同步、任务调度与监控这几大模块。接下来是时候考虑如何更好的对外提供数据了。
No.11
数据对外(支撑业务)
离线:比如,每天将前一天的数据提供到指定的数据源(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。
这么多比较成熟的框架和方案,需要结合自己的业务需求及数据平台技术架构,选择合适的。原则只有一个:越简单越稳定的,就是最好的。
基于上述技术栈
你已经能完成一个大数据平台通用架构了!
有些没提到的
我还在(真的让人头秃啊 X﹏X)!
No.12
机器学习 Spark MlLib
在我们的业务中,遇到的能用机器学习解决的问题大概这么三类:
1.分类问题:包括二分类和多分类,二分类就是解决了预测的问题,就像预测一封邮件是否垃圾邮件;多分类解决的是文本的分类;
2.聚类问题:从用户搜索过的关键词,对用户进行大概的归类。
3.推荐问题:根据用户的历史浏览和点击行为进行相关推荐。大多数行业,使用机器学习解决的,也就是这几类问题。
入门学习线路:
1.数学基础(这里就要求数学好一点啦 )
2.机器学习实战(Machine Learning in Action)
3.Spark MlLib提供了一些封装好的算法,以及特征处理、特征选择的方法
4.机器学习确实牛逼高大上,也是我学习的目标。
至此,可以把机器学习部分也加进你的“大数据平台”了。
以上是个人的一些经历和见解,希望能对大数据有兴趣的朋友一种启发式作用,方法的学习还需要在有兴趣的基础上继续专研。
大数据是一门技术,技术的学习中会有很枯燥的时候,坚持下去,你的成就感就会慢慢生成,接下来的大数据学习便趣味横生,得心应手啦!
我是「云祁」,一枚热爱技术、会写诗的大数据开发猿,Love&Peace!
扫二维码,关注我们
微信号 : Y-erro
CSDN:@云 祁