Hadoop实现了一个分布式文件系统,(Hadoop Distributed FileSystem)简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streamingaccess)文件系统中的数据。适用于结构化和非结构化数据的大数据分析解决方案,HDFS分布式文件系统是Hadoop的核心组件之一,保证了大数据的可靠存储,与MapReduce配合使用,可以对结构化和复杂大数据进行快速、可靠分析,从而为企业做出更好的决策,促进收入增长,改善服务,降低成本提供有力支撑!
(2)HDFS核心优势
. 支持超大文件
HDFS分布式文件系统具有很大的数据集,可以存储TB或PB级别的超大数据文件,能够提供比较高的数据传输带宽与数据访问吞吐量,相应的,HDFS开放了一些POSIX的必须接口,容许流式访问文件系统的数据。
. 高容错性能
HDFS面向的是成百上千的服务器集群,每台服务器上存储着文件系统的部分数据,在集群的环境中,硬件故障是常见的问题,这就意味着总是有一部分硬件因各种原因而无法工作,因此,错误检测和快速、自动的恢复是HDFS最核心的架构目标,因此,HDFS具有高度的容错性。
. 高数据吞吐量
HDFS采用的是“一次性写,多次读”这种简单的数据一致性模型,在HDFS中,一个文件一旦经过创建、写入、关闭后,一般就不需要修改了,这样简单的一致性模型,有利于提高吞吐量。
. 流式数据访问
HDFS的数据处理规模比较大,应用一次需要访问大量的数据,同时这些应用一般都是批量处理,而不是用户交互式处理,应用程序能以流的形式访问数据集。
(3)Yarn(分布式资源管理器)
YANR本质上是一个资源统一管理系统,是在第一代MapReduce基础上演变而来的,是hadoop2.x以后对hadoop1.x之前JobTracker和TaskTracker模型的优化,而产生出来的,将资源管理和作业控制分离,减小JobTracker压力,主要为了解决原始Hadoop扩展性差,不支持多计算框架而提出的。目的是将各种框架运行在YARN之上,可以实现框架的资源统一管理和分配,使他们共享一个集群,而不是“一个框架一个集群”,这可大大降低运维成本和硬件成本。
yarn优势
. 资源管理更加合理
使用Container对资源进行抽象,Container不同于MRv1中的slot,它是一个动态资源划分单位,是根据应用程序的需求动态生成的,比之前以slot数目更合理。且使用了轻量级资源隔离机制Cgroups进行资源隔离。Container的设计避免了之前的map slot/reduce slot分开造成集群资源闲置的尴尬情况。
. 更快地MapReduce计算
YARN利用异步模型对MapReduce框架的一些关键逻辑结构(如JobInprogress、TaskInProgress等)进行了重写,相比于MRv1,具有更快地计算速度。当然,YARN具有向后兼容性,用户在MRv1上运行的作业,无需任何修改即可运行在YARN之上。YARN的设计大大减小了 JobTracker(也就是现在的 ResourceManager)的资源消耗,并且让监测每一个 Job 子任务 (tasks) 状态的程序分布式化了,更安全、更优美。
. 对多框架支持
如:MR、Tez、Storm、Spark、flink等计算框架。
. 框架升级更容易
在YARN中,各种计算框架不再是作为一个服务部署到集群的各个节点上(比如MapReduce框架,不再需要部署JobTracler、TaskTracker等服务),而是被封装成一个用户程序库(lib)存放在客户端,当需要对计算框架进行升级时,只需升级用户程序库即可,非常容易。
(4)Spark(基于RDD的内存DAG计算模型)
. 快
与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上;而基于磁盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效地处理数据流。
. 容易使用
Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同应用。而且Spark支持交互式的Python和Scala的Shell,这意味着可以非常方便的在这些Shell中使用Spark集群来验证解决问题的方法,而不是像以前一样,需要打包、上传集群、验证等。这对于原型开发非常重要。
. 通用性
Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。
这些不同类型的处理都可以在同一应用中无缝使用。Spark统一的解决方案非常具有吸引力,减少开发和维护的人力成本和部署平台的物理成本。
. 可融合性
Spark非常方便的与其他开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassanda等。这对于已部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark强大的处理能力。Spark也可以不依赖第三方的资源管理器和调度器,它实现了Standalone作为其内置资源管理器和调度框架,这样进一步降低了Spark的使用门槛,使得所有人可以非常容易地部署和使用Spark。此外Spark还提供了在EC2上部署Standalone的Spark集群的工具。
(5)HBase(分布式列式数据库)
HBase是Google Bigtable的开源实现,是一个建立在HDFS之上的分布式,提供高可靠性,高性能,列存储,可伸缩,实时读写NoSQL的数据库系统。与Google Bigtable 利用GFS作为其文件存储系统类似,HBase 利用Hadoop HDFS 作为其文件存储系统;Google 运行MapReduce 来处理Bigtable中的海量数据, HBase 同样利用Hadoop MapReduce或者spark来处理HBase中的海量数据;Google Bigtable 利用Chubby作为协同服务,HBase 利用Zookeeper作为对应。
HBase优点:
. 大
一个表可以有上十亿行,上百万列。
. 面向列
面向列(簇)的存储和权限控制,列(簇)独立检索。
. 稀疏
对于为空(null)的列并不占用内存空间,因此,表可以设计的非常稀疏。
. 多版本
每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳。
. 数据类型单一
HBase中数据类型都是字符串。
. 无模式
每一行都有一个可以排序的rowKey和任意多的列,列可以根据需要动态增加,同一张表的不同行可以有截然不同的列。
. 高可靠性
WAL预写式日志(write-ahead log)机制保证了数据写入时不会因集群异常而导致写入数据丢失,Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏。而且Hbase底层使用HDFS,HDFS本身也有备份。
. 高性能
底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能。region切分,主键索引和缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能到达到毫秒级别。
(6)Zookeeper(分布式协作服务)
ZooKeeper本质上是一个分布式的小文件存储系统。用来协调跟hadoop相关的一些分布式的框架, 如hadoop, hive, hbase、spark、kafka等, 其实他们都是动物, 所以叫zookeeper ——“动物园管理员”。动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动物所观赏。为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才能更加放心安全的观赏动物。回到我们企业级应用系统中,随着信息化水平的不断提高,我们的企业级系统变得越来越庞大臃肿,性能急剧下降,客户抱怨频频。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性——各子系统不是孤立存在的,它们彼此之间需要协作和交互,这就是我们常说的分布式系统。各个子系统就好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是ZooKeeper——动物园管理员。它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
zookeeper特性
简单
ZooKeeper核心是一个精简的文件系统,它提供了一些简单的文件操作以及附加的功能,例如排序和通知。
易表达
ZooKeeper的数据结构原型是一棵znode树(类似Linux的文件系统),并且它们是一些已经被构建好的块,可以用来构建大型的协作数据结构和协议。
高可用性
ZooKeeper可以运行在一组服务器上,同时它们被设计成高可用性,为你的应用程序避免单点故障。
松耦合交互
ZooKeeper提供的Watcher机制使得各客户端与服务器的交互变得松耦合,每个客户端无需知晓其他客户端的存在,就可以和其他客户端进行数据交互。
丰富的API
ZooKeeper为开发人员提供了一套丰富的API,减轻了开发人员编写通用协议的负担。
(7)Hive
简单容易上手
提供了类SQL查询语言HQL,提供快速开发的能力(简单,容易上手)。
可扩展
为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统)一般情况下不需要重启服务Hive可以自由的扩展集群的规模。
元数据管理
提供统一的元数据管理,用mysql、SQLite作为hive元数据库。
批量离线分析:hive优势在于处理大数据,hive的延迟比较高,因此hive常用于数据分析,对实时性要求不高的场合。
自定义UDF
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
(8)Kettle(Pentaho Data Integration) 是一款开源的ETL(Extract Transformation Load)工具,用来完成数据的抽取,清洗、转换和加载等数据处理方面的工作。
易用性:
有非常容易使用的 GUI,出现问题可以到社区咨询。
技术支持:
在美国,欧洲(比利时,德国,法国,英国),亚洲(中国,日本,韩国)都可以找到相关技术支持人员。
部署:
可以使用job作业方式或操作系统调度,来执行一个转换文件或作业文件,也可以通过集群的方式在多台机器上部署。
速度:
速度快,需要手工调整,对 Oracle 和 PostGre 等数据源做了优化。
数据质量:
在GUI里有数据质量特性,可以手工写 SQL 语句、java脚本、正则表达式来完成数据清洗。
监控:
有监控和日志工具
连接性:
非常广泛的数据库,文件,另外可以通过插件扩展。
(9)Redis(基于内存的分布式高性能key-value数据库)
速度快
因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1)
支持丰富数据类型
支持string,list,set,sorted set,hash
支持事务
操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
单线程
利用redis队列技术并将访问变为串行访问,消除了传统数据库串行控制的开销
丰富的特性
可用于缓存,消息,按key设置过期时间,过期后将会自动删除
分布式
读写分离模式
(10)Elasticsearch(实时的分布式搜索和分析引擎)
分布式的搜索引擎
是分布式的,不需要其他组件,分发是实时的,自动可以将海量数据分散到多台服务器上去存储和检索,被叫做”Push replication”。
海量数据进行近实时的处理
分布式以后,就可以采用大量的服务器去存储和检索数据,自然而然就可以实现海量数据的处理了。在毫秒级别对数据进行搜索和分析
运行高效、安全
各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
分析引擎
全文检索,结构化检索,数据分析
(11)Griffin数据质量解决方案。它支持batch数据和streaming数据两种数据质量检测方式,可以从不同维度(比如离线任务执行完毕后检查源端和目标端的数据数量是否一致、源表的数据空值数量等)度量数据资产,从而提升数据的准确度、可信度。
精确度检测
验证结果集数据是否与源数据是一致的,如金额的校验,校验成功的记录与总记录数的比值。
数据剖析
利用数据集的一致性、独特性和逻辑性,来进行统计分析和数值评估。
异常监测
利用预先设定的算法,检测出不符合预期的数据,提供不符合规则数据的下载。
可视化监测
利用控制面板来展现数据质量的状态。
完整性
度量数据是否缺失,包括记录数缺失、字段缺失,属性缺失。
实时性
可以实时进行数据质量检测,能够及时发现问题。
可扩展性
可以用于多个数据系统。
自助服务
Griffin提供了一个简洁易用的用户界面,可以管理数据资产和数据质量规则;同时用户可以通过控制面板查看数据质量结果和自定义显示内容。