一、什么是Hadoop?
- 基于2003年google发表Map/Reduce 和 Google File System(GFS)论文研发。
- 用java实现的HDFS(Hadoop分布式文件系统)+Map/Reduce(并行编程计算处理框架)。
- 对大量数据进行分布式处理的软件框架。
二、Hadoop的优势
1、高可靠性:
HDFS假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。MapReduce的任务监控保证了分布式处理的可靠性。
2、高效性:
Hadoop (M/R)是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
3、高扩展性:
Hadoop可以扩展至数千个节点,对数据持续增长,数据量特别巨大的需求很合适。
4、低成本:
Hadoop是开源项目,而且不仅从软件上节约成本,硬件上的要求也不高。Hadoop生态群活跃,其周边开源项目丰富,HBase, Hive,Impala等等基础开源项目众多。
三、Hadoop的不足
1、不适合低延迟数据访问,不适合做实时数据分析。
2、无法高效存储大量小文件。
3、不支持多用户写入及任意修改文件。
四、Hadoop的两大核心子项目介绍
(一)、HDFS简介
提供一个高效可用的分布式文件系统,具体如下:
1、可以创建、删除、移动或重命名文件,等等。
2、采用多个备份,保证单节点出现故障是,数据不会丢失。
3、是一个抽象的文件系统,实际的文件数据是分布在多个节点上。
HDFS的结构:
<1>、NameNode和Secondary NameNode介绍
NameNode:
- 负责管理文件系统名称空间(Namespace)和控制外部客户机的访问。
- 维护文件系统树(filesystem tree)以及文件树中所有的文件和文件目录信息的元数据(metadata)。
- 是hadoop守护进程中最重要的一个,位于HDFS的主端,它跟踪文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。
Secondary NameNode:
- 是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。
NameNode维护以上管理信息的四个重要的物理文件:
- fsimage:二进制文件,存储HDFS的文件和目录元数据。格式如下:
- edits:作为NameNode的变更日志,记录fsimage的变更信息,如创建/删除目录,创建/删除文件,修改权限,修改namespace/diskspace限额等。
- fstime:记录最近一次checkpoint的时间,作为Secondary NameNode判断当前是否需要进行checkpoint的依据。
- VERSION:记录namspaceID,作为整个namespace的唯一标识,DataNode也保存这个标识,在每次DataNode连接NameNode时都要检查,不一致的DataNode会被拒绝连接。
NameNode和secondary Namenode:
为什么会用这样的交互机制?
原因:
1.fsimage是存于硬盘的元数据检查点,Hadoop不会对每个文件操作都写出到fsimage,这样是很慢的,但是每个文件操作都会在提交后运行前先写入edits编辑日志,这样在namenode出现故障后,就会将fsimage和edits编辑日志结合读入内存,重建元数据信息。
2.为了避免edits编辑日志的无限制扩大,secondary namenode 就回按照时间阈值(比如1小时)或者按大小阈值(edits编辑日志文件大小超过64M,这些参数都可以设置)“周期性”的读取namenode中的edits和fsimage重构fsimage检查点,同时在namenode中进行edits的滚动,来解决这个问题。
<2>、DataNode介绍
- 提供数据存储空间,保存HDFS中的数据信息,它管理的是数据块(Block) 。
- 响应来自 HDFS 客户端的读写请求,
- 响应来自 NameNode 的创建、删除和复制块的命令。
当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告就是块状态报告。
<3>、Client介绍
- 代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode和namenode,即可完成我们所需要的功能。
<4>、Namenode,Datanode,Client之间的通信
- Namenode,Datanode,Client之间的通信都是建立在TCP/IP的基础之上的。当Client要执行一个写入的操作的时候,命令不是马上就发送到Namenode,Client首先在本机上临时文件夹中缓存这些数据,当临时文件夹中的数据块达到了设定的Block的值(默认是64M)时,Client便会通知Namenode,Namenode便响应Client的RPC请求,将文件名插入文件系统中并且在Datanode中找到一块存放该数据的block,同时将该Datanode及对应的数据块信息告诉Client,Client便把这些本地临时文件夹中的数据块写入指定的数据节点。
(二)、Map/Reduce和计算任务框架介绍
<一>、Map/Reduce介绍
- 提供了一套并发处理数据的接口
- Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。
- Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。
执行计算流程图:
- Map/Reduce的本质是用户需编程提供两个以Key/value方式操作的函数:
f(map) ~ input_data list (k1,v1)
f(reduce) ~ (k1,list(v1)) result_data
- Map/Reduce系统提供的隐藏操作有:
将map结果list(k1,v1)重新分发,使同一个k1对应的数据(k1,list(v1))定向到同一个计算单元reducer。
例子:我们想要统计每个员工每天在开会上平均要花费多少时间。数据内容:employee, date, meeting_time。
- 如果用sql,maybe:select employee, avg(meeting_time) from tablename group by employee.
- 如果用map/reduce programming,maybe:map过程,把数据按<employee, meeting_time>分发;reduce过程,对同一个employee的meeting_time求平均,并输出<employee, avg(meeting_time)>
<二>、JobTracker和TaskTracker介绍:
JobTracker介绍:
JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。
TaskTracker介绍:
TaskTracker与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而 JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果 JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他 节点处理。
五、Hadoop其他重要子项目
1、Hbase
- Google Bigtable的开源实现
- 列式数据库
- 可集群化
- 可以使用shell、web、api等多种方式访问,通过api函数对数据库进行操作
- 适合高读写(insert)的场景:大量数据向数据库中写入,读出
- HQL查询语言:Hbase Query Language
- NoSQL的典型代表产品
2、Hive 蜂巢
- 数据仓库工具,可以把hadoop下的原始结构化数据变成Hive中的表
- 支持一种与SQL几乎完全相同的语言。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持
- 可以看成是从SQL到Map-Reduce的映射器
- 提供shell,JDBC/ODBC,Thrift,Web等接口
3、Zookeeper动物园管理员:通信协调软件:Hbase数据节点之间的协调
- Google Chubby的开源实现
- 用于协调分布式系统上的各种服务。例如确认消息是否准确到达,,防止单点失效,处理负载均衡等
- 应用场景:Hbase,实现Namenode自动切换
- 工作原理:领导者,跟随者以及选举过程
4、Avro鹰
- 数据序列化工具,由Hadoop的创始人Doug Cutting主持开发
- 如:java中产生数据,存入磁盘,需要先序列化
- 用于支持大批量数据交换的应用。支持二进制序列化方式,可以便捷,快速地处理大量数据
- 动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据
- Thrift接口
5、Cassandra(没落于hbase)
- NoSQL,分布式的Key-Value型数据库,由Facebook贡献给apache
- 与Hbase类似,也是借鉴Google Bigtable的思想体系
- 只有顺序写,没有随机写的设计,满足高负荷轻型的性能需求
相关推荐
hadoop的体系介绍:1,hadoop的快速入门;2,分布式的系统概述;3,离线分析系统概述;
为了帮助大家更好地了解和学习Hadoop,本文将根据提供的信息进行整理,详细介绍每份资料的内容概要及其适用场景,旨在为初学者及进阶者提供有价值的学习指引。 #### 一、Hadoop技术内幕系列 1. **《Hadoop技术内幕...
hadoop-hdfs快速入门 内容概要:HDFS是Apache Hadoop中的分布式文件系统,用于处理大规模数据集。它通过数据局部性原理减少网络传输,提高了系统效率;同时提供数据备份和自我修复机制,确保数据安全性和可靠性。 ...
根据提供的文件内容,以下为Robot Framework用户指南2.7.7版本的知识点概要: Robot Framework是一个基于Python的可扩展的关键字驱动测试自动化框架,专门用于端到端的验收测试和接受测试驱动开发(ATDD)。由于其...
内容概要:本文档分为三个主要部分介绍了如何开始使用 ZooKeeper:第一部分是首次启动并体验ZooKeeper,涉及服务器的启动和基本的状态查询;第二部分则是关于ZooKeeper配置的基本理解和修改,特别是客户端的最大连接...
在展示方面,分析师需要掌握图表设计的概要,以确保图表能够有效地传达数据中的信息。 为了实现数据的收集、存储和分析,多种工具被广泛使用。这些工具包括但不限于Excel、SQL数据库、报告工具如PowerPoint、Word和...
### 华为OD(OpenDrive)概要介绍与分析 #### 一、华为OD的核心概念与价值 华为OD(OpenDrive)是华为面向开发者提供的一个全面的云存储服务框架,它集成了对象存储(Object Storage Service, OBS)、文件存储、大...
内容概要:10G的Python数据分析与挖掘实战学习视频,包括了Python3数据科学入门与实战,大数据入门到实战篇(Hadoop2.80),Python3实战Spark大数据分析及调度,数据分析与数据挖掘高级实战案例 适合人群:具备一定...
内容概要:5G的python量化投资学习学习,包括了Python数字货币量化投资课程,大数据入门到实战篇(Hadoop2.80),Python3实战Spark大数据分析及调度,数据分析与数据挖掘高级实战案例 适合人群:具备一定编程基础,...
数据分析挖掘入门知识分享 数据分析挖掘是当前企业核心竞争力的重要组成部分之一,涉及到各个行业、业务职能领域和个人生活的方方面面。随着信息化革命的深入,生产数据、行为数据的产生已经渗透到每一个行业和领域...
内容概要:本文档从零基础出发,详细介绍R语言的基本概念、数据类型、对象操作、数据读取与写入、流程控制、图形绘制及高级数据分析技巧。覆盖统计分析、机器学习、数据挖掘、文本挖掘及大数据分析等领域,包括决策...
内容概要:本文件全面介绍了大数据的基本概念以及‘三V’特点,并详细解释了为什么需要进行大数据开发。文中还概述了一系列重要的大数据技术和常用的工具栈如Hadoop、Spark等。特别地,文章给出了一套实战案例指导...
内容概要:本文档集合了一系列关于数据分析的学习资料和资源,旨在帮助新手及中级学习者掌握数据分析领域的各项关键技术。内容包括:① 数据分析的基本概述及其工具;② 使用Python(如Pandas、NumPy)、Matplotlib...
内容概要:本文详细介绍了不同类型的数据分析工具,分为数据处理与清洗工具(Excel、OpenRefine)、数据可视化工具(Tableau、Power BI、D3.js)、数据分析与统计工具(Python、R、SAS)、大数据分析工具(Apache ...
这个课程将涵盖大数据技术的概要介绍,包括大数据技术的定义、特点、应用场景等。 Linux 大数据必备 Linux 大数据必备是大数据专业的基础课程,旨在让学生掌握 Linux 操作系统的基本操作,包括 Linux 常见版本、...
大数据技术入门课程旨在介绍当前流行大数据技术,数据技术原理,并介绍其思想,介绍大数据技术培训课程,概要介绍。 Linux 大数据必备课程则旨在介绍 Linux 常见版本,VMware 虚拟机安装 Linux 系统,虚拟机网络配置...
内容概要:本文档详细介绍了一个高可靠性、高性能、面向列、可扩展的分布式存储系统——HBase。首先阐述了HBase的基本概念及其优势特点,接着详述了HBase的安装步骤,包括操作系统的要求、Java与Hadoop的前置条件...
1. 入门 1.1. 介绍 1.2. 快速开始 2. 配置 2.1. Java 2.2. 操作系统 2.3. Hadoop 2.4. HBase运行模式:单机和分布式 2.5. ZooKeeper 2.6. 配置文件 2.7. 配置示例 2.8. 重要配置 2.9. Bloom Filter 3. 升级 3.1. 从...
JAVA 程序设计师的 SCALA 入门教学, 此教学将对 Scala 语言以及编译器做一个简易介绍。设定的读者为具有程设经验且想要看 Scala 功能概要的人。内文假设读者有着基本、特别是 Java 上的对象导向程设知识。