360SDN.COM

【大数据】2017-2023年是大数据云数据的时代经典学习路线

来源:产业智能官  2017-11-15 18:48:38    评论:0点击:

 

1.Linux基础和分布式集群技术

学完此阶段可掌握的核心能力:

熟练使用Linux,熟练安装Linux上的软件,了解熟悉负载均衡、高可靠等集群相关概念,搭建互联网高并发、高可靠的服务架构;

学完此阶段可解决的现实问题:

搭建负载均衡、高可靠的服务器集群,可以增大网站的并发访问量,保证服务不间断地对外服务;

学完此阶段可拥有的市场价值:

具备初级程序员必要具备的Linux服务器运维能力。

1.内容介绍:

在大数据领域,使用最多的操作系统就是Linux系列,并且几乎都是分布式集群。该课程为大数据的基础课程,主要介绍Linux操作系统、Linux常用命令、Linux常用软件安装、Linux网络、防火墙、Shell编程等。

2.案例:搭建互联网高并发、高可靠的服务架构。

2.离线计算系统课程阶段

1. 离线计算系统课程阶段

HADOOP核心技术框架

学完此阶段可掌握的核心能力:

1、通过对大数据技术产生的背景和行业应用案例了解hadoop的作用;2、掌握hadoop底层分布式文件系统HDFS的原理、操作和应用开发;3、掌握MAPREDUCE分布式运算系统的工作原理和分布式分析应用开发;4、掌握HIVE数据仓库工具的工作原理及应用开发。

学完此阶段可解决的现实问题:

1、熟练搭建海量数据离线计算平台;2、根据具体业务场景设计、实现海量数据存储方案;3、根据具体数据分析需求实现基于mapreduce的分布式运算程序;

学完此阶段可拥有的市场价值:

具备企业数据部初级应用开发人员的能力

1.1 HADOOP快速入门

1.1.1 hadoop知识背景

什么是hadoop、hadoop产生背景、hadoop在大数据云计算中的位置和关系、国内hadoop的就业情况分析及课程大纲介绍

国内外hadoop应用案例介绍

分布式系统概述、hadoop生态圈及各组成部分的简介

1.1.2 HIVE快速入门

hive基本介绍、hive的使用、数据仓库基本知识

1.1.3 数据分析流程案例

web点击流日志数据挖掘的需求分析、数据来源、处理流程、数据分析结果导出、数据展现

1.1.4 hadoop数据分析系统集群搭建

集群简介、服务器介绍、网络环境设置、服务器系统环境设置、JDK环境安装、hadoop集群安装部署、集群启动、集群状态测试

HIVE的配置安装、HIVE启动、HIVE使用测试

1.2 HDFS详解

1.2.1 HDFS的概念和特性

什么是分布式文件系统、HDFS的设计目标、HDFS与其他分布式存储系统的优劣势比较、HDFS的适用场景

1.2.2 HDFS的shell操作

HDFS命令行客户端启动、HDFS命令行客户端的基本操作、命令行客户端支持的常用命令、常用参数介绍

1.2.3 HDFS的工作机制

HDFS系统的模块架构、HDFS写数据流程、HDFS读数据流程

NAMENODE工作机制、元数据存储机制、元数据手动查看、元数据checkpoint机制、NAMENODE故障恢复、DATANODE工作机制、DATANODE动态增减、全局数据负载均衡

1.2.4 HDFS的java应用开发

搭建开发环境、获取api中的客户端对象、HDFS的java客户端所具备的常用功能、HDFS客户端对文件的常用操作实现、利用HDFS的JAVA客户端开发数据采集和存储系统

1.3 MAPREDUCE详解

1.3.1 MAPREDUCE快速上手

为什么需要MAPREDUCE、MAPREDUCE程序运行演示、MAPREDUCE编程示例及编程规范、MAPREDUCE程序运行模式、MAPREDUCE程序调试debug的几种方式

1.3.2 MAPREDUCE程序的运行机制

MAPREDUCE程序运行流程解析、MAPTASK并发数的决定机制、MAPREDUCE中的combiner组件应用、MAPREDUCE中的序列化框架及应用、MAPREDUCE中的排序、MAPREDUCE中的自定义分区实现、MAPREDUCE的shuffle机制、MAPREDUCE利用数据压缩进行优化、MAPREDUCE程序与YARN之间的关系、MAPREDUCE参数优化

通过以上各组件的详解,深刻理解MAPREDUCE的核心运行机制,从而具备灵活应对各种复杂应用场景的能力

MAPREDUCE实战编程案例:通过一个实战案例来熟悉复杂MAPREDUCE程序的开发。该程序是从nginx服务器产生的访问服务器中计算出每个访客的访问次数及每次访问的时长。原始数据样例如下:

通过一系列的MAPREDUCE程序——清洗、过滤、访问次数及时间分析,最终计算出需求所要的结果,用于支撑页面展现:

1.4 HIVE增强

1.4.1 HIVE基本概念

HIVE应用场景、HIVE内部架构、HIVE与hadoop的关系、HIVE与传统数据库对比、HIVE的数据存储机制、HIVE的运算执行机制

1.4.2 HIVE基本操作

HIVE中的DDL操作、HIVE中的DML操作、在HIVE中如何实现高效的JOIN查询、HIVE的内置函数应用、HIVE shell的高级使用方式、HIVE常用参数配置、HIVE自定义函数和TRANSFORM的使用技巧、HIVE UDF开发实例

