【大数据学习】Hadoop

1,概念

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

hadoop和es区别

hadoop是一个架构,而基于这种架构的应用就是hdfs文件系统。也就是说白了是一hoodap的实现是为了一种分布式的文件系统。即告诉计算机是如何存储数据,基于hadoop的数据存储方案区别于传统数据存储的最显著的地方就是其硬件无关性,也就是你存一个文件,并不可能一定在具体的磁盘的哪个扇区或哪个磁道,而有可能分布在不同的磁盘上面,而有可能这些磁盘分布在世界各地。

es只是一种全文搜索的解决方案。通过建立索引快速查询存储的数据,这只是一个上层应用。目的是为了更有效率的搜索保存在磁盘上的数据。

一个是分布式存储的架构。另一个则是一种全文检索的服务器。

2,架构

hadoop1.0时期架构

【大数据学习】Hadoop

hadoop2.0时期架构

【大数据学习】Hadoop

3,组成

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算。常用组件如下:

HDFS(Hadoop Distributed File System,分布式文件系统):提高读写速度、扩大存储容量

MapReduce:分布式计算框架

MapReduce是一个高度抽象的并行编程模型,它将分布式并行编程抽象为两个原语操作,即map 操作和reduce 操作,开发人员只需要简单地实现相应的接口即可,完全不用考虑底层数据流、容错、程序的并行执行等细节。这种设计无疑大大降低了开发分布式并行程序的难度。
MapReduce和Hadoop是相互独立的,实际上又能相互配合工作得很好。

Hive:数据仓库工具

可以将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
Hive有个可选的组件叫做HiveServer或者HiveThrift,其允许通过制定端口访问Hive。Thrift是一个软件框架,允许客户端使用包括Java、C++、Ruby和其他很多种语言,通过编程的方式远程访问Hive。

Hbase:分布式数据库

是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

Zookeeper:分布式协调服务

是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。

YARN:负责集群的资源管理和调度

使得多种计算框架可以运行在同一个集群中。
可以在YARN之上跑各种不同的框架,只要它符合YARN的标准就行。这样做的好处,多种计算框架可以共享集群资源,按需分配,你需要多少资源,就取YARN上面申请多少资源,这样可以提升整个资源的利用率。这就是要把各种框架跑在YARN上面的根本原因。

Flink on Yarn:流处理框架

Flink是一个高性能,高吞吐,低延迟的流处理框架。它不仅仅是作为一个流式处理框架,更将批处理统一了起来(在Flink中,批处理是流处理的一种特例)。
Flink的这种架构,也更好的解决了传统大数据架构那种繁琐的组件堆积,让批流能够在不改变原有代码的基础上,进行批处理或者流处理。实现了Flink支持多种部署方式local、standalone、yarn以及k8s,现在大多数企业因为大数据平台都以yarn作为资源管理器,所以为了方便管理,很多企业选择了Flink on yarn这种模式。当然随着容器云火热,不少企业选择K8S作为大数据平台的整个资源管理器,这个时候可以选择将Flink部署到K8S之上。

容器云:容器(Container)是一种更轻量级,更灵活的虚拟化处理方式,它将一个应用程序所需的一切打包在一起。容器包括所有代码,各种依赖甚至操作系统,这让应用程序几乎在任何地方都可以运行。因此它的诞生,解决了一个重要问题:如何确保应用程序从一个环境移动到另一个环境的正确运行。它只是虚拟了操作系统,而不像虚拟机一样去虚拟底层计算机。

Spark on Yarn:大规模数据处理计算引擎

Spark 可以跑在很多集群上:local、Standalone、Apache Mesos、Hadoop YARN上等等。它们代码都是一样的,区别只是–master的时候不一样。
Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

Metrics:了解系统状况

通过它我们可以了解系统的运行状况、健康状况、性能状况,通过对历史数据的分析,也可以帮助我们发现系统缺陷以及避免系统不稳定的发生。比如通过JVM数据我们可以优化系统GC策略,通过TPS和latency数据可以获知系统的压力和性能表现。
Metrics Collector:只需要布一个结点。
Metrics Monitor:每个结点都需要配。
monitor获取每台主机上的系统界级别的监控信息,hadoop获取hadoop级别的监控信息,collector定时收集跟存储这两种监控指标,amabri server功能通过api获取这些信息,并通过web显示到界面上。

Apache Pig

是一个基于Hadoop的大规模数据分析工具,它提供的SQL-LIKE语言叫Pig Latin,该语言的编译器会把类SQL的数据分析请求转换为一系列经过优化处理的MapReduce运算。

Apache Sqoop

是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

Mahout

是基于Hadoop的机器学习和数据挖掘的一个分布式框架。Mahout用MapReduce实现了部分数据挖掘算法,解决了并行挖掘的问题。

Apache Avro

是一个数据序列化系统,设计用于支持数据密集型,大批量数据交换的应用。Avro是新的数据序列化格式与传输工具,将逐步取代Hadoop原有的IPC机制。

Ambari

是一种基于Web的工具,支持Hadoop集群的供应、管理和监控。

Chukwa

是一个开源的用于监控大型分布式系统的数据收集系统,它可以将各种各样类型的数据收集成适合 Hadoop 处理的文件保存在 HDFS * Hadoop 进行各种 MapReduce 操作。

Hama

是一个基于HDFS的BSP(Bulk Synchronous Parallel)并行计算框架, Hama可用于包括图、矩阵和网络算法在内的大规模、大数据计算。

Flume

是一个分布的、可靠的、高可用的海量日志聚合的系统,可用于日志数据收集,日志数据处理,日志数据传输。

Giraph

是一个可伸缩的分布式迭代图处理系统, 基于Hadoop平台,灵感来自 BSP (bulk synchronous parallel) 和 Google 的 Pregel。

Oozie

是一个工作流引擎服务器, 用于管理和协调运行在Hadoop平台上(HDFS、Pig和MapReduce)的任务。

Crunch

是基于Google的FlumeJava库编写的Java库,用于创建MapReduce程序。与Hive,Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库。

Whirr

是一套运行于云服务的类库(包括Hadoop),可提供高度的互补性。Whirr学支持Amazon EC2和Rackspace的服务。

Bigtop

是一个对Hadoop及其周边生态进行打包,分发和测试的工具。

HCatalog

是基于Hadoop的数据表和存储管理,实现*的元数据和模式管理,跨越Hadoop和RDBMS,利用Pig和Hive提供关系视图。

Cloudera Hue

是一个基于WEB的监控和管理系统,实现对HDFS,MapReduce/YARN, HBase, Hive, Pig的web化操作和管理。

Apache Cassandra

是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,用于储存简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。

4,优点

高可靠性

Hadoop按位存储和处理数据的能力值得人们信赖 。

高扩展性

Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中 。
能够处理 PB 级数据。

高效性

Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

高容错性

Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配 。
Hadoop假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。

低成本

开源,项目的软件成本降低。