一、概览
二、相关组件及需了解掌握的技术栈
2.1、Java基础(10天)
1)java基础语法(1-5日)
目前应用最广泛的是javaSE8,发布于2014年,而最新版为2017年发布的javaSE9;
》【JDK、JRE、JVM】区分:
JDK·:开发者工具,包含JRE,其运行程序用,JRE又包含JVM和运行类库,对java虚拟机,其包含字节码等核心内容,是运行所依赖核心所在。
2)面向对象:6日
3)字符串和集合
6)IO流:读写文件
7)接口概念,Lambda,方法引用
8)Stream流,java9的模块化
2.2、常见组件
文件存储: N、Mesos
日志收集:Flume、Scribe、Logstash、Kibana
消息系统:Kafka、StormMQ、ZeroMQ、RabbitMQ
查询分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid
分布式协调服务:Zookeeper
集群管理与监控:Ambari、Ganglia、Nagios、Cloudera Manager
数据挖掘、机器学习:Mahout、Spark MLLib
数据同步:Sqoop
任务调度:Oozie
2.2.1、Hadoop
了解:
Hadoop 1.0、Hadoop 2.0
MapReduce、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
1)搭建Hadoop,最好先用安装包命令行安装Hadoop 2.0
2)了解熟悉HDFS目录操作命令;上传、下载文件命令;提交运行MapReduce示例程序;
3)打开Hadoop WEB界面,查看Job运行状态,查看Job运行日志。了解Hadoop的系统日志位置
4)原理了解:
MapReduce:如何分而治之;
HDFS:数据到底在哪里,究竟什么才是副本;
Yarn到底是什么,它能干什么;
NameNode到底在干些什么;
Resource Manager到底在干些什么;
2.2.2、Hive
SQL On Hadoop之Hive是一种Sql标准化工具,Hive提供了SQL接口,开发人员只需要编写简单易上手的SQL语句,Hive负责把SQL翻译成MapReduce,提交运行。
Hive官方解释:Apache Hive是一种数据仓库软件,使用它有助于读取,写入和管理驻留在分布式存储中并使用SQL语法查询的大型数据集。
说明:数据仓库是逻辑上的概念,底层使用的是数据库,数据仓库中的数据有这两个特点:最全的历史数据(海量)、相对稳定的;所谓相对稳定,指的是数据仓库不同于业务系统数据库,数据经常会被更新,数据一旦进入数据仓库,很少会被更新和删除,只会被大量查询。而Hive,也是具备这两个特点,因此,Hive适合做海量数据的数据仓库工具,而不是数据库工具。
Hive后台使用MapReduce作为执行引擎,实际运行过程中会发现有加载较慢。因此SQL On Hadoop的框架越来越多采用来处理这种问题,如SparkSQL、Impala和Presto,它们是基于半内存或者全内存,提供了SQL接口来快速查询分析Hadoop上的数据。
我们常用SparkSQL。
1)安装配置Hive,了解Hive命令行使用:创建、删除表;加载数据到表;下载Hive表的数据;
2)了解Hive工作原理
2.2.3、 MapReduce
MapReduce是Hadoop提供的分布式计算框架,它可以用来统计和分析HDFS上的海量数据;
1)MapReduce的原理
2)尝试写简单的MapReduce程序,运行排查出现问题,了解日志位置及如何定位查看;
3)加深的Select、Where、group by等SQL语句的温习学习,最好熟练;在Hive里创建表、删除表、往表中加载数据、分区、将表中数据下载到本地;
4)Hive SQL转换成MapReduce的大致流程;
5)
2.2.4、HDFS
HDFS是Hadoop提供的分布式存储框架,它可以用来存储海量数据;
1)HDFS读写数据的流程;向HDFS中PUT数据;从HDFS中下载数据;
2)HDFS PUT命令,put命令在实际环境中也比较常用,通常配合shell、python等脚本语言来使用。应熟练掌握
3)HDFS API:
4)HDFS GET命令:把HDFS上的文件GET到本地。需要熟练掌握
2.2.5、Sqoop
Sqoop是一个主要用于Hadoop/Hive与传统关系型数据库,Oracle、MySQL、SQLServer等之间进行数据交换的开源框架。就像Hive把SQL翻译成MapReduce一样,Sqoop把你指定的参数翻译成MapReduce,提交到Hadoop运行,完成Hadoop与其他数据库之间的数据交换。
1)安装Sqoop,了解Sqoop常用的配置参数和方法
2)使用Sqoop完成从MySQL同步数据到HDFS;使用Sqoop完成从MySQL同步数据到Hive表;
3)使用Sqoop完成将HDFS上的文件同步到MySQL;使用Sqoop完成将Hive表中的数据同步到MySQL。
4)对比学习阿里开源的DataX
DataX用于Hadoop与关系型数据库数据交换;支持多种数据源,及二次开发
2.2.6、Flume
Flume是一个分布式的海量日志采集和传输框架,因为“采集和传输框架”,所以它并不适合关系型数据库的数据采集和传输。Flume可以实时的从网络协议、消息系统、文件系统采集日志,并传输到HDFS上。适用需实时数据采集的场景。
1)安装和配置Flume,Flume的配置和使用较为复杂
2)使用Flume监控一个不断追加数据的文件,并将数据传输到HDFS
3)
2.2.7、Spark
什么是Spark,什么是SparkSQL。
Spark有的核心概念及名词解释。
SparkSQL和Spark是什么关系,SparkSQL和Hive是什么关系。
SparkSQL为什么比Hive跑的快
如何部署和运行SparkSQL
Spark有哪些部署模式?
如何在Yarn上运行SparkSQL?
使用SparkSQL查询Hive中的表
2.2.8、 数据采集
Hadoop上配置各种数据源,收集数据
2.2.9、Kafka
【一次采集、多次消费】:Kafka应用
1)在某些实际业务场景下,特别是对于一些监控日志,想即时从日志中了解一些指标,这时候,从HDFS上分析就太慢了,尽管是通过Flume采集的,但Flume也不能间隔很短就往HDFS上滚动文件,这样会导致小文件特别多。使用Flume采集的数据,不是直接到HDFS上,而是先到Kafka,Kafka中的数据可以由多个消费者同时消费,其中一个消费者,会将数据同步到HDFS。
2)什么是Kafka?Kafka的核心概念及名词解释
3)如何部署和使用Kafka:使用单机部署Kafka,并成功运行自带的生产者和消费者例子。
4)使用Java程序自己编写并运行生产者和消费者程序。
5)Flume和Kafka的集成,使用Flume监控日志,并将日志数据实时发送至Kafka。
6)为什么Spark比MapReduce快:使用SparkSQL代替Hive,更快的运行SQL。使用Kafka完成数据的一次收集,多次消费架构。
2.2.10、多任务调度监控系统: Apache Oozie
1)Oozie是什么?有哪些功能?
2)Oozie可以调度哪些类型的任务(程序)?
3)Oozie可以支持哪些任务触发方式?
4)安装配置Oozie。
5)其他:Azkaban,light-task-scheduler,Zeus
2.2.11、Storm
Kafka使用在获取实时指标的业务场景,这里的实时又可分为绝对实时和准实时,绝对实时的延迟要求一般在毫秒级,准实时的延迟要求一般在秒、分钟级。对于需要绝对实时的业务场景,用的比较多的是Storm,对于其他准实时的业务场景,可以是Storm,也可以是Spark Streaming。
1)什么是Storm?有哪些可能的应用场景?
2)Storm由哪些核心组件构成,各自担任什么角色?
3)Storm的简单安装和部署。
4)自己编写Demo程序,使用Storm完成实时数据流计算。
5)什么是Spark Streaming,它和Spark是什么关系?
6)Spark Streaming和Storm比较,各有什么优缺点?
7)使用Kafka + Spark Streaming,完成实时计算的Demo程序。
2.2.12、数据存储
1)离线: 比如,每天将前一天的数据提供到指定的数据源(DB、FILE、FTP)等;离线数据的提供可以采用Sqoop、DataX等离线数据交换工具。
2)实时:比如,在线网站的推荐系统,需要实时从数据平台中获取给用户的推荐数据,这种要求延时非常低(50毫秒以内)。根据延时要求和实时数据的查询需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
3)OLAP分析:OLAP除了要求底层的数据模型比较规范,另外,对查询的响应速度要求也越来越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的数据模型比较规模,那么Kylin是最好的选择。
4)即席查询:即席查询的数据比较随意,一般很难建立通用的数据模型,因此可能的方案有:Impala、Presto、SparkSQL。
2.2.13、机器学习
在常用实际业务中,多用机器学习来解决的问题大概以下三类:
1)分类问题:包括二分类和多分类,二分类就是解决了预测的问题,就像预测一封邮件是否垃圾邮件;多分类解决的是文本的分类;
2)聚类问题:从用户搜索过的关键词,对用户进行大概的归类。
3)推荐问题:根据用户的历史浏览和点击行为进行相关推荐。