设为首页 加入收藏

TOP

HDFS版本信息对比2.6.0-3.0.0
2019-03-19 12:29:08 】 浏览:50
Tags:HDFS 版本 信息 对比 2.6.0-3.0.0

HDFS版本信息对比2.6.0-3.0.0

目前大数据集群的Hadoop主要版本为2.6.0,版本日期为2014.11.18。为了适应大数据的不断发展和更新换代,特此分享Hadoop主要版本信息,为版本升级做准备。

Hadoop主要包括五个部分:Hadoop Common、Hadoop Distributed File System (HDFS)、Hadoop YARN、Hadoop MapReduce、Hadoop Ozone。之前的文章已经提到过hadoop的版本对比,接下来会对各个模块分别进行总结。
Hadoop Common:支持其他Hadoop模块的通用程序。
Hadoop Distributed File System (HDFS):提供访问应用数据高吞吐量的分布式文件系统。
Hadoop YARN:作业调度和集群资源管理的框架。
Hadoop MapReduce:基于YARN并行处理大数据集的系统
Hadoop Ozone:Hadoopd对象存储。不涉及当前讨论hadoop版本,且目前只有alpha版本,暂不列入考虑。

今天来讲HDFS。

版本更新

原始版本:2.6.0
版本日期:2014.11.18
第三方版本信息:HDP2.2.6

目标版本:3.0.0
版本日期:2017.12.13
第三方版本信息:CDH6.0.1

2.7.0重大加强

该版本不再支持JDK6,并仅支持JDK7及以上版本。此release还未准备作为产品使用。关键问题通过测试和下游适用来解决。生产用户应等待下一版本。
Release note: http://hadoop.apache.org/docs/r2.7.0/hadoop-project-dist/hadoop-common/releasenotes.html

HDFS-3107 - Support for file truncate
系统支持在事务终止时undo底层存储。之前,HDFS不支持truncate(Posix标准操作),这使得上层应用采用丑陋的措施来克服这种限制。

HDFS-7584 - Support for quotas per storage type
存储类型配额:如在目标目录下对不同存储类型(SSD,DISK,ARCHIVE)空间使用的硬限制。为命令{{hdfs dfsadmin -setSpaceQuota/-clrSpaceQuota}}增加了API {{SetQuotaByStorageType}}和选项{{-storagetype}},用以set/clear目标目录下的存储类型配额。

HDFS-3689 - Support for files with variable-length blocks
HDFS现在可以选择附加数据到新block而不是最后那部分的block。用户可以通过{{CreateFlag.APPEND}}和{{CreateFlag.NEW_BLOCK}}到{{append}}API来实现这个要求。HDFS现在允许用户通过{{SyncFlag.END_BLOCK}}到{{hsync}}API来结束当前block并将剩余数据写入新块。

3.0.0重大加强

Release note: http://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-common/release/3.0.0/RELEASENOTES.3.0.0.html
http://hadoop.apache.org/docs/r3.0.0/index.html

1.JAVA版本要求

JAVA最低支持版本由JAVA 7升级到JAVA 8

2.HDFS支持纠删码(erasure coding)

纠删码是一种比副本存储更节省存储空间的数据持久化存储方法。比如Reed-Solomon(10,4)标准编码技术只需要1.4倍的空间开销,而标准的HDFS副本技术则需要3倍的空间开销。由于纠删码额外开销主要在于重建和远程读写,它通常用来存储不经常使用的数据(冷数据)。另外,在使用这个新特性时,用户还需要考虑网络和CPU开销。
http://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSErasureCoding.html

用途
  • HDFS默认3x replication方案有200%的存储空间和其他资源(例如网络带宽)开销。然而,对相对低IO活动的热数据集和冷数据集,额外block副本在正常操作期间很少被访问,但仍消耗了与第一个副本相同的资源。
  • 因此自然会使用EC(纠删码)代替replication,它提供了相同级别的容错,所需更少的存储空间。在典型EC安装中,存储开销不超过50%。但EC文件的Replication factor是无意义的。它总为1,且无法通过-setrep 命令修改。
背景
  • 在存储系统中,最显著的EC使用是Redundant Array of Inexpensive Disks (RAID)。RAID通过分段使用ECimplements EC,即划分逻辑序列数据到更小的单元并在不同的disk存储连贯的单元。对每个分段的原始数据单元,会计算和存储定量的parity单元—该过程称之为编码(encoding)。在任何分段单元的错误可以通过基于现存数据和parity单元解码计算来恢复。
  • HDFS整合EC可以优化存储效率,同时提供类似传统基于replication HDFS部署的数据持久性。例如,一个6 blocks的3x的副本文件将消耗6*3=18 blocks的磁盘空间。但使用EC部署(6 data,3 parity),将只消耗9 blocks的磁盘空间。
