1.3.4 阶段学习路线
1.3.4.1 Linux基础和分布式集群技术
1.学完此阶段可掌握的核心能力
熟练使用Linux操作系统。熟练安装Linux系统软件,了解并熟悉负载均衡、高可靠集群的相关概念,搭建互联网高并发、高可靠的服务架构。
2.学完此阶段可解决的现实问题
搭建负载均衡、高可靠的服务器集群,可以增大网站的并发访问量,保证服务不间断地对外服务。
3.学完此阶段可拥有的市场价值
具备初级程序员必备的Linux服务器运行、维护和管理能力。
4.内容介绍
在大数据领域,使用最多的操作系统就是Linux系列,并且几乎都是分布式集群体系结构。本课程为大数据的基础课程,主要介绍Linux操作系统、Linux常用命令、Linux常用软件安装、Linux网络、防火墙、Shell编程等。
案例:搭建基于互联网的高并发、高可靠的服务架构,图1.3.4显示了一个小型Linux集群的实例。
图1.3.4 Linux集群的简单实例
1.3.4.2 离线计算系统课程阶段
1.学完此阶段可掌握的核心能力
(1)通过对大数据技术产生的背景(参考图1.3.5)和行业应用案例的学习,深入了解Hadoop的作用;
图1.3.5 国内大数据市场规模
(2)掌握Hadoop底层分布式文件系统HDFS的原理、操作和应用开发;
(3)掌握MapReduce分布式运算系统的工作原理和分布式分析应用开发;
(4)掌握Hive数据仓库工具的工作原理及应用开发。
2.学完此阶段可解决的现实问题
(1)熟练搭建海量数据离线计算平台;
(2)根据具体业务场景设计、实现海量数据存储方案;
(3)根据具体数据分析需求实现基于MapReduce的分布式运算程序。
3.学完此阶段可拥有的市场价值
具备企业数据部初级应用开发人员的能力。
4.此阶段包含的课程
(1)Hadoop生态圈
① Hadoop入门知识
什么是Hadoop?Hadoop产生背景、Hadoop在大数据云计算中的位置和关系(参考图1.3.6)、国内Hadoop的就业情况分析及课程大纲介绍。
图1.3.6 Hadoop生态圈
② Hive快速入门
Hive基本介绍、Hive的使用、数据仓库基本知识。
③ 数据分析流程案例
如 Web 点击流日志数据挖掘的需求分析、数据来源、处理流程、数据分析结果导出、数据展现
④ Hadoop数据分析系统集群搭建
Hadoop 集群简介(见图 1.3.7)、服务器介绍、网络环境设置、服务器系统环境设置、JDK环境安装、Hadoop集群安装部署、集群启动、集群状态测试、Hive的配置安装、Hive启动、Hive使用测试。
图1.3.7 Hadoop集群
(2)HDFS简介
① HDFS入门
了解HDFS分布式文件系统架构(见图1.3.8)、HDFS的设计目标、HDFS与其他分布式存储系统的优劣势比较、HDFS的适用场景。
② HDFS的shell操作
HDFS 命令行客户端启动、HDFS 命令行客户端的基本操作、命令行客户端支持的常用命令、常用参数介绍。
③ HDFS的工作机制
HDFS系统的模块架构、HDFS写数据流程、HDFS读数据流程。
图1.3.8 HDFS架构
NameNode 工作机制、元数据存储机制、元数据手动查看、元数据 checkpoint 机制、NameNode故障恢复、DataNode工作机制、DataNode动态增减、全局数据负载均衡。
④ HDFS的Java应用开发
搭建开发环境、获取API中的客户端对象、HDFS的Java客户端所具备的常用功能、HDFS客户端对文件的常用操作实现、利用HDFS的Java客户端开发数据采集和存储系统。
(3)MapReduce简介
① MapReduce快速上手
了解MapReduce功能、MapReduce程序运行演示、MapReduce编程示例及编程规范、MapReduce程序运行模式、MapReduce程序调试debug的几种方式。
② MapReduce程序的运行机制(MapReduce工作流如图1.3.9所示)。
图1.3.9 MapReduce工作流
MapReduce程序运行流程解析、MapTask并发数的决定机制、MapReduce中的combiner组件应用、MapReduce中的序列化框架及应用、MapReduce中的排序、MapReduce中的自定义分区实现、MapReduce的shuffle机制、MapReduce利用数据压缩进行优化、MapReduce程序与Yarn之间的关系、MapReduce参数优化。
通过以上各组件的详解,理解MapReduce的核心运行机制,从而具备灵活应对各种复杂应用场景的能力。
MapReduce实战编程案例:通过一个实战案例来熟悉复杂MapReduce程序的开发。该程序是从Nginx服务器产生的访问服务器中计算出每个访客的访问次数及每次访问的时长。图1.3.10所示为MapReduce原始数据。
图1.3.10 MapReduce原始数据
通过一系列的MapReduce程序——清洗、过滤、访问次数及时间分析,最终计算出需求所要的结果,用于支撑页面展现,如图1.3.11所示。
图1.3.11 数据可视化展示
(4)Hive知识的强化
① Hive基本概念
Hive应用场景、Hive内部架构(见图1.3.12)、Hive与Hadoop的关系、Hive与传统数据库对比、Hive的数据存储机制、Hive的运算执行机制。
图1.3.12 Hive内部架构
② Hive基本操作
Hive中的DDL操作、Hive中的DML操作、在Hive中如何实现高效的JOIN查询、Hive的内置函数应用、HiveShell的高级使用方式、Hive常用参数配置、Hive自定义函数和TransForm的使用技巧、HiveUDF开发实例。
③ Hive高级应用
Hive执行过程分析及优化策略、Hive在实战中的最佳实践案例、Hive优化分类详解、Hive实战案例——数据ETL、Hive实战案例——用户访问时长统计。
Hive实战案例——级联求和报表实例,如图1.3.13所示。
图1.3.13 级联求和报表实例
1.3.4.3 离线数据挖掘系统的学习与把握
1.学完此阶段可掌握的核心能力
(1)通过对数据仓库知识的加强,初步掌握数据仓库的核心概念和设计流程;
(2)通过对Hadoop生态圈关键辅助工具的学习,掌握Hadoop分析系统的整合能力;
(3)通过电商系统点击流日志数据挖掘系统实战项目,复习和掌握 Hadoop 离线数据挖掘系统从数据采集、入库、分析到报表可视化显示的完整流程。
2.学完此阶段可解决的现实问题
(1)根据企业具体应用场景,设计海量数据分析系统的整体架构;
(2)根据具体场景的特点,有针对性地调整数据分析各环节的技术选型;
(3)根据具体需求搭建起整套离线数据分析系统;
(4)简单数据仓库模型的设计和架构;
(5)各环节具体功能模块的开发实现。
3.学完此阶段可拥有的市场价值
具备企业数据仓库中高级应用开发能力或初级架构师能力。
4.主要学习内容
(1)数据仓库及数据模型入门
了解数据仓库知识、数据仓库的意义、数据仓库核心概念、数据仓库的体系结构。
(2)数据仓库设计
建立数据仓库的步骤、数据的抽取、数据的转换、数据的加载、什么是数据模型、数据模型的常见类型、如何设计数据模型、如何选择数据建模的架构。
典型数据模型有星型模型、雪花模型(例子如图 1.3.14 所示)、星座模型(例子如图1.3.15所示)。
图1.3.14 雪花模型
图1.3.15 星座模型
1.3.4.4 离线辅助系统
1.数据采集系统
Flume日志采集框架(见图1.3.16)简介、Flume工作机制、Flume核心组件、Flume参数配置说明、Flume采集Nginx日志实战案例。
图1.3.16 Flume日志采集框架
2.任务调度系统
任务调度系统概念介绍、常用任务调度工具比较、Oozie系统的组成(见图1.3.17)、Oozie核心概念、Oozie的配置说明、Oozie实现MapReduce/Hive等任务调度实战案例。
图1.3.17 Oozie的组成
3.数据导出工具
数据导出概念介绍、Sqoop 基础知识(见图 1.3.18)、Sqoop 原理及配置说明、Sqoop数据导入实战、Sqoop数据导出实战、Sqoop批量作业操作。
图1.3.18 Sqoop基本组成及工作流程
1.3.4.5 Storm实时计算部分阶段
实时课程分为两个部分:流式计算核心技术和流式计算案例实战。
1.流式计算核心技术
流式计算核心技术主要分为两个核心技术点:Storm和Kafka。
2.学完此阶段可掌握的核心能力
(1)理解实时计算及应用场景;
(2)掌握Storm程序的开发及底层原理、掌握Kafka消息队列的开发及底层原理;
(3)具备Kafka与Storm集成使用的能力。
3.学完此阶段可解决的现实问题
具备开发基于Storm的实时计算程序的能力。
4.学完此阶段可拥有的市场价值
具备实时计算开发的技术能力。
5.流式计算一般结构
在海量数据处理领域,2011 年面世的 Hadoop 是人们津津乐道的技术,Hadoop 不仅可以用来存储海量数据,还可以用来计算海量数据。因为其高吞吐、高可靠等特点,很多互联网公司都已经使用Hadoop来构建数据仓库,高频使用促进了Hadoop生态圈的各项技术的发展。一般来讲,根据业务需求,数据的处理可以分为离线处理和实时处理,在离线处理方面 Hadoop 提供了很好的解决方案,但是针对海量数据的实时处理却一直没有比较好的解决方案。就在人们翘首以待的时间节点,Storm问世,与生俱来的分布式、高可靠、高吞吐的特性,在市面上的一些流式计算框架中占据优势地位,渐渐地成为流式计算的首选框架。
图1.3.19是Storm流式分析的一般架构图,抽象出四个步骤就是数据采集、数据缓冲、数据处理、数据输出。一般情况下,我们采用Flume+Kafka+Storm+Redis的结构来进行流式数据分析。实时部分的课程主要是针对Kafka、Storm进行学习。
图1.3.19 Storm流式分析
6.流式计算功能
“一淘网”——实时分析系统:实时分析用户的属性,并反馈给搜索引擎。最初,用户属性分析是通过每天定时运行MRjob来完成的。为了满足实时性的要求,希望能够实时分析用户的行为日志,将最新的用户属性反馈给搜索引擎,能够为用户展现最贴近其当前需求的结果。
“携程网”——网站性能监控:实时分析系统可以监控携程网的网站性能。利用HTML5提供的performance接口获得可用的指标,并记录到日志。Storm集群实时分析日志和入库。使用 DRPC(分布式远程过程调用)聚合数据形成报表,通过历史数据对比等判断规则,触发预警事件。
当一个游戏新版本上线时,可用一个实时分析系统收集游戏后台数据,运营或者开发者可以在上线后几秒钟得到持续不断更新的游戏监控报告和分析结果,然后针对游戏运行参数和平衡性进行调整。这样就能够大大缩短游戏升级、迭代的处理周期,提升游戏者的良好体验。
实时计算在腾讯的部分运用:精准推荐(广点通、广告推荐、新闻推荐、视频推荐、游戏道具推荐);实时分析(例如微信的运营数据门户、效果统计、订单用户的画像分析);实时监控(实时监控平台、游戏内接口调用)
为了更加精准投放广告,阿里巴巴后台计算引擎需要维护每个用户的兴趣点(理想状态是,你对什么感兴趣,就向你投放哪类广告)。用户兴趣主要基于用户的历史行为、用户的实时查询、用户的实时点击、用户的地理信息而得,其中实时查询、实时点击等用户行为都是实时数据。考虑到系统的实时性,阿里巴巴使用Storm维护用户兴趣数据,并在此基础上进行用户定向的广告投放。
7.Storm核心技术点
(1)基础技术点
Linux系统环境的准备、ZooKeeper集群搭建、Storm集群搭建、Storm配置文件配置项讲解、集群搭建常见问题解决。图1.3.20所示为一个部署案例。
图1.3.20 采用“Hadoop+Storm”部署方式的一个案例
下面我们来看Storm的一个练习案例:
看一组几年前的数据,2015年双十一的交易峰值为8.59万笔/秒,是2014年3.85万笔/秒的2.23倍,这一数据也超过了6万笔/秒的预估(如图1.3.21所示)。如何实时的计算订单金额,让公司领导层看到呢?
图1.3.21 双十一支付宝成交金额
(2)Storm基础结构与工作方式
Storm常用组件和编程API:Topology、Spout、Bolt、Storm分组策略(Stream Groupings)、Storm项目maven环境搭建、使用Strom开发一个WordCount例子、Storm程序本地模式debug、Storm消息可靠性及容错原理、Storm任务提交流程、Strom消息容错机制。图1.3.22显示了Storm的层次式结构。
图1.3.22 Storm的层次式结构
8.Kafka核心技术点
Storm结合消息队列控制工具Kafka:消息队列基本概念包括producer、consumer、topic、broker等(如图1.3.23所示)、消息队列Kafka使用场景、Storm结合Kafka编程API、Kafka负载均衡、Kafka消息存储原理等。
图1.3.23 Kafka消息队列原理
9.流式计算案例实战
实战案例部分主要有三个企业实战案例,分别是基于点击流的日志分析系统、基于系统日志的监控告警系统、基于订单系统的交易风控系统,三个案例是企业中的典型项目。学完此阶段能够独立根据企业的业务性质开发相关的Storm程序。
1.3.4.6 Spark内存计算
1.学完此阶段可掌握的核心能力
(1)掌握Scala函数式编程特性,熟练使用Scala开发程序,可以看懂他人用Scala编写的源码;
(2)搭建Spark集群、使用Scala编写Spark计算程序,熟练掌握Spark原理,可以阅读Spark源码;
(3)理解DataFrame和RDD之间的关系,熟练使用DataFrame的API,熟练使用Spark SQL处理结构化数据,通过Spark SQL对接各种数据源,并将处理后结果写回到存储介质中;
(4)理解Spark Streaming的核心DStream,掌握DStream的编程API并编写实时计算程序。
2.学完此阶段可解决的现实问题
熟练使用 Scala 快速开发 Spark 大数据应用,通过计算分析大量数据,挖掘出其中有价值的数据,为企业提供决策依据。
3.学完此阶段可拥有的市场价值
学习完Spark并掌握其内容,将具备中级大数据工程师能力。
4.主要学习内容
(1)Scala函数式编程
Scala是一门集面向对象和函数式编程于一身的编程语言,其强大的表达能力、优雅的API、高效的性能等优点受到越来越多程序员的青睐。Spark底层就是用Scala语言编写,如果想深入掌握Spark,需要学好Scala。
图1.3.24是基于akka框架一个简单的分布式RPC(远程过程调用)通信框架的Scala案例。
图1.3.24 akka框架下的Scala案例
(2)使用Spark处理离线数据
Spark是基于内存计算的大数据并行计算框架,具有高容错性和高可伸缩性,可以在大量廉价硬件之上部署大规模集群,在同等条件下要比 Hadoop 快 10~120 倍,如图 1.3.25所示。
图1.3.25 Spark与Hadoop计算时间比较
(3)使用Spark SQL处理结构化数据
Spark SQL的前身是Shark,专门用来处理结构化数据的查询语言。类似Hive,Spark SQL是将SQL转换成一系列RDD任务提交到Spark集群中进行计算的,由于是在内存中完成的计算,要比Hive的性能高很多,并且简化了开发Spark程序的难度同时提高了开发效率。图1.3.26是Spark SQL适合的编程环境及实用工具。
图1.3.26 Spark SQL适合的编程环境及实用工具
(4)使用Spark Streaming完成实时计算
Spark Streaming类似于Apache Storm,用于流式数据的处理。根据其官方文档介绍,Spark Streaming有吞吐量高和容错能力强等特点。Spark Streaming支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等。数据输入后可以用Spark的高度抽象原语,如 map、reduce、join、window 等进行运算。而结果也能保存在很多地方,如HDFS、数据库等。另外Spark Streaming也能和MLlib以及Graphx完美结合,如图1.3.27所示。
图1.3.27 Spark Streaming适用环境演示