1.4.3 HIVE高级应用

HIVE执行过程分析及优化策略、HIVE在实战中的最佳实践案例、HIVE优化分类详解、HIVE实战案例--数据ETL、HIVE实战案例--用户访问时长统计

HIVE实战案例--级联求和报表实例:

离线数据挖掘系统

学完此阶段可掌握的核心能力:

1、通过对数据仓库知识的加强初步掌握数据仓库的核心概念和设计流程;2、通过对HADOOP生态圈关键辅助工具的学习掌握hadoop分析系统的整合能力;3、通过电商系统点击流日志数据挖掘系统实战项目,掌握hadoop离线数据挖掘系统从数据采集、入库、分析及报表展现的整套流程

学完此阶段可解决的现实问题:

1、可根据企业具体场景设计海量数据分析系统的通用架构2、根据具体场景的特点有针对性地调整数据分析各环节的技术选型;3、根据具体需求搭建起整套离线数据分析系统;4、简单数据仓库模型的设计和架构5、各环节具体功能模块的开发实现

学完此阶段可拥有的市场价值:

具备企业数据部中高级应用开发和初级架构师能力

2.1 数据仓库增强

2.1.1 数据仓库及数据模型入门

什么是数据仓库、数据仓库的意义、数据仓库核心概念、数据仓库的体系结构

2.1.2 数据仓库设计

建立数据仓库的步骤、数据的抽取、数据的转换、数据的加载、什么是数据模型、数据模型的常见类型、如何设计数据模型、如何选择数据建模的架构

典型数据模型——星型建模实例

2.1.3 数据仓库建模样例

业务建模、领域建模、逻辑建模、物理建模

web点击流日志分析系统数据仓库设计实战:

通过对数据特点和业务需求的分析,关系梳理,设计出一个主题明确、层次合理的数据模型

2.2 离线辅助系统

2.2.1 数据采集系统

数据采集概念介绍

FLUME日志采集框架介绍、FLUME工作机制、FLUME核心组件、FLUME参数配置说明、FLUME采集nginx日志实战案例

2.2.2 任务调度系统

任务调度系统概念介绍、常用任务调度工具比较、OOZIE介绍、OOZIE核心概念、OOZIE的配置说明、OOIZE实现mapreduce/hive等任务调度实战案例

2.2.3 数据导出

数据导出概念介绍、SQOOP基础知识、SQOOP原理及配置说明、SQOOP数据导入实战、SQOOP数据导出实战、SQOOP批量作业操作

2.3 web点击流日志分析系统实战项目

2.3.1 项目介绍

1. 在PC时代,营销的核心是购买,在移动互联网时代,其核心是如何实现用户个性化互动,对用户传播更为精准化的内容,而实现这一核心的基础就是对数据的管理和分析——数据驱动型商业模型。

2. 各类互联网服务产品(如网站、APP)都可以通过前端技术获取用户的详细行为数据(如访问的页面,点击的区域、登陆的频次、注册行为、购买的行为等),将这些点击流日志数据与后台商业数据综合起来,就可以挖掘对公司运营决策意义非凡的商业价值。

3. 本项目则是一个用大数据技术平台实现的点击流日志分析数据挖掘系统,项目内容涵盖一个典型数据挖掘系统中,包括需求分析、数据采集、数据存储管理、数据清洗、数据仓库设计、ETL、业务模型统计分析、数据可视化的全部流程。

2.3.2 需求分析

什么是点击流日志、点击流日志的商业价值、点击流日志分析需求

业务模型指标体系设计——流量分析、来源分析、受访分析、访客分析、转化率分析

2.3.3 系统设计及开发

1. 系统架构设计

2. 数据采集设计及开发——数据格式、数据内容分析、数据生成规律、采集系统技术选型解析、FLUME采集系统实现

3. 数据存储设计及开发——存储技术选型、存储业务流程解析、存储目录规划及文件命名规则、小文件合并实现

4. 数据统计设计及开发——数据预处理、数据加载、原始数据表的创建、数据入库、数据ETL

5. 报表统计设计——数据模型设计、事实表设计、维度表梳理

6. 业务指标设计及开发——PV统计(时间维度、终端维度、地域维度)、来访次数统计(时间维度、地域维度、终端维度)、独立访客统计(时间维度、终端维度、地域维度)、受访页面统计(时间维度、栏目维度)、页面热点图、转化率分析、来源关键词分析、来源搜索引擎分析、来源广告推广分析

2.3.4 任务调度系统设计实现

任务调度单元实现、各环节任务运行频次及依赖关系梳理、工作流设计及实现、工作流定义配置上传部署、工作流启动即状态监控

2.3.5 数据可视化——结果报表展现

1. hive分析结果使用sqoop导出到msyql数据库

2. 报表展现系统技术选型:

后台使用spingmvc + spring + mybatis

前端页面使用全静态异步刷新技术Jquery + Echarts

3. web展现程序架构搭建,使用maven构建项目工程

4. web展现程序页面设计开发:原型页面设计、js代码开发

5. 最终实现以下数据可视化效果:

(1)流量概况可视化效果:

(2)来源地域分析可视化效果:

(3)来源类型分析可视化效果:

3.Storm实时计算部分阶段

实时课程分为两个部分:流式计算核心技术和流式计算计算案例实战。

1.流式计算核心技术

流式计算核心技术主要分为两个核心技术点:Storm和Kafka,学完此阶段能够掌握Storm开发及底层原理、Kafka的开发及底层原理、Kafka与Storm集成使用。具备开发基于storm实时计算程序的技术能力。

