大数据概述前世今生处理流程学习路线开发工具详解

Posted cui_yonghua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据概述前世今生处理流程学习路线开发工具详解相关的知识,希望对你有一定的参考价值。

一、 什么是大数据?

大数据是无法使用传统计算技术处理的大型数据集的集合。它不是单一的技术或工具,而是已成为一个完整的主题,涉及各种工具,技术和框架。

全球数据的90%是在最近十年中产生的。

1.1 大数据的好处

  • 利用像微信这样的社交网络中保存的信息,营销机构正在了解有关其活动,促销和其他广告媒介的响应。
  • 产品公司和零售组织利用社交媒体中的信息(如消费者的喜好和产品认知度)来计划生产。
  • 利用有关患者先前病史的数据,医院将提供更好,更快捷的服务。

1.2 大数据的5个V

IBM提出了大数据的5V个特点:
Volume:数据量大,采集规模、存储规模和计算规模都非常大,一般以TB或者PB作为计量单位。
Variety:数据类型繁多,具体体现在结构化,半结构化与非结构化等种类,如日志,音频,视频,图片,地理信息等。
Velocity:处理速度快,数据产生和处理的速度快,时效性高;
Value:价值密度低,在海量信息中,真正有价值的信息很少。如何通过数据挖掘手段,在垃圾中发现黄金,是大数据需要处理的问题;
Veracity:真实性,全量数据反映了事物的客观性与真实性。

1.3 大数据之下是什么?

大数据涉及不同设备和应用程序产生的数据。以下是大数据领域的一些领域。

  • 黑匣子数据 - 它是直升机,飞机和喷气式飞机等的组成部分。它捕获飞行机组人员的声音,麦克风和耳机的录音以及飞机的性能信息。
  • 社交媒体数据 - 诸如Facebook和Twitter,微信之类的社交媒体拥有信息以及全球数百万人发布的观点。
  • 证券交易所数据 -证券交易所数据包含有关客户在不同公司股份中做出的“购买”和“出售”决策的信息。
  • 电网数据 -电网数据保存特定节点相对于基站消耗的信息。
  • 运输数据 -运输数据包括车辆的型号,容量,距离和可用性。
  • 搜索引擎数据 -搜索引擎从不同的数据库中检索大量数据。

因此,大数据包括海量,高速和可扩展的各种数据。其中的数据将分为三种类型。

  • 结构化数据-关系数据。
  • 半结构化数据-XML数据。
  • 非结构化数据-Word,PDF,文本,媒体日志。

二、大数据的前世今生

源起:Google2004年发表了3篇论文(三驾马车),分别是分布式文件系统GFS, 大数据分布式计算框架MapReduce和NoSQL数据库系统BigTable。

搜索引擎最要做两件事情,一个是网页抓取,一个是索引构建。这个过程中,需要存储和计算大量的数据

Yahoo的一些工程师觉得用MapReduce进行大数据编程太麻烦了,便开发了Pig,pig是一种脚本语言,使用类SQL语法,开发者可以用pig脚本描述要在大数据上进行的操作,pig经过编译后会生成MapReduce程序,再在hadoop上运行。依旧要学习新的脚本语法。

于是facebook又发布了hive, 支持使用hive来进行大数据计算,比如写select语句进行大数据查询,hive会把sql语句转化成mapreduce的计算程序。这样只要熟悉数据库,就可以无门槛使用大数据进行分析和处理了,hive的出现极大的降低了hadoop的使用难度。据说2011年facebook大数据平台运行的作业90%都来源于hive。

随后,hadoop周边产品开始出现,其中包括:
专门将关系数据库中的数据导入导出到hadoop平台的Sqoop;
针对大规模日志进行分布式收集,聚合和传输的Flume;
MapReduce工作流调度引擎Oozie等;
将mapreduce的执行引擎和资源调度分离,这就是Yarn;

2002年,内存已经突破容量和成本限制,成为数据运行过程中的主要存储介质。spark一经推出,拥有更快的执行速度和更友好的编程接口,立刻收到业界的追捧,并逐步替代MapReduce在企业中的地位。

批处理计算:MapReduce,Spark;
流处理计算:Storm, Spark Streaming, Flink

Hbase是从Hadoop中分离出来的,基于HDFS的NoSQL系统

如果我们将大数据计算比作烹饪,那么数据就是食材而Hadoop分布式文件系统HDFS就是烧菜的那口大锅。厨师来来往往,食材进进出出,各种菜肴层出不穷,不变的则是那口大锅,大数据也是如此。各种计算框架,各种算法,各种应用场景不断推陈出新,让人眼花缭乱,但是大数据存储到王者依然是FDFS。

