前言:mysql
1、背景介绍web
2、大数据介绍算法
正文:sql
1、大数据相关的工做介绍数据库
2、大数据工程师的技能要求编程
3、大数据学习规划后端
4、持续学习资源推荐(书籍,博客,网站)性能优化
5、项目案例分析(批处理+实时处理)服务器
大数据学习群: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