Hadoop入门

本文深入介绍了Hadoop的架构和工作原理,包括Hadoop分布式文件系统(HDFS)、资源管理器YARN、分布式计算框架MapReduce等核心组件。探讨了Hadoop在大规模数据处理中的优势,如高容错性和扩展性,同时也分析了其在处理小文件和频繁写入场景的局限。

CrudboyIsMe

  • 狭义上讲,Hadoop是一个Apache开源组织的一个分布式计算开源框架,提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架。
  • 广义上说,Hadoop是指整个Hadoop家族,包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等等。这些家族成员基本都是基于Hadoop的分布式而衍生出的成员。

介绍Hadoop之前,我建议你们安装一个…

centos安装

Hadoop集群

Hadoop简介

Hadoop可运行于一般的商用服务器上,具有高容错、高可靠性、高扩展性等特点。特别适合写一次,读多次的场景

适合:

  • 大规模数据(分布式)
  • 写一次,读多次
  • 一般硬件(用数量代替质量)

不适合:

  • 大量小文件
  • 频繁修改文件(写多次)
Hadoop架构

img

其中:

  • HDFS:Hadoop Distributed FileSystem Hadoop分布式文件系统
  • YARN: 分布式资源管理(MapReduce2待定)
  • MapReduce: 分布式计算
  • Others:利用YARN的资源管理功能实现其他数据处理方式

Hadoop的内部各节点采用Master-Worker架构

HDFS

hdfs-architecture

BLOCK
  • Block是基本的存储单元,一般大小为64M。配置这么大的block因为一般的硬盘传输速率比寻道时间快;减少数据管理的开销;减少网络连接成本;
  • 一个大文件会被拆分为一个个BLOCK,如果文件大小小于BLOCK,则实际的大小问所占空间
  • BLOCK是基本的读写单位,类似于磁盘的块
  • 每个BLOCK都默认复制3份到多台机器

NameNode

  • 存储文件的metadata,运行时所有数据都保存到内存,整个HDFS可存储的文件数受限于NameNode的内存大小
  • 一个Block在NameNode中对应一条记录(一般一个block的NameNode占用150字节),如果是大量的小文件,会消耗大量内存。同时map task的数量是由splits来决定的,所以用MapReduce处理大量的小文件时,就会产生过多的map task,线程管理开销将会增加作业时间。处理大量小文件的速度远远小于处理同等大小的大文件的速度。因此Hadoop建议存储大文件
  • 数据会定时保存到本地磁盘,但不保存block的位置信息,而是由DataNode注册时上报和运行时维护(NameNode中与DataNode相关的信息并不保存到NameNode的文件系统中,而是NameNode每次重启后,动态重建)
  • NameNode失效则整个HDFS都失效了,所以要保证NameNode的可用性

Secondary NameNode

  • 定时与NameNode进行同步(定期合并文件系统镜像和编辑日志,然后把合并后的传给NameNode,替换其镜像,并清空编辑日志,类似于CheckPoint机制),但NameNode失效后仍需要手工将其设置成主机

DataNode

  • 保存具体的block数据
  • 负责数据的读写操作和复制操作
  • DataNode启动时会向NameNode报告当前存储的数据块信息,后续也会定时报告修改信息
  • DataNode之间会进行通信,复制数据块,保证数据的冗余性
Hadoop 读写文件
写:

img

  • 当客户端写入的临时文件大小达到一个BLCOK时,客户端会通知NameNode,申请把文件写入硬盘
  • 接到请求后,NameNode在文件系统中创建一个BLOCK,并把该BlockId和要写入的DataNode返回给客户端
  • 客户端收到信息后,将临时文件写入DataNodesDataNode再把数据写入硬件的BLOCK
  • 当写入成功之后,NameNode会把该BLOCK提交上去,此时文件才可见

读:

img

  • 客户端向NameNode发送读请求
  • NameNode返回BLOCK和block所在的DataNode
  • 客户端从DataNode中读取,如果读取失败,则从复制节点读取
可靠性
  • DataNode会定时发送心跳给NameNode,当一段时间之后没有发送的时候,会认为其失效。NameNode会把该DataNode的数据复制到另外的DataNode
  • 当DataNode中的数据损坏(通过校验码来检测)后,NameNode同样会复制数据到另外的DataNode中
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值