vlambda博客
学习文章列表

大数据处理框架Hadoop、Spark介绍

一、Hadoop简介

    Hadoop是由java语言编写的,在分布式服务器集群上存储海量数据并运行分布式分析应用的开源框架,其核心部件是HDFS与MapReduce。

   HDFS是一个分布式文件系统:引入存放文件元数据信息的服务器Namenode和实际存放数据的服务器Datanode,对数据进行分布式储存和读取。

    MapReduce是一个计算框架:MapReduce的核心思想是把计算任务分配给集群内的服务器里执行。通过对计算任务的拆分(Map计算/Reduce计算)再根据任务调度器(JobTracker)对任务进行分布式计算。

    当下的Hadoop已经成长为一个庞大的体系(参考下图),随着生态系统的成长,新出现的项目越来越多,其中不乏一些非Apache主管的项目,这些项目对Hadoop是很好的补充或者更高层的抽象。比如:

  • Hive:基于HADOOP的分布式数据仓库,提供基于SQL的查询数据操作

  • HBase:基于HADOOP的分布式海量数据库

  • Zookeeper:分布式协调服务基础组件

  • Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库

  • Oozie:工作流调度框架

  • Sqoop:数据导入导出工具(比如用于mysql和HDFS之间)

  • Flume:日志数据采集框架

  • Impala:基于hive的实时sql查询分析


二、Spark简介

     Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。与Hadoop和Storm等其他大数据和MapReduce技术相比,Spark有如下优势:

  • 首先,Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时流数据)的大数据处理的需求。

  • Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。

  • Spark让开发者可以快速的用Java、Scala或Python编写程序。它本身自带超过80个高阶操作符集合。而且还可以用它在shell中以交互式地查询数据。

  • 除Map和Reduce操作之外还支持SQL查询、流数据、机器学习和图表数据处理。开发者可以在一个数据管道用例中单独使用某一能力或者将这些能力结合在一起使用。

    除了Spark核心API之外,Spark生态系统中还包括其他附加库(如下图):

  •  Spark Streaming:Spark Streaming基于微批量方式的计算和处理,可以用于处理实时的流数据。它使用DStream,简单来说就是一个弹性分布式数据集(RDD)系列,处理实时数据。

  • Spark SQL:Spark SQL可以通过JDBC API将Spark数据集暴露出去,而且还可以用传统的BI和可视化工具在Spark数据上执行类似SQL的查询。用户还可以用Spark SQL对不同格式的数据(如JSON,Parquet以及数据库等)执行ETL,将其转化,然后暴露给特定的查询。

  • Spark MLlib:MLlib是一个可扩展的Spark机器学习库,由通用的学习算法和工具组成,包括二元分类、线性回归、聚类、协同过滤、梯度下降以及底层优化原语。

  • Spark GraphX:GraphX是用于图计算和并行图计算的新的(alpha)Spark API。通过引入弹性分布式属性图(Resilient Distributed Property Graph),一种顶点和边都带有属性的有向多重图,扩展了Spark RDD。此外,GraphX还包括一个持续增长的用于简化图分析任务的图算法和构建器集合。

    后文将介绍Hadoop与spark的安装与环境配置~