相信很多学Java的同学都有想转大数据或者学大数据的想法,但是一看到网上那些大数据的技术栈,就一脸懵逼,什么Hadoop、HDFS、MapReduce、Hive、Kafka、Zookeeper、HBase、Sqoop、Flume、Spark、Storm、Flink等等技术。
童鞋们可能一下子就慌了,像学Java的也就SSM、Springboot、Spring Cloud、MySQL这些,线路清晰明了,所以学习起来相对也比较直白,但是大数据就不一样了,技术栈太多了,刚入门的时候可能就被吓在门外了。今天博主就以Java技术栈对比大数据技术栈,和大家介绍一下大数据的这些技术栈到底都是用来干嘛的。
架构图
在开始讲解之前,我们先来看一下,下面这副图:
Sqoop
我们按照图的顺序一个个来介绍,首先是Sqoop,Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。
如果非要从功能上面对比的话,和阿里的Canal组件很像,都是用来同步数据的。
Flume
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Flume的功能和ELK(日志实时检索系统)中的Logstash很像,都是用来传输和处理日志数据的。
Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
说白了就是一个MQ消息系统,和Java中常用RabbitMQ、RocketMQ是一样的,只是各自的侧重点不一样,Kafka侧重点在高吞吐量,可以处理海量的数据。
HDFS
Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
像Java项目不可避免的会涉及到文件上传下载,这个时候要么自己搭建一个分布式文件系统,要么使用第三方。 自己搭建的话一般有GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等,如果用第三方的一般会用七牛云、腾讯云OSS对象存储、阿里云OSS对象存储。
Hive
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。
如果对比Java的话,有点类似MySQL(不太准确),既可以存储表结构数据,又可以通过SQL来查询这些数据,只是不能进行修改,只能进行离线操作。
HBase
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。
HBase其实就是一种NoSQL,和Java中常用的Redis很像,只是他们的底层实现不一样而已。
Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Zookeeper在Java中也是很出名的,像基于Dubbo的注册中心一般都是用Zookeeper来实现的。同类的有:鼎鼎大名的微服务的注册中心Eureka、Consul之类的。
Hadoop
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
从Java的角度看Hadoop有点类似Spring Cloud,他们不仅仅只是一个具体的技术,而是一个生态圈,Hadoop中包含了Hive、MapReduce、HDFS等,所以不要把Hadoop看成仅仅只是一个单一的技术。
数据处理技术
像MapReduce、Spark、Storm/Flink都是用来处理数据的,比如数据清洗、计算、统计等等之类的。
MapReduce
MapReduce是面向大数据并行处理的计算模型、框架和平台,它隐含了以下三层含义:
- MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure)。它允许用市场上普通的商用服务器构成一个包含数十、数百至数千个节点的分布和并行计算集群。
- MapReduce是一个并行计算与运行软件框架(Software Framework)。它提供了一个庞大但设计精良的并行计算软件框架,能自动完成计算任务的并行化处理,自动划分计算数据和计算任务,在集群节点上自动分配和执行任务以及收集计算结果,将数据分布存储、数据通信、容错处理等并行计算涉及到的很多系统底层的复杂细节交由系统负责处理,大大减少了软件开发人员的负担。
- MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。它借助于函数式程序设计语言Lisp的设计思想,提供了一种简便的并行程序设计方法,用Map和Reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,以简单方便地完成大规模数据的编程和计算处理
额---》技术的概念一般都是严谨复杂的,这边简单概括就是MapReduce简称MR,主要功能就是用来处理离线大数据,可以通过分析海量的离线数据,计算出我们需要的结果。
Spark
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
从概念上面我们就可以看出来,Spark并不仅仅只是一个技术,而是和Hadoop相似,有一个成熟的生态圈,例如Spark SQL、Spark Streaming之类的,和Hadoop中的Hive、MR相似。 现在主流的都采用Spark来进行海量数据的处理,因为它既可以实现离线数据分析又可以进行实时数据分析。
Storm/Flink
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。Flink以数据并行和流水线方式执行任意流数据程序,Flink的流水线运行时系统可以执行批处理和流处理程序。此外,Flink的运行时本身也支持迭代算法的执行(Storm功能和上面类似,这边就不多啰嗦了)。
Spark的Spark Streaming就是一个实时数据处理框架,为什么还需要Storm/Flink呢?因为实时和实时之间还是有时间上面的差别的,我们看一下下图就知道,他们之间的区别在哪里了。