学完此阶段可掌握的核心能力:

(1)、理解实时计算及应用场景

(2)、掌握Storm程序的开发及底层原理、掌握Kafka消息队列的开发及底层原理

(3)、具备Kafka与Storm集成使用的能力

学完此阶段可解决的现实问题:

具备开发基于storm的实时计算程序的能力

学完此阶段可拥有的市场价值:

具备实时计算开发的技术能力、但理解企业业务的能力不足

1.1、流式计算一般结构

2011年在海量数据处理领域,Hadoop是人们津津乐道的技术,Hadoop不仅可以用来存储海量数据,还以用来计算海量数据。因为其高吞吐、高可靠等特点,很多互联网公司都已经使用Hadoop来构建数据仓库,高频使用并促进了Hadoop生态圈的各项技术的发展。一般来讲,根据业务需求,数据的处理可以分为离线处理和实时处理,在离线处理方面Hadoop提供了很好的解决方案,但是针对海量数据的实时处理却一直没有比较好的解决方案。就在人们翘首以待的时间节点,storm横空出世,与生俱来的分布式、高可靠、高吞吐的特性,横扫市面上的一些流式计算框架,渐渐的成为了流式计算的首选框架。如果庞麦郎在的话,他一定会说,这就是我要的滑板鞋!

上图是流式分析的一般架构图,抽象出四个步骤就是数据采集、数据缓冲、数据处理、数据输出。一般情况下,我们采用Flume+kafka+Storm+Redis的结构来进行流式数据分析。实时部分的课程主要是针对Kafka、Storm进行学习

1.2、流式计算可以用来干什么

一淘-实时分析系统:实时分析用户的属性,并反馈给搜索引擎。最初,用户属性分析是通过每天在云梯上定时运行的MR job来完成的。为了满足实时性的要求,希望能够实时分析用户的行为日志,将最新的用户属性反馈给搜索引擎,能够为用户展现最贴近其当前需求的结果。

携程-网站性能监控:实时分析系统监控携程网的网站性能。利用HTML5提供的performance标准获得可用的指标,并记录日志。Storm集群实时分析日志和入库。使用DRPC聚合成报表,通过历史数据对比等判断规则,触发预警事件。

一个游戏新版本上线,有一个实时分析系统,收集游戏中的数据,运营或者开发者可以在上线后几秒钟得到持续不断更新的游戏监控报告和分析结果,然后马上针对游戏的参数和平衡性进行调整。这样就能够大大缩短游戏迭代周期,加强游戏的生命力。

实时计算在腾讯的运用:精准推荐(广点通广告推荐、新闻推荐、视频推荐、游戏道具推荐);实时分析(微信运营数据门户、效果统计、订单画像分析);实时监控(实时监控平台、游戏内接口调用)

为了更加精准投放广告,阿里妈妈后台计算引擎需要维护每个用户的兴趣点(理想状态是,你对什么感兴趣,就向你投放哪类广告)。用户兴趣主要基于用户的历史行为、用户的实时查询、用户的实时点击、用户的地理信息而得,其中实时查询、实时点击等用户行为都是实时数据。考虑到系统的实时性,阿里妈妈使用Storm维护用户兴趣数据,并在此基础上进行受众定向的广告投放。

1.3、Storm核心技术点

基础技术点

linux环境准备、zookeeper集群搭建、Storm集群搭建、Storm配置文件配置项讲解、集群搭建常见问题解决。

Storm练习案例

根据蚂蚁金服提供的最新数据,今年双十一的交易峰值为8.59万笔/秒,是去年3.85万笔/秒的2.23倍。这一数据也超过了6万笔/秒的预估。如何实时的计算订单金额,让公司领导层看到呢?

(图为双十一支付宝成交金额)

Storm基础及原理

Storm常用组件和编程API:Topology、 Spout、Bolt、Storm分组策略(stream groupings)、Storm项目maven环境搭建、使用Strom开发一个WordCount例子、Storm程序本地模式debug、Storm消息可靠性及容错原理、Storm任务提交流程、Strom消息容错机制。

(图为storm组件)

1.4、Kafka核心技术点

Storm结合消息队列Kafka:消息队列基本概念(Producer、Consumer、Topic、Broker等)、消息队列Kafka使用场景、Storm结合Kafka编程API、Kafka负载均衡、Kafka消息存储原理等。

(图为Kafka消息队列原理)

2.流式计算案例实战

实战案例部分主要有三个企业实战案列,分别是基于点击流的日志分析系统、基于系统日志的监控告警系统、基于订单系统的交易风控系统,三个案列是企业中的典型项目。学完此阶段能够独立根据企业的业务性质开发相关的storm程序。

学完此阶段可掌握的核心能力:

1、掌握企业核心业务需求

2、掌握实时系统常见的开发流程及运营经验

学完此阶段可解决的现实问题:

可以独立开发storm程序来满足业务需求

学完此阶段可拥有的市场价值:

熟练学习和掌握后,可满足企业开发的初级需求,根据市场反馈数据看,薪资普遍在 15000-18000元/月。

2.1、案例:流量日志分析

流量日志分析之漏斗模型:大型电商网站,上亿规模的用户,千万级别的活跃用户,如何评估一个商品专题页面的效果好不好呢?比如:浏览次数、加入购物车次数、下单次数、支付次数、完成。

