Hadoop官网翻译

Posted 油纸雨伞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop官网翻译相关的知识,希望对你有一定的参考价值。

Hadoop架构

HDFS目标

  • 容忍硬件故障
  • 批处理数据访问
  • 支持大文件
  • 简单的读写一致性模型
  • 数据本地性
  • 支持异构平台

hdfs通过追加写来简化读写一致性模型。关注吞吐率。

NameNode和DataNode

主从架构
NameNode两个功能:管理文件系统,管理DataNode
DataNode功能: 管理存储。
文件系统的操作有:打开关闭重命名文件和目录。
管理DataNode指的是:块操作到DataNode的映射,让DataNode处理请求。
管理存储:DateNode定时汇报块列表,处理NameNode下发的请求。

这里面涉及到三个角色,客户端,NameNode和DataNode

文件系统

  • 支持文件系统的增删改操作
  • 支持配额
  • 支持权限
  • NameNode维护属性信息(包含副本信息)

数据复制

文件是块组成的,每个文件的块大小副本数都是可以配置的。

TODO 配置一个文件块副本策略,块大小策略
查看副本数: hadoop fs -ls <path>
修改副本数: hadoop fs -setrep 1 <path>
查看块信息: hadoop fsck <path> -files -blocks -racks
上传文件设置块大小: hadoop fs -Ddfs.block.size=10 -Ddfs.replication=10 -put core-site.xml /tmp/ 不过默认是最小1G

除了最后一个块之外,所有的块都是大小相同的。

数据复制要关主的点:

  • 副本数(不大于datanode个数)
  • 机架感知

机架可以通过参数net.topology.node.switch.mapping.impl 指定类定制,决定哪个ip到哪个机架,如果没有配置,那么所有的ip到一个机架

  • 复制策略

多个复制策略,默认是使用两个机架, 在虚拟化环境中,可以开启网络拓扑,也可以配置域,或者是尽可能多个机架。

  • 存储策略

为了数据分层
设置了存储类型:ARCHIVE, DISK, SSD RAM_DISK
存储策略:Hot,Cold,Warm,(区分DISK,ARCHIVE) All_SSD,One_SSD(SSD),Lazy_persist等
查看路径策略: hdfs storagepolicies -getStoragePolicy -path <path>
默认是开启的,需要dfs.datanode.data.dir前面有标识

./hdfs-site.xml-56-    <property>
./hdfs-site.xml:57:        <name>dfs.datanode.data.dir</name>
./hdfs-site.xml-58-        <value>[DISK]/disks/hdd_data2,[DISK]/disks/hdd_data3,[DISK]/disks/hdd_data1</value>
./hdfs-site.xml-59-    </property>
  • 安全模式

NameNode启动时进入安全模式,关注副本数和全副本数百分比,达到要求自动退出。

元数据存储

  • FSImage 文件属性映射
  • EditLog 变更的记录

符合检查点要求时进行将内存中的FSImage刷成一个新的FSImage,dfs.namenode.checkpoint.txns和dfs.namenode.checkpoint.period两个值触发。

  • DataNode汇报区块信息

datanode启动时会扫描本地文件系统文件列表,报告给NameNode,另外就是定时汇报,dfs.blockreport.intervalMse参数控制。

  • DataNode部分日志

包含blockscanner,队列,数据块复制等日志信息
2023-02-15 15:39:41,046 INFO org.apache.hadoop.hdfs.server.datanode.BlockScanner: Initialized block scanner with targetBytesPerSec 1048576
2023-02-15 15:39:51,461 INFO org.apache.hadoop.ipc.CallQueueManager: Using callQueue: class java.util.concurrent.LinkedBlockingQueue, queueCapacity: 2000, scheduler: class org.apache.hadoop.ipc.DefaultRpcScheduler, ipcBackoff: false.
2023-02-15 15:39:51,739 INFO org.apache.hadoop.hdfs.server.common.Storage: Using 3 threads to upgrade data directories (dfs.datanode.parallel.volumes.load.threads.num=3, dataDirs=3)
2023-02-15 15:39:51,810 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Setting up storage: nsid=2104128967;bpid=BP-344496998-172.16.0.216-1665026133759;lv=-57;nsInfo=lv=-66;cid=cdp;nsid=2104128967;c=1665026133759;bpid=BP-344496998-172.16.0.216-1665026133759;dnuuid=1e3cd214-1fbf-4629-b718-8fe12d8ff800
2023-02-15 15:39:53,760 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time to add replicas to map for block pool BP-344496998-172.16.0.216-1665026133759 on volume /disks/hdd_data3: 1816ms

鲁棒性

  • DataNode节点没有心跳,NameNode检查副本数

默认10min

  • 集群Rebalance

dfs.datanode.balance.max.concurrent.moves=100
dfs.balancer.max-size-to-move=21474836480
dfs.balancer.moverThreads=1300
dfs.balabcer.getBlocks.size=4294967296
dfs.datanode.balance.bandwidthPerSec=20971520

  • 数据块校验
  • 元数据损坏

多副本,或者NFS,或者distributed edit log (Journal)

数据组织

  • 默认块大小是128M,可以包含多个块
  • 写入时,根据副本策略向NameNode获取DataNode列表,然后使用Pipelined的方式写入。

pipelined方式就是部分写入就传到下一个,像一个管道。

访问方式

  • FlieSystem
  • HTTP访问
  • NFS网关,挂载为本机的存储系统
  • Shell

hadoop fs -ls /

  • DFSAdmin

bin/hdfs dfsadmin -report
bin/hdfs dfsadmin -safemode enter

空间回收

  • 删除时放到垃圾箱
  • 减少副本数

减少副本数会在下一次心跳时删除

  • 隔一段事件创建垃圾检查点,删除检查点之后一段时间内删除

hadoop fs -rm -r -skipTrash delete/test2
hadoop fs -expunge --immediate -fs s3a://landsat-pds/

用户指南

分布式,容错性,可伸缩,扩展简单
NameNode和DataNode内置在Web服务器中,可以简单的检查状态

一些有用的功能

  • Balancer: 平衡集群工具
  • fsck: 诊断工具,丢失块时使用
  • Sofemode: 进入维护模式
  • Upgrade and rollback: 升级和回滚

单节点安装

思路是使用Docker安装,配置文件暴露出来

dockerfile和docker compose附件给出,只需要一键命令就可以启动
目前的问题点在于,在容器中无法使用ssh,导致无法启动hdfs client

以上是关于Hadoop官网翻译的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop官网翻译

Hadoop官网翻译 FileSystem/OutputStream

Hadoop官网翻译(Distcp)

Hadoop官网翻译 FileSystem模型/FileSystem Class

hadoop安装踩坑

1 - Hadoop搭建单个节点