大数据学习之路(跟着大神学习一波)
前言:
一、背景介绍
二、大数据介绍
正文:
一、大数据相关的工作介绍
二、大数据工程师的技能要求
三、大数据学习规划
四、持续学习资源推荐(书籍,博客,网站)
五、项目案例分析(批处理+实时处理)
大数据学习群:119599574
本人目前是一名大数据工程师,项目数据50t,日均数据增长20g左右,个人是从java后端开发,经过3个月的业余自学成功转型大数据工程师。
大数据本质也是数据,但是又有了新的特征,包括数据来源广、数据格式多样化(结构化数据、非结构化数据、excel文件、文本文件等)、数据量大(最少也是tb级别的、甚至可能是pb级别)、数据增长速度快等。
针对以上主要的4个特征我们需要考虑以下问题:
数据来源广,该如何采集汇总?,对应出现了sqoop,cammel,datax等工具。
数据采集之后,该如何存储?,对应出现了gfs,hdfs,tfs等分布式文件存储系统。
由于数据增长速度快,数据存储就必须可以水平扩展。
数据存储之后,该如何通过运算快速转化成一致的格式,该如何快速运算出自己想要的结果?
对应的mapreduce这样的分布式运算框架解决了这个问题;但是写mapreduce需要java代码量很大,所以出现了hive,pig等将sql转化成mapreduce的解析引擎;
普通的mapreduce处理数据只能一批一批地处理,时间延迟太长,为了实现每输入一条数据就能得到结果,于是出现了storm/jstorm这样的低时延的流式计算框架;
但是如果同时需要批处理和流处理,按照如上就得搭两个集群,hadoop集群(包括hdfs+mapreduce+yarn)和storm集群,不易于管理,所以出现了spark这样的一站式的计算框架,既可以进行批处理,又可以进行流处理(实质上是微批处理)。
而后lambda架构,kappa架构的出现,又提供了一种业务处理的通用架构。
为了提高工作效率,加快运速度,出现了一些辅助工具:
ozzie,azkaban:定时任务调度的工具。
hue,zepplin:图形化任务执行管理,结果查看工具。
scala语言:编写spark程序的最佳语言,当然也可以选择用python。
python语言:编写一些脚本时会用到。
allluxio,kylin等:通过对存储的数据进行预处理,加快运算速度的工具。
以上大致就把整个大数据生态里面用到的工具所解决的问题列举了一遍,知道了他们为什么而出现或者说出现是为了解决什么问题,进行学习的时候就有的放矢了。
大数据方向的工作目前主要分为三个主要方向:
大数据工程师
数据分析师
大数据科学家
其他(数据挖掘等)
附上大数据工程师技能图:
必须掌握的技能11条
java高级(虚拟机、并发)
linux 基本操作
hadoop(hdfs+mapreduce+yarn )
hbase(javaapi操作+phoenix )
hive(hql基本操作和原理理解)
kafka
storm/jstorm
scala
python
spark (core+sparksql+spark streaming )
辅助小工具(sqoop/flume/oozie/hue等)
高阶技能6条
机器学习算法以及mahout库加mllib
r语言
lambda 架构
kappa架构
kylin
alluxio
假设每天可以抽出3个小时的有效学习时间,加上周末每天保证10个小时的有效学习时间;
3个月会有(21*3+4*2*10)*3=423小时的学习时间。
第一阶段(基础阶段)
1)linux学习—–20小时
linux操作系统介绍与安装。
linux常用命令。
linux常用软件安装。
linux网络。
防火墙。
shell编程等。
学习之前没搞清楚的知识
传统的web应用(lamp、javaee、node系等)与大数据什么关系?
之前一直以为大数据的东西就是来取代传统的web应用的,其实并不是这样;即使是大数据的架构,应用层依然会是传统的web应用,但是会根据数据特点对数据存储(结构化数据依然会保存在传统的关系型数据库——如mysql,日志等非结构数据会保存在分布式文件系统——如hadoop的hdfs)。
大数据的东西不是取代传统的web应用,而是对web应用的增强。基于分布式存储和分布式计算,以前单机或者小规模集群无法解决的问题,使用了大数据技术之后就可以解决了,比如日志等数据当数据量非常大的时候(tb甚至pb),对这些数据的分析在传统架构上是不可能或者是非常慢的,使用了大数据技术之后就是可能的了——主要是将数据处理通过mapreduce等拆分到不同的节点(电脑)上执行,然后将节点上的结果合并,最后生成分析结果。
云计算和大数据
现在几乎所有的公司都把自己的产品吹成“云”...但是真的都是“云”么?其实很多都是传统的web应用部署到阿里云这些第三方云平台吧;还有一部分有自己服务器(一般配置),然后搞个公网ip,部署上去也说自己是“云”。
hadoop结构(更新)
下面的内容是在看视频之前写的,作为一些参考吧。
学习历程
了解hadoop生态系统,了解一下生态系统中各模块的作用,文章后面对各模块有一些简单的总结
hdfs
yarn
hbase
mapreduce
hive
pig
mahout
zookeeper
sqoop
flume
kafka等
了解spark,了解spark比mapreduce的优势,学习rdd编程
spark sql
spark streaming
spark mlib
...
找两台电脑搭个hadoop、spark集群,配置spark开发环境(sbt),运行一些demo例程,典型如wordcount
研究一下mapreduce的wordcount和spark的workcount的代码,通过对比加深理解
参考如下案例,了解大数据应用,熟悉hbase,hive,sqoop等
hbase
hbase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌bigtable的开源实现,主要用来存储非结构化和半结构化的松散数据。hbase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用廉价计算机集群处理由超过10亿行数据和数百万列元素组成的数据表
hbase可以直接使用本地文件系统或者hadoop作为数据存储方式,不过为了提高数据可靠性和系统的健壮性,发挥hbase处理大数据量等功能,需要使用hadoop作为文件系统。与hadoop一样,hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器来增加计算和存储能力。
hive
hive是一个构建于hadoop顶层的数据仓库工具,由facebook公司开发,并在2008年8月开源。hive在某种程度上可以看作是用户编程接口,其本身并不存储和处理数据,而是依赖hdfs来存储数据,依赖mapreduce来处理数据。hive定义了简单的类似sql的查询语言——hiveql,它与大部分sql语法兼容,但是,并不完全支持sql标准,比如,hivesql不支持更新操作,也不支持索引和事务,它的子查询和连接操作也存在很多局限。
hiveql语句可以快速实现简单的mapreduce任务,这样用户通过编写的hiveql语句就可以运行mapreduce任务,不必编写复杂的mapreduce应用程序。对于java开发工程师而言,就不必花费大量精力在记忆常见的数据运算与底层的mapreduce java api的对应关系上;对于dba来说,可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到hadoop平台上。所以说,hive是一个可以有效、合理、直观地组织和使用数据的分析工具。
impala
hive 作为现有比较流行的数据仓库分析工具之一,得到了广泛的应用,但是由于hive采用mapreduce 来完成批量数据处理,因此,实时性不好,查询延迟较高。impala 作为新一代开源大数据分析引擎,支持实时计算,它提供了与hive 类似的功能,并在性能上比hive高出3~30 倍。impala 发展势头迅猛,甚至有可能会超过hive 的使用率而成为hadoop 上最流行的实时计算平台。
hive 与impala 的不同点总结如下:
第一,hive 比较适合进行长时间的批处理查询分析,而impala 适合进行实时交互式sql 查询。
第二,hive 依赖于mapreduce 计算框架,执行计划组合成管道型的mapreduce 任务模式进行执行,而impala 则把执行计划表现为一棵完整的执行计划树,可以更自然地分发执行计划到各个impalad执行查询。
第三,hive在执行过程中,如果内存放不下所有数据,则会使用外存,以保证查询能顺序执行完成,而impala在遇到内存放不下数据时,不会利用外存,所以,impala目前处理查询时会受到一定的限制。
hive与impala的相同点总结如下:
第一,hive与impala使用相同的存储数据池,都支持把数据存储于hdfs和hbase中,其中,hdfs支持存储text、rcfile、parquet、avro、etc等格式的数据,hbase存储表中记录。
第二,hive与impala使用相同的元数据。
第三,hive与impala中对sql的解释处理比较相似,都是通过词法分析生成执行计划。
总的来说,impala的目的不在于替换现有的mapreduce工具,把hive与impala配合使用效果最佳,可以先使用hive进行数据转换处理,之后再使用impala在hive处理后的结果数据集上进行快速的数据分析。
pig
pig 是hadoop 生态系统的一个组件,提供了类似sql 的pig latin 语言(包含filter、groupby、join、orderby 等操作,同时也支持用户自定义函数),允许用户通过编写简单的脚本来实现复杂的数据分析,而不需要编写复杂的mapreduce 应用程序,pig 会自动把用户编写的脚本转换成mapreduce 作业在hadoop 集群上运行,而且具备对生成的mapreduce程序进行自动优化的功能,所以,用户在编写pig 程序的时候,不需要关心程序的运行效率,这就大大减少了用户编程时间。因此,通过配合使用pig 和hadoop,在处理海量数据时就可以实现事半功倍的效果,比使用java、c++等语言编写mapreduce 程序的难度要小很多,并且用更少的代码量实现了相同的数据处理分析功能。pig 可以加载数据、表达转换数据以及存储最终结果,因此,在企业实际应用中,pig通常用于etl(extraction、transformation、loading)过程,即来自各个不同数据源的数据被收集过来以后,采用pig 进行统一加工处理,然后加载到数据仓库hive 中,由hive 实现对海量数据的分析。需要特别指出的是,每种数据分析工具都有一定的局限性,pig 的设计和mapreduce 一样,都是面向批处理的,因此,pig 并不适合所有的数据处理任务,特别是当需要查询大数据集中的一小部分数据时,pig 仍然需要对整个或绝大部分数据集进行扫描,因此,实现性能不会很好。
tez
tez 是apache 开源的支持dag 作业的计算框架,通过dag 作业的方式运行mapreduce 作业,提供了程序运行的整体处理逻辑,就可以去除工作流当中多余的map 阶段,减少不必要的操作,提升数据处理的性能。hortonworks把tez 应用到数据仓库hive 的优化中,使得性能提升了约100 倍。如图15-13 所示,可以让tez 框架运行在yarn 框架之上,然后让mapreduce、pig 和hive 等计算框架运行在tez框架之上,从而借助于tez 框架实现对mapreduce、pig 和hive 等的性能优化,更好地解决现有mapreduce 框架在迭代计算(如pagerank 计算)和交互式计算方面存在的问题。
tez在解决hive、pig延迟大、性能低等问题的思路,是和那些支持实时交互式查询分析的产品(如impala、dremel和drill等)是不同的。impala、dremel和drill的解决问题思路是抛弃mapreduce计算框架,不再将类似sql语句的hiveql或者pig语句翻译成mapreduce程序,而是采用与商用并行关系数据库类似的分布式查询引擎,可以直接从hdfs或者hbase中用sql语句查询数据,而不需要把sql语句转化成mapreduce任务来执行,从而大大降低了延迟,很好地满足了实时查询的要求。但是,tez则不同,比如,针对hive数据仓库进行优化的“tez+hive”解决方案,仍采用mapreduce计算框架,但是对dag的作业依赖关系进行了裁剪,并将多个小作业合并成一个大作业,这样,不仅计算量减少了,而且写hdfs次数也会大大减少。
kafka
kafka是由linkedin公司开发的一种高吞吐量的分布式发布订阅消息系统,用户通过kafka系统可以发布大量的消息,同时也能实时订阅消费消息。
在大数据时代涌现的新的日志收集处理系统(flume、scribe等)往往更擅长批量离线处理,而不能较好地支持实时在线处理。相对而言,kafka可以同时满足在线实时处理和批量离线处理。
kafka设计的初衷是构建一个可以处理海量日志、用户行为和网站运营统计等的数据处理框架
最近几年,kafka在大数据生态系统中开始扮演越来越重要的作用,在uber、twitter、netflix、linkedin、yahoo、cisco、goldman sachs等公司得到了大量的应用。目前,在很多公司的大数据平台中,kafka通常扮演数据交换枢纽的角色。
在公司的大数据生态系统中,可以把kafka作为数据交换枢纽,不同类型的分布式系统(关系数据库、nosql数据库、流处理系统、批处理系统等),可以统一接入到kafka,实现和hadoop各个组件之间的不同类型数据的实时高效交换,较好地满足各种企业应用需求。
sqoop
sqoop是一款开源的工具,主要用于在hadoop(hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : mysql ,oracle ,postgres等)中的数据导进到hadoop的hdfs中,也可以将hdfs的数据导进到关系型数据库中。
大数据学习qq群119599574
下一篇: Hbase系统架构简述