(图为日志分析漏斗模型-数据部必备)

流量日志分析之基础数据分析:电商网上商品数量在千万级别,店铺数量在百万级别,如何实时的计算一个每个商品页的访问数、用户数、来源信息等基础信息呢?如何实时的计算每个店铺的访问数、用户数、来源信息等基础数据呢?

(图为页面浏览分析-数据部必备)

2.2、案例:统一监控告警系统

随着公司业务发展,支撑公司业务的各种系统越来越多,为了保证公司的业务正常发展,急需要对这些线上系统的运行进行监控,做到问题的及时发现和处理,最大程度减少对业务的影响。不同业务的会有几十上百台服务器去支撑,大型企业可能是成千上万台服务器,那么每台服务器的硬件状态、业务应用状态如何实时的监控,做到及时发现,快速解决问题呢?

(图为企业产生日志的系统清单)

统一监控系统触发的短信告警

统一监控系统触发的邮件告警

2.3、案例:交易风控系统

电子商务是以互联网络为平台的贸易新模式,它的一个最大特点是强调参加交易的各方和所合作的伙伴都要通过Internet密切结合起来,共同从事在网络环境下的商业电子化应用。用户信息容易受到计算机病毒、黑客的攻击,商业信息和数据易于搭截侦听、口令试探和窃取,为了防止用户信息异常给商家和用户带来不必要的损失,企业期望针对用户的订单进行分析,对触发规则的订单进行风险预警,在必要情况下进行拦截及锁定订单。

(图为订单异常拦截)

4.Spark内存计算阶段

学完此阶段可掌握的核心能力:

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并编写实时计算程序。

学完此阶段可解决的现实问题:

熟练使用Scala快速开发Spark大数据应用,通过计算分析大量数据,挖掘出其中有价值的数据,为企业提供决策依据。

学完此阶段可拥有的市场价值:

学习完spark并掌握其内容,将具备中级大数据工程师能力,薪水可以达到 20K~25K。

1.Scala函数式编程

介绍:Scala是一门集面向对象和函数式编程与一身的编程语言,其强大的表达能力、优雅的API、高效的性能等优点受到越来越多程序员的青睐。Spark底层就是用Scala语言编写,如果想彻底掌握Spark,就必须学好Scala。

案例:Scala编程实战,基于Akka框架,编写一个简单的分布式RPC通信框架

2.使用Spark处理离线数据

介绍:Spark是基于内存计算的大数据并行计算框架,具有高容错性和高可伸缩性,可以在大量廉价硬件之上部署大规模集群,在同等条件下要比Hadoop快10到100倍。

3.使用Spark SQL处理结构化数据

介绍:Spark SQL的前身是Shark,专门用来处理结构化的数据,类似Hive,是将SQL转换成一系列RDD任务提交到Spark集群中运行,由于是在内存中完成计算,要比hive的性能高很多,并且简化了开发Spark程序的难度同时提高了开发效率。

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完美融合

5.Spark综合项目:

介绍:该项目使用了Spark SQL和Spark Streaming对游戏整个生命周期产生的数据进行了分析,从玩家第一次登录游戏到每天产生的游戏日志,通过大量的数据来分析该游戏的运营情况和玩家的各种行为:如活跃用户、用户留存、充值比例、游戏收人、外挂分析等。

通过玩家登录游戏产生的数据分析一天之内各个时间段进入游戏的情况

通过玩家登陆游戏产生的数据分析玩家在全国地区的分步情况,调整广告投放策略

用户留存指标可以分析游戏对玩家的吸引力,分析用户流失原因

用户等级信息可以分析玩家等等级分布情况、调整装备爆率和游戏难度

通过上面游戏各个数据指标的分析,可以让游戏运维者了解游戏的运维情况,为运维者提供各种个性化的调整策略,从而保证游戏健康、稳定的运营。


延展阅读:超越Spark,大数据集群计算的生产实践

李刚 译  CSDN大数据                    

Spark拥有一个庞大的、不断增长的社区,还有在企业环境中不可或缺的生态系统。这些生态系统提供了不同生产环境案例所需的许多功能。一般来说,Spark应用做的是机器学习算法、日志聚合分析或者商务智能相关的运算,因为它在许多领域都有广泛的应用,包括商务智能、数据仓库、推荐系统、反欺诈等。

 

本文会介绍Spark核心社区开发的生态系统库,以及ML/MLlib及Spark Streaming的Spark库的具体用法,对于企业的各种用例及框架也进行了说明。

 
数据仓库

对任何业务来说,数据分析都是一个核心环节。对分析型的应用来说,数据仓库系统就是其核心系统。Spark有众多的框架和生态系统,所以它能作为核心组件为企业环境提供数据仓库功能,如图1所示。

图1  Spark可以用作数据仓库核心组件

当然,与其他现有的工具相比,Spark提供的功能有较大不同。SQL是很多数据分析师、数据科学家和工程师使用的细粒度数据分析方法。Spark也可以用作数据仓库框架,支持SQL处理,名为SparkSQL。

Spark内核已经集成到其他分布式文件系统中,例如HDFS、S3。如果你的业务数据本来就保存在这样的系统中,很容易将现有业务流程转移到Spark环境,因为你只需要在数据存储系统上启动Spark集群即可。针对开发人员,Spark还提供了一个友好的API,可以用数据科学家们喜爱的Python和R来访问它。这个功能存在很长一段时间了。如果你习惯使用这些语言,那么选择Spark作为自己的数据仓库引擎还是很容易的。