结构
  • 在使用EC的背景下,分段有几个关键优势。第一,可以在线EC,避免转换阶段和节省存储空间。在线EC也通过利用多磁盘并行,强化了序列IO性能;尤其是在高端网络集群更合适。第二是它自然分布小文件到多个数据节点,消除了打包多个文件的必要。这极大的简化了文件操作,例如删除、配额报告、在namespace间的迁移。
  • 在典型的HDFS集群,小文件会占整个存储消耗的3/4。为了更好地支持小文件,第一步是HDFS支持EC分段。未来,HDFS也会支持连续EC布局。
    NameNode Extensions
    Client Extensions
    DataNode Extensions
    Erasure coding policies
    Intel ISA-L

3.支持多于2个以上的NameNodes

  • 针对HDFS NameNode的高可用性,最初实现方式是提供一个活跃的(active)NameNode和一个备用的(Standby)NameNode。通过对3个JournalNode的法定数量的复制编辑,使得这种架构能够对系统中任何一个节点的故障进行容错。
  • 该功能能够通过运行更多备用NameNode来提供更高的容错性,满足一些部署的需求。比如,通过配置3个NameNode和5个JournalNode,集群能够实现两个节点故障的容错。
    在这里插入图片描述
    http://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

HDFS High Availability Using the Quorum Journal Manager

背景
  • Hadoop 2.0.0之前,在HDFS集群NameNode是single point of failure (SPOF)。每个集群由一个单独的NameNode,且如果该机器或进程不可用,集群将不可用直到Namenode重启或在其他机器启动。
  • 在两个方面影响了HDFS集群的总体可用性:在计划外事件发生的情况下(例如机器死机),集群在重启NameNode前将变为不可用;计划内维护事件(例如软硬件升级)将会导致集群窗口停机。
  • HDFS高可用特性通过提供运行两个冗余NameNode选项,来解决上述问题。机器死机时可以快速故障切换到新NameNode。
结构
  • 在典型的HA集群,两个或以上独立机器配置为NameNode。在任何时间点,一个NameNode是Active状态,其他则是Standby状态。Active NameNode负责集群所有客户端操作,而Standby NameNode只是作为worker,保持足够的状态来提供快速故障切换。
  • 为了保持Standby node与Active node同步,两个节点用一组独立的守护进程交互(“JournalNodes” JNs)。当Active node上执行任何namespace修改时,它经久记录修改日志。Standby node能从JNs读取编辑日志。作为Strandby node查看编辑日志,它适用于所属namespace。在故障切换事件中,Standby node将确保读JounalNodes所有编辑日志。这保证在故障切换前namespace状态完全同步。
  • 为了提供快速故障切换,Standby node关于blocks本地位置的最新信息也是必要的。为了实现这一点,用所有NameNode本地位置配置数据节点,并向所有NameNode发送block位置信息和心跳。
  • 只有一个NameNode是Active,对HA集群的正确操作非常重要。否则,namespace状态将快速产生分歧,有数据丢失等不正确结果的风险。为了确保这个属性,预防“裂脑问题”,JNs只会允许一个单独的NameNode同一时间作为writer。在故障切换期间,变为active的NameNode将简单的接管writer角色,避免其他NameNode继续保持Active状态。

4.修改了多重服务的默认端口

在之前的Hadoop版本中,多重Hadoop服务的默认端口在Linux临时端口范围内容(32768-61000),这就意味着,在启动过程中,一些服务器由于端口冲突会启动失败。这些冲突端口已经从临时端口范围移除,NameNode、Secondary NameNode、DataNode和KMS会受到影响。我们的文档已经做了相应的修改,可以通过阅读发布说明 HDFS-9427和HADOOP-12811详细了解所有被修改的端口。
在这里插入图片描述
https://issues.apache.org/jira/browse/HDFS-9427
Namenode ports: 50470 --> 9871, 50070 --> 9870, 8020 --> 9820
Secondary NN ports: 50091 --> 9869, 50090 --> 9868
Datanode ports: 50020 --> 9867, 50010 --> 9866, 50475 --> 9865, 50075 --> 9864

