【大数据】hadoop

文章目录

一 基础

1.hadoop简介

Hadoop是使用Java编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。

2.hadoop架构设计

⑴hadoopcommon hadoop基础设施模块
⑵hdfs 分布式文件系统
⑶mapreduce 实现在很多机器上分布式并行运算
⑷yarn 帮用户调度大量的mapreduce程序,并合理分配运算资源

3.hadoop的优缺点

⑴优点
  • 高可靠性 具有按位存储和处理数据能力
  • 高扩展性 过可用的计算机集群分配数据,这些集群可以方便地扩展到数以千计的节点中
  • 高容错性 能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配
  • 高效性 能够在节点之间进行动态地移动数据,并保证各个节点的动态平衡,处理速度非常快,具有高效性。
  • 低成本 可以运行在普通商用机上
⑵缺点
  • 不能做到低延迟 没有针对低延迟数据访问做一些优化,如果要求低延迟, 可以看看Hbase。
  • 不适合大量的小文件存储 由于NameNode把文件的MetaData存储在内存中,所以大量的小文件会产生大量的MetaData。这样的话百万级别的文件数目还是可行的,再多的话就有问题了。
  • 不适合多用户写入文件,修改文件 Hadoop现在还不支持多人写入,任意修改的功能。也就是说每次写入都会添加在文件末尾。

4.hadoop名词以及他们之间的关系

这里先简单说说,具体以后仔细说

⑴hbase hive hdfs hue

HDFS是一种文件格式,像FAT32,NTFS之类的,是底层的;
HBase是数据库,可以建在HDFS上,也可以不在这上面,不过按照设计,是推荐运行在HDFS上的;
Hive 基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的 sql 查询功能
Hue 通过使用Hue我们可以在浏览器端的Web控制台上与Hadoop集群进行交互来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。

⑵spark mapreduce

Mapreduce和spark是数据处理层两大核心,Spark出现慢慢替代Mapreduce.

⑶yarn

是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。

二 HDFS

1.什么是HDFS

HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储的文件系统。

HDFS不适合用在:要求低时间延迟数据访问的应用,存储大量的小文件,多用户写相同文件,任意修改文件。

2.HDFS的原理

⑴hdfs数据块

HDFS上的文件被划分为块大小的多个分块,作为独立的存储单元,称为数据块,起初默认大小是64MB,从2.7.3版本改成了128MB,这个块大小可以在hdfs-site.xml修改它的大小。对任何数据块都是3份,2份在同一机架,1份在另一个机架,一个机架可有多个datanode.

①使用数据块的好处:
  • 一个文件的大小可以大于网络中任意一个磁盘的容量
  • 使用抽象块概念而非整个文件作为存储单元,大大简化存储子系统的设计
  • 提高可用性,可以确保在块、磁盘或机器发生故障后数据不会丢失。如果发现一个块不可用,系统会从其他地方读取另一个副本。
②数据块为什么不能太大
  • 重启过程中,数据块越大,系统加载时间越长
  • 数据量的大小与问题解决的复杂度呈线性关系。对于同一个算法,处理的数据量越大,时间复杂度越高。
  • 在Map Reduce框架里,Map之后的数据是要经过排序才执行Reduce操作的。这通常涉及到归并排序,而归并排序的算法思想便是“对小文件进行排序,然后将小文件归并成大文件”,因此“小文件”不宜过大。
  • ⑷数据量的大小与问题解决的复杂度呈线性关系。对于同一个算法,处理的数据量越大,时间复杂度越高。
③数据块为什么不能太小
  • 减少硬盘寻道时间 如果数据块太多,会增加底层硬盘的寻道时间,这是数据量不能太小的根本原因
  • 减少NameNode内存消耗 数据块信息太多,会增加namenode的内存消耗
⑵hdfs结构

在这里插入图片描述

①Client 客户端
  • 文件切分。文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储。
  • 与 NameNode 交互,获取文件的位置信息
  • 与 DataNode 交互,读取或者写入数据。
  • Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS
  • Client 可以通过一些命令来访问 HDFS