你可以使用熟悉的接口在Spark上处理更大的数据集。SparkSQL特有的接口是DataFrame(数据帧),这是受R语言启发而引入的。建议使用这个接口来访问结构化数据。我们将在下一节详细介绍DataFrame。先来看一个纯SQL接口。Spark大致提供了三种类型的DW(数据仓库)功能:SparkSQL、DataFrame及Hive On Spark。如前所述,尽管DataFrame一开始是使用SparkSQL来开发的,但它与机器学习管道的关联度更高。我们将把它与ML / MLlib放到一起介绍。本节介绍SparkSQL和Hive on Spark,重点关注怎样配置集群。在尝试Spark的这些SQL功能之前,需要下载带Hive profile(配置)的预编译包,或者用Hive profile去构建这个包。如果你要自己创建,可以使用如下命令:

$ build/mvn -Pyarn -Phive -Phive-thriftserver \

                  -PHadoop-2.6.0 -DHadoop.version=2.6.0 \

                  -DskipTests clean package

一定要安装Zinc,它是一个长时运行的服务器程序,用于sbt的增量编译。如果你用的是OS X系统,可以用命令brew install zinc来安装它。

在运行这条命令后,可以得到一个带有Hive类的Spark二进制包。你或许会发现能用-P配置及-DHadoop.version环境变量轻松选择Hadoop版本。最好依据Hadoop集群及Hive功能选择你所需要的版本。换句话说,如果想在Hadoop 2.7.0上运行Hive 0.13,可以使用如下命令:

$ build/mvn -Pyarn -Phive -Phive-thriftserver \

                  -PHadoop-2.7.0 -DHadoop.version=2.7.0 \

                  -DskipTests clean package

Hive on Spark

Hive是用于管理分布式存储(例如HDFS)中的大型数据集的数据仓库软件。Hive一开始被开发来作为生成Hadoop MapReduce数据处理任务的简单接口。Hive有很长的历史,差不多跟Hadoop一样悠久。之后,一个更灵活、可靠的框架Tez被引入进来,它曾试图取代MapReduce框架。Apache Tez是一个比MapReduce更复杂的通用执行引擎。由于Tez旨在成为通用的执行引擎,如果正确地创建了执行计划,我们就能用它作为SQL执行引擎。从Hive 1.1开始,Hive也支持将Spark作为查询执行引擎。这意味着Hive目前支持三个执行引擎:Hadoop MapReduce、Tez和Spark。虽然Hive还没有全部完成,仍然在开发过程中(详情及进度可以查看Hive-7292),但是现在Hive能充分利用Spark的速度及可靠性。下面是在本地机器上使用Hive on Spark的步骤。

首先,需要启动Spark集群。请注意,你必须下载不包含Hive JAR包的Spark版本。为了从Spark二进制包中排除Hive JAR包,输入下面的命令:

$ ./make-distribution.sh --name Hadoop2-without-hive \

                                  --tgz -Pyarn -PHadoop-2.6 \

                                  -Pparquet-provided

用这个命令可以编译你自己的不含Hive JAR的Spark二进制包。但是在YARN上启动Spark集群最简单的方法是使用Spark目录下的ec2脚本:

$ ./ec2/spark-ec2 -key-pair= \

                          -identity-file= \

                          --region=us-east-1 --zone=us-east-1a \

                          -hadoop-major-version=yarn \

                          launch hive-on-spark-cluster