5.数据节点内置平衡器(Intra-datanode balancer)

  • 在单一DataNode管理多个磁盘情况下,在执行普通的写操作时,每个磁盘用量比较平均。但是,当添加或者更换磁盘时,将会导致一个DataNode磁盘用量的严重不均衡。由于目前HDFS均衡器关注点在于DataNode之间(inter-),而不是intra-,所以不能处理这种不均衡情况。
  • 在hadoop3 中,通过DataNode内部均衡功能已经可以处理上述情况,可以通过hdfs diskbalancer ClI来调用。
    在这里插入图片描述
    在这里插入图片描述
    http://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html
diskbalancer
hdfs diskbalancer
 [-plan <datanode> -fs <namenodeURI>]
 [-execute <planfile>]
 [-query <datanode>]
 [-cancel <planfile>]
 [-cancel <planID> -node <datanode>]
 [-report -node <file://> | [<DataNodeID|IP|Hostname>,...]]
 [-report -node -top <topnum>]
COMMAND_OPTION Description
-plan 创建计划
-execute 执行一个datanode的给定计划
-query 获取diskbalancer当前状态
-cancel 取消一个正在运行的计划
-report 报告datanode容量信息

6.HDFS的基于路由器互联(HDFS Router-Based Federation)

HDFS Router-Based Federation添加了一个RPC路由层,为多个HDFS命名空间提供了一个联合视图。这和现有的ViewFs、HDFS Federation功能类似,区别在于通过服务端管理表加载,而不是原来的客户端管理。从而简化了现存HDFS客户端接入federated cluster的操作。
http://hadoop.apache.org/docs/r3.0.0/hadoop-project-dist/hadoop-hdfs/HDFSRouterFederation.html

简介
  • 由于元数据开销包含inode(文件和目录)、文件块、数据节点心跳数、HDFS RPC 客户端请求数,NameNode有延展性限制。常见解决办法是拆分文件系统为更小的HDFS Federation子集群,提供联合视图ViewFs。问题是如何维护拆分子集群(例如namespace分区)。
结构
  • 分割federation的扩展是增加一层软件,用以负责联盟namespace。额外的这一层允许用户访问任何子集群,让子集群管理自己的block池,支持平衡数据。为了完成这些目标,federation层引导块访问适合的子集群,维护namespace状态,并提供数据平衡机制。这一层必须是可扩展、高可用、容错的。
  • Federation层包含多个组件。Router组件有和NameNode相同的接口,将客户端请求发送到正确的子集群,State Store基于真实情况。State Store结合了远程Mount表(在ViewFs,但在客户端间共享)和子集群利用率信息(load/capacity)。这个方法和YARN federation的结构相同。
    在这里插入图片描述

3.0.0+cdh6.0.1

已修复issues

HDFS-5040 - You can now see an audit log for admin commands and output the log of all DFS admin commands.
HDFS-10240 - Fixed an issue where the race between close/recoverLease leads to missing blocks.
HDFS-10453 - Fixed an issue where the ReplicationMonitor thread could get stuck for a long time due to the race between replication and delete of the same file in a large cluster.
HDFS-13051 - Fixed an issue where a deadlock occurs when rolleditlog rpc call happens and editPendingQ is full.
HDFS-13178 - Add a force option to DiskBalancer Execute command
HDFS-13181 - Add a configuration to DiskBalancer for valid plan hours
HDFS-13281 - Fixed an issue where the Namenode#createFile was not /.reserved/raw/ aware.
HDFS-13314 - NameNode optionally exits if it detects FsImage corruption
HDFS-13322 - FUSE lib now recognizes the change of the Kerberos ticket cache path if it was changed with the KRB5CCNAME environment variable during the same user session.
HDFS-13339 - Fixed an issue where volume reference cannot be released and may lead to deadlock when DataXceiver does a check volume
HDFS-13721 - Fixed an NPE in DataNode due to an uninitialized DiskBalancer.
HDFS-13727 - The DiskBalancer now logs a full stack trace if it exits with an unhandled exception.
HDFS-13813 - Added a check to see if a child inode exists in the global FSDirectory dir when saving (serializing) INodeDirectorySection.

不支持的特性

HDFS

ACLs for the NFS gateway
Aliyun Cloud Connector
Erasure Coding
HDFS NameNode Federation
HDFS Router Based Federation
HDFS truncate
More than two NameNodes
Openstack Swift
Quota support for Storage Types
SFTP FileSystem
Upgrade Domain
Variable length block
ZStandard Compression Codec

不建议的属性

https://archive.cloudera.com/cdh6/6.0.0/docs/hadoop-3.0.0-cdh6.0.0/hadoop-project-dist/hadoop-common/DeprecatedProperties.html

已知的issues和限制

rolleditlog rpc调用和editPendingQ满时发生死锁

CDH6可以默认异步编辑日志记录器。一个已知issue可能会导致NameNode死锁。
措施: 禁用异步编辑日志记录器。在CM中NameNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml设置dfs.namenode.edits.asynclogging为 false。
Affected Versions: CDH 6.0.0
Fixed Versions: CDH 6.0.1
Apache Issue: HDFS-13051
Cloudera Issue: CDH-71921, CDH-64325

用户组信息(UGI)票证授权(TGT)更新失败

当UGI试图续订TGT时,更新失败异常NullPointerException。该issue在一些服务角色发生,包括YARN 资源管理器、Impala守护进程和Spark查询。
措施: YARN资源管理器和ImpalaD需要手动重启。Spark查询在失败后重试。
Affected Versions: CDH 6.0.0
Fixed Versions: CDH 6.0.1
Apache Issue: HADOOP-15593

OIV ReverseXML处理程序失败

如果XML文件包含转义字符,HDFS OIV ReverseXML 处理程序将失败。
Affected Versions: CDH 6.x
Apache Issue: HDFS-12828

发生UnrecoverableKeyException异常

UnrecoverableKeyException报错是由于新的增强密钥存储机制特性,ORACLE JDK 8u171或以上版本。
Affected Versions: CDH 6.0.0
Fixed Versions: CDH 6.0.1
Apache Issue: HADOOP-15473

无法移动加密文件到垃圾站

HDFS加密启用,我们将无法移动加密文件或目录到垃圾站目录。
措施: 为了移除加密文件或目录,使用下列命令配合-skipTrash绕过垃圾站。
rm -r -skipTrash /testdir
Affected Versions: All CDH versions
Apache Issue: HADOOP-10902

HDFS NFS网关和CDH安装(使用pkg)限制

HDFS NFS网关只在RHEL-compatible系统work as shipped(“out of the box”)。由于portmap/rpcbind在本地版本的一个bug,在SLES或Ubuntu系统HDFS NFS网关不会work as shipped。支持RHEL-compatible版本在rpcbind-0.2.0-10.el6及以上,或使用CM安装CDH,或使用ROOT启动网关。
措施和注意事项:
在RHEL-compatible系统,确保版本大于等于rpcbind-0.2.0-10.el6。
在SLES或Ubuntu系统:
o 用CM安装CDH; or
o 用ROOT启动网关; or
o 不用PKG启动网关; or
o 在insecure模式运行rpcbind 启动网关,使用-i 选项,但这将允许任何人从远程主机绑定到端口映射。
Upstream Issue: 731542 (Red Hat), 823364 (SLES)

在.snapshot目录修改权限为777时没有报错

快照是只读的;在.snapshots目录运行chmod 777 不会修改成功,但不显示错误。
Affected Versions: All CDH versions
Apache Issue: HDFS-4981

ViewFileSystem不支持快照操作

Affected Versions: All CDH versions

快照不保持目录的配额设置

Affected Versions: All CDH versions
Apache Issue: HDFS-4897

dfs.namenode.name.dir权限设置不正确

Hadoop守护进程为dfs.namenode.name.dir(或dfs.name.dir)应设置权限为 drwx------ (700),但实际上这些权限被设置为文件系统默认值,通常是drwxr-xr-x (755)。
措施: 使用chmod 设置权限为700。
Affected Versions: All CDH versions
Apache Issue: HDFS-2470

hadoop fsck -move 在基于host Kerberos集群无法生效。

措施: 使用hadoop fsck -delete
Affected Versions: All CDH versions
Apache Issue: None

在一些数据节点Block报告可以超过RPC buffer大小的最大值

在大量block的数据节点中,block报告可能超过RPC buffer的最大值。
措施: 在 hdfs-site.xml增加值 ipc.maximum.data.length :

<property>
	<name>ipc.maximum.data.length</name>
	<value>268435456</value>
</property>

Affected Versions: All CDH versions
Apache Issue: None

参考文档

官方文档:
http://hadoop.apache.org/docs/r3.0.0/index.html
https://hadoop.apache.org/release.html
参考文章:
https://blog.csdn.net/yongge1981/article/details/80504935
https://www.cnblogs.com/smartloli/p/9028267.html

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇sqoop常用命令 下一篇Hadoop入门及安装

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目