三、大数据处理流程

大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。

3.1 数据收集

大数据处理的第一步是数据的收集。现在的中大型项目通常采用微服务架构进行分布式部署,所以数据的采集需要在多台服务器上进行,且采集过程不能影响正常业务的开展。基于这种需求,就衍生了多种日志收集工具,如 Flume 、Logstash、Kibana 等,它们都能通过简单的配置完成复杂的数据收集和数据聚合。

3.2 数据存储

收集到数据后,下一个问题就是:数据该如何进行存储?通常大家最为熟知是 mysql、Oracle 等传统的关系型数据库,它们的优点是能够快速存储结构化的数据,并支持随机访问。但大数据的数据结构通常是半结构化(如日志数据)、甚至是非结构化的(如视频、音频数据),为了解决海量半结构化和非结构化数据的存储,衍生了 Hadoop HDFS 、KFS、GFS 等分布式文件系统,它们都能够支持结构化、半结构和非结构化数据的存储,并可以通过增加机器进行横向扩展。

分布式文件系统完美地解决了海量数据存储的问题,但是一个优秀的数据存储系统需要同时考虑数据存储和访问两方面的问题,比如你希望能够对数据进行随机访问,这是传统的关系型数据库所擅长的,但却不是分布式文件系统所擅长的,那么有没有一种存储方案能够同时兼具分布式文件系统和关系型数据库的优点,基于这种需求,就产生了 HBase、MongoDB。

3.3 数据分析

大数据处理最重要的环节就是数据分析,数据分析通常分为两种:批处理和流处理。

  • 批处理:对一段时间内海量的离线数据进行统一的处理,对应的处理框架有 Hadoop MapReduce、Spark、Flink 等;
  • 流处理:对运动中的数据进行处理,即在接收数据的同时就对其进行处理,对应的处理框架有 Storm、Spark Streaming、Flink Streaming 等。

批处理和流处理各有其适用的场景,时间不敏感或者硬件资源有限,可以采用批处理;时间敏感和及时性要求高就可以采用流处理。随着服务器硬件的价格越来越低和大家对及时性的要求越来越高,流处理越来越普遍,如股票价格预测和电商运营数据分析等。

上面的框架都是需要通过编程来进行数据分析,那么如果你不是一个后台工程师,是不是就不能进行数据的分析了?当然不是,大数据是一个非常完善的生态圈,有需求就有解决方案。为了能够让熟悉 SQL 的人员也能够进行数据的分析,查询分析框架应运而生,常用的有 Hive 、Spark SQL 、Flink SQL、 Pig、Phoenix 等。这些框架都能够使用标准的 SQL 或者 类 SQL 语法灵活地进行数据的查询分析。这些 SQL 经过解析优化后转换为对应的作业程序来运行,如 Hive 本质上就是将 SQL 转换为 MapReduce 作业,Spark SQL 将 SQL 转换为一系列的 RDDs 和转换关系(transformations),Phoenix 将 SQL 查询转换为一个或多个 HBase Scan。

3.4 数据应用

数据分析完成后,接下来就是数据应用的范畴,这取决于你实际的业务需求。比如你可以将数据进行可视化展现,或者将数据用于优化你的推荐算法,这种运用现在很普遍,比如短视频个性化推荐、电商商品推荐、头条新闻推荐等。当然你也可以将数据用于训练你的机器学习模型,这些都属于其他领域的范畴,都有着对应的框架和技术栈进行处理,这里就不一一赘述。

3.5 其他框架

上面是一个标准的大数据处理流程所用到的技术框架。但是实际的大数据处理流程比上面复杂很多,针对大数据处理中的各种复杂问题分别衍生了各类框架:

  • 单机的处理能力都是存在瓶颈的,所以大数据框架都是采用集群模式进行部署,为了更方便的进行集群的部署、监控和管理,衍生了 Ambari、Cloudera Manager 等集群管理工具;
  • 想要保证集群高可用,需要用到 ZooKeeper ,ZooKeeper 是最常用的分布式协调服务,它能够解决大多数集群问题,包括首领选举、失败恢复、元数据存储及其一致性保证。同时针对集群资源管理的需求,又衍生了 Hadoop YARN ;
  • 复杂大数据处理的另外一个显著的问题是,如何调度多个复杂的并且彼此之间存在依赖关系的作业?基于这种需求,产生了 Azkaban 和 Oozie 等工作流调度框架;
  • 大数据流处理中使用的比较多的另外一个框架是 Kafka,它可以用于消峰,避免在秒杀等场景下并发数据对流处理程序造成冲击;
  • 另一个常用的框架是 Sqoop ,主要是解决了数据迁移的问题,它能够通过简单的命令将关系型数据库中的数据导入到 HDFS 、Hive 或 HBase 中,或者从 HDFS 、Hive 导出到关系型数据库上。