关于如何使用spark-ec2脚本,可参考Spark官方文档(https://Spark. apache.org/docs/latest/ec2-scripts.html)。这个脚本是为了在EC2实例上更容易地启动Spark集群而写的。要使用它的话,需要有AWS账户,以及从AWS控制台获得AWS密钥对。详情请阅读上述官方文档。

几分钟后,你就有一个运行在YARN上的Spark集群了。这个集群默认不含Hive。你需要在此Spark集群上安装Hive包。可以将Hive下载到Spark master服务器上,然后通过Hive CLI(命令行接口)来启动:

wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/hive/hive-1.1.1/

apache-hive-1.1.1-bin.tar.gz

$ tar zxvf apache-hive-1.1.1-bin-tar.gz

$ cd apache-hive-1.1.1-bin.tar.gz

$ bin/hive

hive> set Spark.home=/location/to/SparkHome;

hive> set hive.execution.engine=Spark;

当你试着按照上述过程使用Hive on Spark的时候,可能会遇到麻烦。因为有一些情况下,当你自己启动Hadoop集群的时候,Hadoop和Hive的版本之间会发生冲突。所以,应该考虑使用CDH及HDP这样的发行版,它们包含Spark和Hive,而且所有组件之间的兼容性与功能都是经过测试的,这是最便捷的途径。但是这些系统还在不断发展,并且组件间会有比较复杂的依赖关系,因此有必要了解组件间的依赖关系。

 
机器学习

在大数据领域的下一代数据处理技术中,机器学习扮演了重要角色。当收集大量的数据时,对系统性能会有显著影响。这意味着,收集大量的关于处理能力的数据,可以使一个机器学习模型更加出色。通过提供一种简单而通用的分布式框架,Hadoop及其生态系统实现了基本的环境(用大数据做机器学习)。Spark进一步推动了这种趋势。所以,在本章中我们要关注的是,对机器学习算法的使用和创建流程的一些具体工作。当然,对机器学习而言,Spark还有很多地方有待完善。但它的内存处理(on-memory processing)体系结构很适合解决机器学习问题。本节我们的下一个案例将重点看一看Spark中的ML(机器学习)。对开发者来说,机器学习本身需要一定的数学背景及复杂的理论知识,乍一看并不是那么容易。只有具备一些知识和先决条件,才能在Spark上高效地运行机器学习算法。

一些主要的机器学习概念包括:

  • DataFrame框架:它使创建及操作现实中的结构化数据更简单。这个框架提供了一个先进的接口,有了它,我们就不用关心每一种机器学习算法及其优化机制之间的差异。由于这种固定的数据模式(data schema),DataFrame能根据数据优化自己的工作负载。

  • MLlib和ML:集成到Spark内的核心机器学习框架。这些框架从本质上来说是Spark外部的框架,但是由于它们由Spark的核心提交者(committer)团队所维护,它们是完全兼容的,并且可以经由Spark内核无缝使用。

  • 其他可用于Spark的外部机器学习框架:包括Mahout及Hivemall。它们都支持目前的Spark引擎。在一些MLlib及ML无法满足的情况下,可以选择这些外部库。

 
外部的框架

Spark社区提供了大量的框架和库。其规模及数量都还在不断增加。在本节中,我们将介绍不包含在Spark 核心源代码库的各种外部框架。Spark试图解决的问题涵盖的面很广,跨越了很多不同领域,使用这些框架能帮助降低初始开发成本,充分利用开发人员已有的知识。

  • Spark Package:要使用Spark库,你首先必须了解的东西是Spark package。它有点像Spark的包管理器。当你给Spark集群提交job时,你可以到存放Spark package的网站下载任何package。所有package都存放在这个站点。

  • XGBoost:XGBoost是一个专用于分布式框架的优化库。这个框架由DMLC(Distributed Machine Learning Community,分布式机器学习社区)开发。顾名思义,在DMLC项目下有许多机器学习库,它们在Hadoop和Spark等已有资源上具有高扩展性。XGBoost是基于Gradient Boosting(梯度提升)算法的。

  • spark-jobserver:提交job的流程需要改进,因为对于非工程师来说,这项工作有点难。你需要理解如何用命令行或者其他UNIX命令去提交Spark job。Spark项目现在是使用CLI来提交job的。spark-jobserver提供了一个RESTful API来管理提交到Spark集群的job。因此,这意味着可以在企业内部环境中将Spark作为一个服务启动。

 
未来的工作

你可能对使用Spark服务比较感兴趣。Spark已经提供了很多功能,例如SQL执行、流处理以及机器学习。Spark也有一个好用的界面,而且背后有强大的社区,开发者十分活跃,这也是人们对Spark寄予厚望的原因。下面我们将介绍一些当前正在进行中的Spark项目。

Spark目前使用的主要数据结构是RDD和DataFrame。RDD是一个原创的概念,而DataFrame是后来引入的。RDD相对灵活。你可以在RDD结构上运行许多类型的转换与计算。然而,因为它太灵活了,所以很难对其执行进行优化。另一方面,DataFrame有一定的固定结构,能利用它来优化DataFrame数据集上的执行。但是,它不具备RDD的优点,主要是没有RDD的灵活性。RDD与DataFrame的主要区别如表2所示。

表2  RDD与DataFrame的区别

与参数服务器集成

在介绍参数服务器的实现之前,有必要厘清分布式机器学习的相关概念,例如并行。参数服务器的目标与已有数据库是不同的,它们为大规模机器学习而开发。在大规模机器学习中有两种并行类型:数据并行(data parallelism)及模型并行(model parallelism)。

数据并行

数据并行侧重于把数据分发到集群不同的计算资源上。通常,用于机器学习的训练数据量非常庞大,仅仅单台节点机器在内存中是无法保存所有数据的,甚至在磁盘上也无法保存全部的数据。这是一种SIMD(单指令多数据流)处理类型。包括Spark MLlib及ML在内的大多数分布式机器学习框架都实现了数据并行。虽然数据并行很简单且易于实现,但是数据并行的收集任务(在前面的例子中,就是指计算平均值)会导致性能瓶颈,因为这个任务必须等待分布在集群中的其他并行任务完成后才能执行。

模型并行

模型并行与数据并行差别很大。不同的机器用相同的数据训练。然而,一个模型分布在多台机器上。深度学习的模型往往很大,因为许多参数常常不是在一台机器上的。模型并行就是将单个模型分为多个分片。一个节点维护一个模型分片。另一方面,每个训练进程能异步更新模型。框架必须对此进行管理以便于保持模型的一致性。实现这个过程的框架,特别是在机器学习领域,叫作“参数服务器”(parameter server)。深度学习尤其要求实现模型并行,因为深度学习需要用到更多数据,而这意味着最终需要更多参数。

参数服务器与Spark

如前所述,原始的参数服务器是为模型并行处理而开发出来的。Spark MLlib的大部分算法当前在处理数据时仅仅是数据并行,而不是模型并行。为了以一种通用的方式实现模型并行,人们研究和开发出更高效的参数服务器架构。参数服务器是在RAM(随机访问存储)上存放以及更新分布式集群中的模型的。而模型更新常常是分布式机器学习过程的瓶颈所在。SPARK-6932是一个用于研究参数服务器潜在能力的ticket,也是对各种实现的比较。此外,Spark项目在尝试基于这项研究去实现它自己的“参数服务器”。已经有人提供了Spark上的参数服务器,参见 https://github.com/chouqin/spark/tree/ps-on-Spark-1.3。

深度学习

深度学习因其高准确率及通用性,成为机器学习中最受关注的领域。这种算法在2011—2012年期间出现,并超过了很多竞争对手。最开始,深度学习在音频及图像识别方面取得了成功。此外,像机器翻译之类的自然语言处理或者画图也能使用深度学习算法来完成。深度学习是自1980年以来就开始被使用的一种神经网络。神经网络被看作能进行普适近似(universal approximation)的一种机器。换句话说,这种网络能模仿任何其他函数。深度学习可以看作是组合了许多神经网络的一种深度结构。

如前面提到的参数服务器,与其他已有的机器学习算法相比,深度学习需要大量参数及训练数据。这也是我们介绍能在Spark上运行的深度学习框架的原因。要想在企业环境中稳定地进行深度学习的训练,必须要有一个可靠而快速的分布式引擎。Spark被视为目前最适合运行深度学习算法的平台,是因为:

  • 基于内存的处理架构对于使用机器学习的迭代计算,特别是深度学习,十分适合。

  • Spark的几个生态系统如MLlib及Tachyon对于开发深度学习模型很有用。

下面是一些Spark能用的深度学习框架。这些框架和深度学习一样,都是比较新的库。

  • H2O:H2O是用h2o.ai开发的具有可扩展性的机器学习框架,它不限于深度学习。H2O支持许多API(例如,R、Python、Scala和Java)。当然它是开源软件,所以要研究它的代码及算法也很容易。H2O框架支持所有常见的数据库及文件类型,可以轻松将模型导出为各种类型的存储。

  • deeplearning4j:deeplearning4j是由Skymind开发的,Skymind是一家致力于为企业进行商业化深度学习的公司。deeplearning4j框架是创建来在Hadoop及Spark上运行的。这个设计用于商业环境而不是许多深度学习框架及库目前所大量应用的研究领域。

  • SparkNet:这是本文介绍的最新的库。SparkNet由加州大学伯克利分校AMP实验室于2015年11月发布。而Spark最早就是由AMP实验室开发的。因此,说SparkNet 是“运行在Spark上的官方机器学习库”一点儿也不为过。此库提供了读取RDD的接口,以及兼容深度学习框架Caffe(http://caffe.berkeleyvision.org/)的接口。SparkNet通过采用随机梯度下降(Stochastic Gradient Descent)获得了简单的并行模式。SparkNet job能通过Spark-submit提交。

 
Spark在企业中的应用

在最后,我们想聊一聊遇到的一些企业实际用例。虽然有些内容属于公司机密不便公开,但是我们想解释清楚Spark能做什么以及怎样才能充分利用Spark。以下都是我们公司的实际用例。

用Spark及Kafka收集用户活动日志

收集用户活动日志能帮助提高推荐的准确性以及将公司策略的效果以可视化形式呈现。Hadoop和Hive主要就用在这个领域。Hadoop是唯一能处理像活动日志这样的海量数据的平台。借助Hive接口,我们能交互式做一些分析。但是这个架构有三个缺点:

  • Hive做分析很耗时。

  • 实时收集日志有难度。

  • 需要对每个服务日志分别进行烦琐的分析。

为了解决这些问题,这家公司考虑引进Apache Kafka及Spark。Kafka是用于大数据传送的队列系统(见图3)。Kafka自己不处理或转换数据,它使大量的数据从一个数据中心可靠地传送到另一个数据中心成为可能。因此,它是构建大规模管道架构不可或缺的平台。

图3 Kafka和Spark Steaming的体系结构概览

Kafka有一个叫作主题(topic)的单元,带有偏移量及复制管理功能。通过topic及一组名为ConsumerGroup的读取器,我们就能获得不同类型的日志单元。为了做实时处理,我们采用Spark的流处理模块Spark Streaming。严格来说,Spark Streaming是一个微批量框架。微批量框架将流分为小数据集,对这些小集合运行批量处理进程。因此就处理算法而言,批处理跟微批量处理没有什么不同。这是我们采用Spark Streaming而不是Storm或者Samza之类的其他流式处理平台的一个主要原因。我们能方便地把当前的逻辑转换为Spark Streaming。由于引入了这个架构,我们能获得如下结果:

  • 用Kafka管理数据的终结。Kafka自动删除过期的不需要的数据。我们无须处理这些事情。

  • 使数据保存到存储(HBase)上的时间缩到最短。我们可以把这个时间从2小时缩短到10~20秒。

  • 由于将一些过程转换为Spark Streaming,所以减少了可视化的时间。我们能使这个时间从2小时缩减到5秒。

Spark Streaming很好用,因为它的API基本与Spark相同。因此,熟悉Scala的用户会很习惯Spark Streaming,而且Spark Streaming也能非常容易地无缝用在Hadoop平台(YARN)上,不到1个小时就能创建一个做Spark Streaming 的集群。但需要注意的是,Spark Streaming与普通Spark job不一样,它会长期占用CPU及内存。为了在固定时间里可靠地完成数据处理,做一些调优是必要的。如果用Spark Streaming不能非常快地做流式处理(秒级以下的处理),我们推荐你考虑其他流式处理平台,比如Storm和Samza。

用Spark做实时推荐

机器学习需求最旺盛的领域就是推荐。你可以看到许多推荐案例,比如电子商务、广告、在线预约服务等。我们用Spark Streaming和GraphX做了一个售卖商品的推荐系统。GraphX是用于分布式图处理的库。这个库是在一个Spark项目下开发的。我们可以用一种称为弹性分布式属性图(resilient distributed property graph)的RDD来扩展原始RDD。GraphX提供了对这个图的基本操作,以及类似Pregel的API。

我们的推荐系统如下。首先从Twitter收集每个用户的推文(tweet)数据。接着,用Spark Streaming做接下来的微批量处理,每5秒收集一次推文并进行处理。由于推文是用自然语言写的(在本例中为日语),所以需要用形态分析(morphological analysis)把每个单词分离开。在第二阶段,我们用Kuromoji去做这个分离。为了与我们的商品数据库建立关系,需要为Kuromoji创建用户定义字典。这是获取有意义的推荐最重要的一点(见图4)。

图4 Spark Streaming

在第三阶段,我们根据每个单词与商品的关系计算出一个分值。我们还必须调整用户定义字典,使单词与商品之间的相关性更好。特别地,我们删除了非字母字符,并且增加特别的相关词汇。在这个阶段之后,我们就获得一个从每条推文中收集到的词的集合。但是这个集合中还有与我们的商品不相关的词。因此在第四阶段,我们用SVM过滤出与商品相关的词语,以有监督学习方式(supervised learning)训练SVM:标签0表示不相关的推文;标签1表示相关的推文。创建了有监督学习的数据后,就开始训练模型。接着我们从原始数据提取出相关的推文。最后一步就是分析商品条目与单词的相关度。如果聚类成功,就能推荐相同聚类中的另一个商品给用户(见图5)。

图5 Spark Steaming分析单词的相关性

虽然主要的麻烦之处在于创建用户定义字典,但是关于Spark Streaming也有一些地方需要注意:

  • Map#filterKeys和Map#mapValues不可序列化——在Scala 2.10中不能使用这些transformation。由于Spark 1.1依赖于Scala 2.10,所以我们不能用这些函数。这个问题在Scala 2.11中已经解决。

  • DStream的输出操作受限制——在目前的DStream.print、saveAsText Files、saveAasObjectFiles、saveAsHadoopFiles与foreachRDD中没有太多的输出操作。在其他方法中,什么操作都会有副作用。例如,println在map函数上就没有效果。这为调试带来了困难。

  • 无法在StreamContext中创建新的RDD——DStream是RDD的连续序列。我们能轻松分离或者转换这个初始的RDD,但是在StreamContext中创建一个全新的RDD则很难。

在这个系统中,我们使用了Spark Streaming、GraphX及Spark MLlib。虽然也能用Solr作为搜索引擎,但是Spark库几乎提供了所有功能。这是Spark最强的特性之一,其他框架则达不到同样的效果。

Twitter Bots的实时分类

这可能是一种关于兴趣爱好的项目。我们已经分析了游戏角色的Twitter聊天机器人(Twitter Bot),并且可视化了Bot账户之间的关系。与前面例子类似,我们用Spark Streaming收集推文数据。游戏角色的名字可能有不同的拼写形式。因此我们用搜索引擎Solr转换推文中独特的名字。在这个例子中我们觉得Spark Streaming的主要优点是,它已经实现了机器学习算法(MLlib)及图算法(GraphX)。因此我们能立即分析推文,不用准备其他库或编写算法。但是我们缺少数据去显示有意义的可视化结果。除此之外,从每个推文内容中提取出有意义的特征也不容易。这可能是由于当前我们手动搜索Twitter账户,推文数据不足而导致的。具体来说,Spark Streaming是一个可扩展的系统,能处理海量数据集。我们认为应该利用好Spark的可扩展能力。

 
总结

本文解释了Spark 核心社区开发的生态系统库,介绍了ML/MLlib及Spark Streaming的Spark 库的具体用法,对于企业的各种用例及框架也进行了介绍。希望对你的开发或日常的业务决策能有所帮助。Spark拥有灵活的架构,其社区也提供了大量生态系统框架,这一切使得Spark有广泛的应用场景。我们能从spark-packages上注册的包数量中看到Spark社区的活跃度。截至2017年2月3日,注册的包的数量已达到319个。

图6 发展中的Spark

Spark社区是一个欣欣向荣的开源社区,Spark社区在不远的未来肯定会发生变化。

本文节选并整理自《Spark:大数据集群计算的生产实践》一书,Ilya Ganelin(伊利亚·甘列林)等著,李刚译,周志湖审校。点击阅读原文了解图书详情。

 

 

新一代技术+商业操作系统:

AI-CPS OS    

 

新一代技术+商业操作系统(AI-CPS OS:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。

 

AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。

 

领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:

  1. 重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?

  2. 重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?

  3. 重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?

 

AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:

  1. 精细种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。

  2. 智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。

  3. 高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。

  4. 不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。

  5. 边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。

     

AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:

  1. 创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;

  2. 对现有劳动力和实物资产进行有利的补充和提升,提高资本效率

  3. 人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间

 

给决策制定者和商业领袖的建议:

  1. 超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;

  2. 迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新

    评估未来的知识和技能类型;

  3. 制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开

    发过程中确定更加明晰的标准和最佳实践;

  4. 重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临

    较高失业风险的人群;

  5. 开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。

 

 

子曰:“君子和而不同,小人同而不和。”  《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。

 

如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!

 

新一代技术+商业操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。

 

 

本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!

 



版权声明产业智能官(公众号ID:AI-CPS推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com



阅读原文

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权