②NameNode 就是 master,它是一个主管、管理者,namenode内存中存储的是=fsimage+edits。其中fsimage是指NameNode启动时对整个文件系统的快照,在NameNode启动后,我们对文件系统的改动都会存到edits里面。只有在NameNode重启时,edits才会合并到fsimage
  • 管理 HDFS 的名称空间
  • 管理数据块(Block)映射信息
  • 配置副本策略
  • 处理客户端读写请求
③上面讲过,只有在NameNode重启时,edits才会合并到fsimage。如果我们长时间不重启,那么edits岂不会是变的很大?这时候Secondary NameNode就起作用了。

在这里插入图片描述

  • SecondaryNameNode通知NameNode准备提交edits文件,此时主节点将新的写操作数据记录到一个新的文件edits.new中。
  • SecondaryNameNode通过HTTP GET方式获取NameNode的fsimage与edits文件(在SecondaryNameNode的current同级目录下可见到 temp.check-point或者previous-checkpoint目录,这些目录中存储着从namenode拷贝来的镜像文件)
  • SecondaryNameNode开始合并获取的上述两个文件,产生一个新的fsimage文件fsimage.ckpt。
  • SecondaryNameNode用HTTP POST方式发送fsimage.ckpt至NameNode。
  • NameNode将fsimage.ckpt与edits.new文件分别重命名为fsimage与edits,然后更新fstime,整个checkpoint过程到此结束。

从工作过程可以看出,SecondaryNameNode的重要作用是定期通过编辑日志文件合并命名空间镜像,以防止编辑日志文件过大。SecondaryNameNode一般要在另一台机器上运行,因为它需要占用大量的CPU时间与namenode相同容量的内存才可以进行合并操作。它会保存合并后的命名空间镜像的副本,并在namenode发生故障时启用。

④DataNode 文件系统的工作节点,根据需要存储和检索数据块,定期向namenode发送它们所存储的块的列表,NameNode 下达命令,DataNode 执行实际的操作
  • 存储实际的数据块
  • 执行数据块的读/写操作
⑤fsimage 元数据镜像文件(文件系统的目录树。)
⑥edits 元数据的操作日志(针对文件系统做的修改操作记录)
⑶hdfs写入

在这里插入图片描述

  • 客户端向NameNode发出写文件请求,namenode检查目标文件是否已存在,父目录是否存在
  • namenode返回是否可以上传
  • client会先对文件进行切分,比如一个blok块128m,文件有300m就会被切分成3个块,一个128M、一个128M、一个44M
  • 每一个块先写一个到DataNode上面,然后由它创建一个线程复制到其他的datanode,这样做的好处是速度会提高很多
  • 更新元数据
⑷hdfs读取

在这里插入图片描述

  • 跟namenode通信查询元数据(block所在的datanode节点),找到文件块所在的datanode服务器
  • 挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
  • datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验),这里要如果是很多块,那么是并发读的。
  • 客户端以packet为单位接收,先在本地缓存,然后写入目标文件,后面的block块就相当于是append到前面的block块最后合成最终需要的文件。
3.HDFS命令行操作

本地文件提交
hadoop fs -put 文件 hdfs路径

从HDFS获取
hadoop fs -get 目录/文件 本地位置/名字

三 MapReduce

1.什么是MapReduce

分布式计算框架,更适合做离线计算,它是移动计算,而不是移动数据的,是处理超大数据,因为高昂的维护成本和达不到用户期待的时间性能已经被淘汰了

2.MapReduce的优缺点

⑴优点
  • 易于编程
  • 良好的扩展性
  • 高容错性
  • 离线处理
⑵缺点
  • 无法实时计算,它是非常耗时的
  • 无法流式计算,它的各个流程是有依赖关系的,map没做完reduce也做不了。
  • 不适合DAG(有向图)计算,
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值