四、学习路线

介绍完大数据框架,接着就可以介绍其对应的学习路线了,主要分为以下几个方面:

4.1 语言基础

4.1.1. Java

大数据框架大多采用 Java 语言进行开发,并且几乎全部的框架都会提供 Java API 。Java 是目前比较主流的后台开发语言,所以网上免费的学习资源也比较多。
目前大多数框架要求 Java 版本至少是 1.8,这是由于 Java 1.8 提供了函数式编程,使得可以用更精简的代码来实现之前同样的功能,比如你调用 Spark API,使用 1.8 可能比 1.7 少数倍的代码。

4.1.2 Scala

Scala 是一门综合了面向对象和函数式编程概念的静态类型的编程语言,它运行在 Java 虚拟机上,可以与所有的 Java 类库无缝协作,著名的 Kafka 就是采用 Scala 语言进行开发的。

为什么需要学习 Scala 语言 ? 这是因为当前最火的计算框架 Flink 和 Spark 都提供了 Scala 语言的接口,使用它进行开发,比使用 Java 8 所需要的代码更少,且 Spark 就是使用 Scala 语言进行编写的,学习 Scala 可以帮助你更深入的理解 Spark。

4.2 Linux 基础

通常大数据框架都部署在 Linux 服务器上,所以需要具备一定的 Linux 知识。Linux 书籍当中比较著名的是 《鸟哥私房菜》系列,这个系列很全面也很经典。

4.3 构建工具

这里需要掌握的自动化构建工具主要是 Maven。Maven 在大数据场景中使用比较普遍,主要在以下三个方面:

  • 管理项目 JAR 包,帮助你快速构建大数据应用程序;
  • 不论你的项目是使用 Java 语言还是 Scala 语言进行开发,提交到集群环境运行时,都需要使用 Maven 进行编译打包;
  • 大部分大数据框架使用 Maven 进行源码管理,当你需要从其源码编译出安装包时,就需要使用到 Maven。

五、 框架学习

5.1 框架分类

上面我们介绍了很多大数据框架,这里进行一下分类总结:

日志收集框架:Flume、Logstash、Filebeat

分布式文件存储系统:Hadoop HDFS

数据库系统:Mongodb、HBase

分布式计算框架

  • 批处理框架:Hadoop MapReduce
  • 流处理框架:Storm
  • 混合处理框架:Spark、Flink

查询分析框架:Hive 、Spark SQL 、Flink SQL、 Pig、Phoenix

集群资源管理器:Hadoop YARN

分布式协调服务:Zookeeper

数据迁移工具:Sqoop

任务调度框架:Azkaban、Oozie

集群部署和监控:Ambari、Cloudera Manager

上面列出的都是比较主流的大数据框架,社区都很活跃,学习资源也比较丰富。建议从 Hadoop 开始入门学习,因为它是整个大数据生态圈的基石,其它框架都直接或者间接依赖于 Hadoop 。接着就可以学习计算框架,Spark 和 Flink 都是比较主流的混合处理框架,Spark 出现得较早,所以其应用也比较广泛。 Flink 是当下最火热的新一代的混合处理框架,其凭借众多优异的特性得到了众多公司的青睐。

5.2 技术栈思维导图:

六、开发工具

这里推荐一些大数据常用的开发工具:

Java IDE:IDEA 和 Eclipse 都可以。从个人使用习惯而言,更倾向于 IDEA ;

VirtualBox:在学习过程中,你可能经常要在虚拟机上搭建服务和集群。VirtualBox 是一款开源、免费的虚拟机管理软件,虽然是轻量级软件,但功能很丰富,基本能够满足日常的使用需求;

MobaXterm:大数据的框架通常都部署在服务器上,这里推荐使用 MobaXterm 进行连接。同样是免费开源的,支持多种连接协议,支持拖拽上传文件,支持使用插件扩展;

Translate Man:一款浏览器上免费的翻译插件 (谷歌和火狐均支持)。它采用谷歌的翻译接口,准确性非常高,支持划词翻译,可以辅助进行官方文档的阅读。

以上是关于大数据概述前世今生处理流程学习路线开发工具详解的主要内容,如果未能解决你的问题,请参考以下文章

大数据概述前世今生处理流程学习路线开发工具详解

Spark的介绍:前世今生

解读大数据世界中MapReduce的前世今生

#yyds干货盘点# Spring Boot的前世今生以及它和Spring Cloud的关系详解。

嵌入式Linux开发的前世与今生——基本概述

大数据学习路线