1.概述
最近收到一些同学和朋友的邮件,说能不能整理一下 Hadoop 生态圈的相关内容,然后分享一些,我觉得这是一个不错的提议,于是,花了一些业余时间整理了 Hadoop 的生态系统,并将其进行了归纳总结,进而将其以表格的形式进行了罗列。涉及的内容有以下几点:
分布式文件系统
分布式编程模型
NoSQL 数据库
SQL-On-Hadoop
数据采集
编程服务中间件
调度系统
系统部署
数据可视化
2.内容
2.1 分布式文件系统
2.1.1 Apache HDFS
在分布式文件系统当中,首先为大家所熟悉的是 Apache 的 HDFS。全称为 Hadoop Distributed File System,由多台机器组建的集群,存储大数据文件。HDFS 的灵感来自于 Google File System(GFS)。Hadoop 2.x 版本之前,NameNode 是存在单点故障的。在 ZooKeeper 的高可用性功能解决了 HDFS 的这个问题,通过提供运行两个冗余的节点在同一个集群中进行主备切换,即:Active & Standby
相关链接地址如下所示:
Apache Hadoop
Google File System
Cloudera
Hortonworks
2.1.2 Red Hat GlusterFS
GlusterFS 是一个扩展的网络附加存储文件系统。GlusterFS 最初是由 Gluster 公司开发的,然后,由 Red Hat 公司在2011年进行了购买。2012年六月,Red Hat 存储服务器被宣布为商业支持的整合与 Red Hat 企业 Linux GlusterFS。Gluster 文件系统,现在称为 Red Hat 存储服务器。
相关链接地址如下所示:
Gluster 官网
Red Hat Hadoop 插件
2.1.3 QFS
QFS 是一个开源的分布式文件系统软件包,用于对 MapReduce 批处理工作负载。她被设计为一种 Apache Hadoop 的 HDFS 另一种选择方案,用于大型加工集群提供更好的性能和成本效率。它用 C++ 和固定占用内存管理。QFS 使用 Reed-Solomon 纠错保证可靠的数据访问方法。Reed-Solomon 编码在海量存储系统中被广泛应用,以纠正与媒体缺陷相关的突发错误。而不是存储每个文件或是像 HDFS 一样,存储 3+ 次以上,QFS 仅仅需要 1.5 倍的原始容量,因为它存储在哎九个不同的磁盘驱动上。
相关链接地址如下所示:
QFS 官网
Github QFS
Hadoop-8885
2.1.4 Ceph Filesystem
Ceph 是一个免费的软件存储平台,被设计为对象,块和从单一节点到集群的文件存储。它的主要目标是完全分布式无单点鼓掌,可水平扩展到 PB 容量,对多种工作负载的高性能,以及高可用性。
相关链接地址如下所示:
Ceph Filesystem 官网
Ceph and Hadoop
HADOOP-6253
2.1.5 Lustre file system
Lustre 是由 Linux 和 Cluster 演变而来,是为了解决海量存储问题而设计的全新的文件系统。可支持达 1w 节点,PB 的存储容量,100GB/S 的传输速度。Lustre 是基于对象的存储系统,减少元数据服务器的 iNode。它实际上还是将数据条带化到各个存储目标上,所以可以实现高度聚合 IO 能力。Lustre 原生态支持海量小文件读写;且对大文件读写在 Linux 内核做了特殊优化。另外,Lustre 是个对用户透明的 Share 文件系统,条带化数据的位置信息不能完美的暴露出来,所以要用上 Hadoop 的 MapReduce 优势还需要做很多工作。
相关链接地址如下所示:
Lustre WiKi
Hadoop with Lustre
Inter HPC Hadoop
关于分布式文件系统的内容就赘述到这里;其它分布式文件系统,如: Alluxio , GridGain 以及 XtreemFS[ 1.官网 , 2.Flink on XtreemFS , 3.Spark XtreemFS ] 等这里就不多赘述了,大家可以下去自己普及一下。
2.2 分布式编程模型
2.2.1 Apache Ignite
Apache Ignite 内存数组组织框架是一个高性能、集成和分布式的内存计算和事务平台,用于大规模的数据集处理,比传统的基于磁盘或闪存的技术具有更高的性能,同时他还为应用和不同的数据源之间提供高性能、分布式内存中数据组织管理的功能。
它包含一个分布式的 Key/Value 存储在内存中,SQL 执行能力,MapReduce 和其它计算,分布式数据结构,连续查询,消息和事件子系统。Hadoop 和 Spark 均有集成。Ignite 编译于 Java,提供 .NET 和 C++ 的 API 接口。
相关链接地址如下所示:
Apache Ignite
Apache Ignite Documentation
2.2.2 Apache MapReduce
这个大家应该不陌生,这是一个经典的编程模型,用于在集群上处理并发,分布式大数据集。当前版本编译于 YARN 框架。这里就不多赘述了。
相关链接地址,如下所示:
Apache MapReduce
Google MapReduce Paper
Writing YARN Applications
2.2.3 Apache Spark
这个编程模型,大家也不会陌生,现在 Spark 的应用场景和社区活跃度较高。快速的执行能力,丰富的编程 API 接口,使其备受恩宠。
相关链接地址,如下所示:
Apache Spark
Mirror of Spark on Github
RDDs-Paper
Spark Cluster Computing
Spark Research
2.2.4 Apache Storm
做实时流水数据处理的同学,应该也不陌生,可以嫁接多种消息中间件(如Kafka,MQ等)。
相关链接地址,如下所示:
Storm Project
Storm-on-YARN
2.2.5 Apache Flink
Apache Flink 是一个面向分布式数据流处理和批量数据处理的开源计算平台,它能够基于同一个Flink运行时(Flink Runtime),提供支持流处理和批处理两种类型应用的功能。现有的开源计算方案,会把流处理和批处理作为两种不同的应用类型,因为他们它们所提供的SLA是完全不相同的:流处理一般需要支持低延迟、Exactly-once保证,而批处理需要支持高吞吐、高效处理,所以在实现的时候通常是分别给出两套实现方法,或者通过一个独立的开源框架来实现其中每一种处理方案。例如,实现批处理的开源方案有MapReduce、Tez、Crunch、Spark,实现流处理的开源方案有Samza、Storm。 Flink在实现流处理和批处理时,与传统的一些方案完全不同,它从另一个视角看待流处理和批处理,将二者统一起来:Flink是完全支持流处理,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。基于同一个Flink运行时(Flink Runtime),分别提供了流处理和批处理API,而这两种API也是实现上层面向流处理、批处理类型应用框架的基础。
====================================分割线================================
本文转自d1net(转载)