一.hadoop是什么
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现的分布式文件系统Hadoop Distributed File System),简称HDFS。具有容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。
HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。
HDFS为海量的数据提供了存储 + MapReduce则为海量的数据提供了计算。
其实Hadoop就是针对大数据进行存储和运算的一种系统框架。
前几天学了MFS,突然觉得,hadoop好像和mfs文件存储挺类似的,都属于,分布式存储数据~~~
学完hadoop我会将这两个技术作出对比~~~~
二 .hadoop能干什么
hadoop擅长日志分析,facebook就用Hive来进行日志分析,2009年时facebook就有非编程人员的30%的人使用HiveQL进行数据分析;
淘宝搜索中的自定义筛选也使用的Hive;
利用Pig还可以做高级的数据处理,包括Twitter、LinkedIn 上用于发现您可能认识的人,可以实现类似Amazon.com的协同过滤的推荐效果。淘宝的商品推荐也是!在Yahoo!的40%的Hadoop作业是用pig运行的,包括垃圾邮件的识别和过滤,还有用户特征建模。
HAdoop的实际应用:
Hadoop+HBase建立NoSQL分布式数据库应用
Flume+Hadoop+Hive建立离线日志分析系统
Flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析
三.hadoop的核心
1.HDFS: Hadoop Distributed File System 分布式文件系统
2.YARN: Yet Another Resource Negotiator 资源管理调度系统
3.Mapreduce:分布式运算框架
四.HDFS的架构
- 整个Hadoop的体系结构主要是通过HDFS(Hadoop分布式文件系统)来实现对分布式存储的底层支持,并通过MR来实现对分布式并行任务处理的程序支持。
- HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序
Hadoop的核心就是HDFS和MapReduce,而两者只是理论基础,不是具体可使用的高级应用。
HDFS的设计特点是:
1、大数据文件,非常适合上T级别的大文件或者一堆大数据文件的存储,如果文件只有几个G甚至更小就没啥意思了。
2、文件分块存储,HDFS会将一个完整的大文件平均分块存储到不同计算器上,它的意义在于读取文件时可以同时从多个主机取不同区块的文件,多主机读取比单主机读取效率要高得多得都。
3、流式数据访问,一次写入多次读写,这种模式跟传统文件不同,它不支持动态改变文件内容,而是要求让文件一次写入就不做变化,要变化也只能在文件末添加内容。
4、廉价硬件,HDFS可以应用在普通PC机上,这种机制能够让给一些公司用几十台廉价的计算机就可以撑起一个大数据集群。
5、硬件故障,HDFS认为所有计算机都可能会出问题,为了防止某个主机失效读取不到该主机的块文件,它将同一个文件块副本分配到其它某几个主机上,如果其中一台主机失效,可以迅速找另一块副本取文件。
HDFS的关键元素:
1)Block:将一个文件进行分块,1.x版本默认为 64MB,2.x版本默认为128MB。
2)NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一 一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在 Hadoop2.* 开始支持 activity-standy 模式----如果主 NameNode 失效,启动备用主机运行 NameNode。
3)DataNode:分布在廉价的计算机上,用于存储Block块文件。
•主节点, namenode
•从节点,有很多个: datanode
namenode负责:(注意:它只是一个HDFS元数据的管理者,用户数据永远不会经过NameNode)
•接收用户操作请求
•维护文件系统的目录结构
•管理文件与block之间关系,block与datanode之间关系
datanode负责:
•存储文件
•文件被分成block存储在磁盘上(mfs每一个block是64M,hdfs每一个block是128M)
•为保证数据安全,文件会有多个副本
(如果一个文件小于block那么,副本就相当于复制了一份,如果文件大于block那么副本就相当于拆分存储~~目前先进行这样理解)
Secondary NameNode负责:
合并fsimage和edits文件来更新NameNode的metedata
1、HDFS
对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。
但是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。
这些节点包括 NameNode,它在 HDFS 内部提供元数据服务;
DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 1.x版本的一个缺点(单点失败)。
在Hadoop 2.x版本可以存在两个NameNode,解决了单节点故障问题。
存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。
这与传统的RAID架构大不相同。
块的大小(1.x版本默认为 64MB,2.x版本默认为128MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。
HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
2、NameNode
NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。
NameNode 决定是否将文件映射到 DataNode 上的复制块上。
对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上。
注意,这里需要您了解集群架构。
实际的 I/O事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。
当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。
这个 NameNode 还会通知其他将要接收该块的副本的 DataNode。
NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。
这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。
FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失。
NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,
通过Hadoop Non-stop namenode才能实现100% uptime可用时间。
3、DataNode
DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。
DataNode 通常以机架的形式组织(机架通过一个交换机将所有系统连接起来)。
Hadoop 的一个假设是:
机架内部节点之间的传输速度快于机架间节点的传输速度。
DataNode 响应来自 HDFS 客户机的读写请求和来自 NameNode 的创建、删除和复制块的命令。
NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。
每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。
如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块。
4、文件操作的具体步骤
可见,HDFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件。
如果客户机想将文件写到 HDFS 上:
(1)、首先需要将该文件缓存到本地的临时存储。
(2)、如果缓存的数据大于所需的 HDFS 块大小,client将创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机。
同时也通知将要保存文件块副本的 DataNode。
当客户机开始将临时文件发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本 DataNode。
客户机也负责创建保存在相同 HDFS名称空间中的校验和(checksum)文件。
在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储(在 EditLog 和 FsImage 文件)。
5、Linux 集群
Hadoop 框架可在单一的 Linux 平台上使用(开发和调试时),官方提供MiniCluster作为单元测试使用,
不过使用存放在机架上的商业服务器才能发挥它的力量。这些机架组成一个 Hadoop 集群。
它通过集群拓扑知识决定如何在整个集群中分配作业和文件。
Hadoop 假定节点可能失败,因此采用本机方法处理单个计算机甚至所有机架的失败。
图1说明了在4节点集群上安装HDFS。其中一个节点托管NameNode守护程序,而其他三个运行DataNode守护程序。
注意:NameNode和DataNode是在Linux发行版之上运行的Java进程,例如RedHat,Centos,Ubuntu等。他们使用本地磁盘存储HDFS数据。
HDFS将每个文件拆分为一系列较小但仍然很大的块(默认块大小等于128MB - 较大的块意味着更少的磁盘搜索操作,从而导致更大的吞吐量)。每个块都冗余地存储在三个DataNode上以实现容错(每个文件的副本数量是可配置的)。
图2说明了将文件拆分为块的概念。文件X被分成块B1和B2,文件Y仅包括一个块B3。所有块都在群集中复制两次。
HDFS提供了一个简单的POSIX类接口来处理数据。可以使用hdfs dfs命令执行文件系统操作。
五、MapReduce
我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。
现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。
通俗说MapReduce是一套从海量源数据提取分析元素最后返回结果集的编程模型
- 将文件分布式存储到硬盘是第一步,
- 而从海量数据中提取分析我们需要的内容就是MapReduce做的事了。
MapReduce的基本原理就是:将大的数据分析分成小块逐个分析,最后再将提取出来的数据汇总分析,最终获得我们想要的内容。当然怎么分块分析,怎么做Reduce操作非常复杂,Hadoop已经提供了数据分析的实现,我们只需要编写简单的需求命令即可达成我们想要的数据。
五.Hadoop的特点
扩容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。
成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。
高效率(Efficient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。
可靠性(Reliable):hadoop能自动地维护数据的多份副本,并且在任务失败后能自动地重新部署(redeploy)计算任务。
Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的
Hadoop 上的应用程序也可以使用其他语言编写,比如 C++~~
Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。
Hadoop的分布式架构,将大数据处理引擎尽可能的靠近存储,对例如像ETL这样的批处理操作相对合适,
因为类似这样操作的批处理结果可以直接走向存储。
Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,
之后再以单个数据集的形式加载(Reduce)到数据仓库里
六、Hadoop常用模块
Apache Hadoop 为可靠的,可扩展的分布式计算开发开源软件
Apache Hadoop软件库是一个框架,它允许使用简单的编程模型跨计算机群集分布式处理大型数据集(海量的数据)
Hadoop Common 支持其他Hadoop模块的常用工具
Hadoop分布式文件系统(HDFS™) 一种分布式文件系统,可提供对应用程序数据的高吞吐量访问
Hadoop YARN 作业调度和集群资源管理的框架
Hadoop MapReduce 一种用于并行处理大型数据集的基于YARN的系统
上述每个模块有自己独立的功能,而模块之间又有相互的关联