1.大数据概述

列举Hadoop生态的各个组件及其功能、以及各个组件之间的相互关系,以图呈现并加以文字描述。

 

  经过多年的发展,Hadoop生态系统不断完善和成熟,目前已经包含多个子项目。除了核心的HDFS和MapReduce以外,Hadoop还包括ZooKeeper、HBase、Hive、Pig、Mahout、Flume、Sqoop、Ambari等功能组件。

1.大数据概述

1.HDFS(hadoop分布式文件系统)
  是hadoop体系中数据存储管理的基础。他是一个高度容错的系统,能检测和应对硬件故障。
  client:切分文件,访问HDFS,与namenode交互,获取文件位置信息,与DataNode交互,读取和写入数据。
   namenode:master节点,在hadoop1.x中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户 端请求。
   DataNode:slave节点,存储实际的数据,汇报存储信息给namenode。
   secondary namenode:辅助namenode,分担其工作量:定期合并fsimage和fsedits,推送给namenode;紧急情况下和辅助恢复namenode,但其并非namenode的热备。

2.mapreduce(分布式计算框架)
  mapreduce是一种计算模型,用于处理大数据量的计算。其中map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。
  jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给tasktracker。
  tacktracker:slave节点,运行 map task和reducetask;并与jobtracker交互,汇报任务状态。
  map task:解析每条数据记录,传递给用户编写的map()并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。
  reduce task:从map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的reduce函数执行。
3. hive(基于hadoop的数据仓库)
  由Facebook开源,最初用于解决海量结构化的日志数据统计问题。hive定于了一种类似sql的查询语言(hql)将sql转化为mapreduce任务在hadoop上执行。
4.hbase(分布式列存数据库)
  hbase是一个针对结构化数据的可伸缩,高可靠,高性能,分布式和面向列的动态模式数据库。和传统关系型数据库不同,hbase采用了bigtable的数据模型:增强了稀疏排序映射表(key/value)。其中,键由行关键字,列关键字和时间戳构成,hbase提供了对大规模数据的随机,实时读写访问,同时,hbase中保存的数据可以使用mapreduce来处理,它将数据存储和并行计算完美结合在一起。
5.zookeeper(分布式协作服务)
  解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
6.sqoop(数据同步工具)
  sqoop是sql-to-hadoop的缩写,主要用于传统数据库和hadoop之间传输数据。数据的导入和导出本质上是mapreduce程序,充分利用了MR的并行化和容错性。
7.pig(基于hadoop的数据流系统)
  定义了一种数据流语言-pig latin,将脚本转换为mapreduce任务在hadoop上执行。通常用于离线分析。
8.mahout(数据挖掘算法库)
  mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。mahout现在已经包含了聚类,分类,推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法是,mahout还包含了数据的输入/输出工具,与其他存储系统(如数据库,mongoDB或Cassandra)集成等数据挖掘支持架构。
9.flume(日志收集工具)
  cloudera开源的日志收集系统,具有分布式,高可靠,高容错,易于定制和扩展的特点。他将数据从产生,传输,处理并写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在flume中定制数据发送方,从而支持收集各种不同协议数据。

10.Ambari(安装、部署、配置和管理工具)
  Apache Ambari是一种基于Web的工具,支持Apache Hdoop集群的安装、部署、配置和管理。

 

对比Hadoop与Spark的优缺点。

 

1.运行速度方面:

  Spark把中间数据放到内存中,迭代运算效率高。

  Hadoop MapReduce将计算结果保存到磁盘上,这样会影响整体速度,而Spark支持DAG图的分布式并行计算的编程框架,减少了迭代过程中数据的落地,提高了处理效率。

2.容错方面:

  Spark引进了弹性分布式数据集RDD 的概念,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以数据衍生过程对它们进行重建。另外在RDD计算时可以通过CheckPoint来实现容错。

  对于Hadoop来说也有容错机制,Hadoop2.0中引入了YARN资源管理组件,以及基于ZooKeeper组件,使得Hadoop同样具有一定的容错性。数据方面使用HDFS的容错机制保证数据完整性。

3.编程方面:

  Spark提供的数据集操作类型有很多种,大致分为:转换操作和行动操作两大类,即对RDD的操作,RDD相关操作较多,这里不做表述。此外各个处理节点之间的通信模型不再像Hadoop只有Shuffle一种模式,用户可以命名、物化,控制中间结果的存储、分区等。

  MapReduce编程方面操作就比较单一,总的来说只有Map和Reduce两个阶段。

 

如何实现Hadoop与Spark的统一部署?

 

  由于Hadoop生态系统中的一些组件所实现的功能,目前还是无法由Spark取代的,比如,Storm可以实现毫秒级响应的流计算,但是,Spark则无法做到毫秒级响应。另一方面,企业中已经有许多现有的应用,都是基于现有的Hadoop组件开发的,完全转移到Spark上需要一定的成本。因此,在许多企业实际应用中,Hadoop和Spark的统一部署是一种比较现实合理的选择。

上一篇:1.大数据概述


下一篇:使用spark-redis组件访问云数据库Redis