Hadoop 3.x 新特性剖析系列2

1.概述

接着上一篇博客的内容,继续介绍Hadoop3的其他新特性。其内容包含:优化Hadoop Shell脚本、重构Hadoop Client Jar包、支持等待Container、MapReduce任务级别本地优化、支持多个NameNode、部分默认服务端口被改变、支持文件系统连接器、DataNode内部添加负载均衡、重构后台程序和任务堆管理。

2.内容

2.2.1 优化Hadoop Shell脚本

Hadoop Shell脚本已经被重写,用来修复已知的BUG,解决兼容性问题和一些现有安装的更改。它还包含了一些新的特性,内容如下所示:

  • 所有Hadoop Shell脚本子系统现在都会执行hadoop-env.sh这个脚本,它允许所有环节变量位于一个位置;
  • 守护进程已通过*-daemon.sh选项从*-daemon.sh移动到了bin命令中,在Hadoop3中,我们可以简单的使用守护进程来启动、停止对应的Hadoop系统进程;
  • 触发SSH连接操作现在可以在安装时使用PDSH;
  • ${HADOOP_CONF_DIR}现在可以任意配置到任何地方;
  • 脚本现在测试并报告守护进程启动时日志和进程ID的各种状态;

2.2.2 重构Hadoop Client Jar包

Hadoop2 中可用的Hadoop客户端将Hadoop的传递依赖性拉到Hadoop应用程序的类路径上。如果这些传递依赖项的版本与应用程序使用的版本发送冲突,这可能会产生问题。

因此,在Hadoop3中有新的Hadoop客户端API和Hadoop客户端运行时工件,它们将Hadoop的依赖性遮蔽到单个JAR中,Hadoop客户端API是编译范围,Hadoop客户端运行时是运行时范围,它包含从Hadoop客户端重新定位的第三方依赖关系。因此,你可以将依赖项绑定到JAR中,并测试整个JAR以解决版本冲突。这样避免了将Hadoop的依赖性泄露到应用程序的类路径上。例如,HBase可以用来与Hadoop集群进行数据交互,而不需要看到任何实现依赖。

2.2.3  支持等待容器和分布式调度

在Hadoop3 中引入了一种新型执行类型,即等待容器,即使在调度时集群没有可用的资源,它也可以在NodeManager中被调度执行。在这种情况下,这些容器将在NM中排队等待资源启动,等待荣容器比默认容器优先级低,因此,如果需要,可以抢占默认容器的空间,这样可以提供机器的利用率。如下图所示:

默认容器对于现有的YARN容器,它们由容量调度分配,一旦被调度到节点,就保证有可用的资源使它们执行立即开始。此外,只要没有故障发生,这些容器就可以允许完毕。

等待容器默认由中心RM分配,但还增加了支持以允许等待容器被分布式调度,该调度群被实现于AM和RM协议的拦截器。

2.2.4 MapReduce任务级别本地化优化

在Hadoop3中,本地的Java实现已加入MapReduce地图输出器,对于Shuffle密集的作业,这样可以提高30%或者更高的性能。

它们添加了映射输出收集器的本机实现,让MapTask基于JNI来本机优化。基本思想是添加一个NativeMapOutputCollector收集器来处理映射器发出的键值对,因此Sort、Spill、文件序列化都可以在本机代码中完成。

2.2.5 支持多个NameNode节点

在Hadoop2中,HDFS NameNode高可用体系结构有一个Active和Standby NameNode,通过JournalNodes,该体系结构能够容忍任何一个NameNode失败。

然而,业务关键部署需要更高程度的容错性。因此,在Hadoop3中允许用户运行多个备用的NameNode。例如,通过配置三个NameNode(1个Active NameNode和2个Standby NameNode)和5个JournalNodes节点,集群可以容忍2个NameNode节点故障。如下图所示:

2.2.6 默认的服务端口被修改

早些时候,多个Hadoop服务的默认端口位于Linux端口范围以内。除非客户端程序明确的请求特定的端口号,否则使用的端口号是临时的,因此,在启动时,服务有时会因为与其他另一个应用程序冲突而无法绑定到端口。

因此,具有临时范围冲突端口已经被移除该范围,影响多个服务的端口号,即NameNode、Secondary NameNode、DataNode等如下所示:

Daemon App Hadoop2 Port Hadoop3 Port
NameNode Port Hadoop HDFS NameNode 8020 9820
  Hadoop HDFS NameNode HTTP UI 50070 9870
  Hadoop HDFS NameNode HTTPS UI 50470 9871
Secondary NameNode Port Secondary NameNode HTTP 50091 9869
  Secondary NameNode HTTP UI 50090 9868
DataNode Port Hadoop HDFS DataNode IPC 50020 9867
  Hadoop HDFS DataNode 50010 9866
  Hadoop HDFS DataNode HTTP UI 50075 9864
  Hadoop HDFS DataNode HTTPS UI 50475 9865

2.2.6 支持文件系统连接器

Hadoop现在支持与微软 Azure数据和阿里云对象存储系统的集成。它可以作为一种替代Hadoop兼容的文件系统,首先添加微软Azure数据,然后添加阿里云对象存储系统。

2.2.7 DataNode内部负载均衡

单个数据节点配置多个数据磁盘,在正常写入操作期间,数据被均匀的划分,因此,磁盘被均匀填充。但是,在维护磁盘时,添加或者替换磁盘会导致DataNode节点存储出现偏移,这种情况在早期的HDFS文件系统中,是没有被处理的。如图下图所示,维护前和维护后不均衡的情况:

现在Hadoop3通过新的内部DataNode平衡功能来处理这种情况,这是通过hdfs diskbalancer CLI来进行调用的。执行之后,DataNode会进行均衡处理,如下图所示:

2.2.8 重构后台程序和任务堆管理

Hadoop守护进程和MapReduce任务的堆管理已经发生了一系列的变化。

  • 配置守护进程堆大小的新方法:值得注意的是,现在可以根据主机的内存大小进行自动调整,并且已经禁止HADOOP_HEAPSIZE变量。在HADOOP\_HEAPSIZE\_MAX 和 HADOOP\_HEAPSIZE\_MIN位置上,分别设置XMX和XMS。所有全局和守护进程特定堆大小变量现在都支持单元。如果变量仅为一个数,它的大小为MB。
  • Map和Reduce的堆大小的配置被简化了,所以不再需要任务配置作为一个Java选项指定。已经指定的两个现有配置不受此更改的影响。

3.总结

Hadoop3的这些新特性还是很吸引人的,目前官方推出的稳定版本是2.9.0,发行版是3.1.0,感兴趣的同学可以下载Hadoop3去体验调研学习一下这些新特性。

4.结束语

这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

原文地址:https://www.cnblogs.com/smartloli/p/9028267.html

时间: 2024-10-06 23:10:31

Hadoop 3.x 新特性剖析系列2的相关文章

Hadoop 3相对于hadoop 2的新特性

相对于之前主要生产发布版本Hadoop 2,Apache Hadoop 3整合许多重要的增强功能. Hadoop 3是一个可用版本,提供了稳定性和高质量的API,可以用于实际的产品开发.下面简要介绍一下Hadoop3的主要变化. 最低Java版本要求从Java7变为Java8 所有Hadoop的jar都是基于Java 8运行是版本进行编译执行的,仍在使用Java 7或更低Java版本的用户需要升级到Java 8. HDFS支持纠删码(erasure coding) 纠删码是一种比副本存储更节省存

Java 8新特性之旅:使用Stream API处理集合

在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda表达式增强方法”中,我已经深入解释并演示了通过lambda表达式和方法引用来遍历集合,使用predicate接口来过滤集合,实现接口的默认方法,最后还演示了接口静态方法的实现. 源代码都在我的Github上:可以从 这里克隆. 内容列表 使用流来遍历集合. 从集合或数组创建流. 聚合流中的值. 1.

hadoop2.5发布:最新编译 32位、64位安装、源码包、API以及新特性

hadoop2.5发布:最新编译 32位.64位安装.源码包.API以及新特性 http://www.aboutyun.com/thread-8751-1-1.html (出处: about云开发) 问题导读:1.如何获取Hadoop安装包?2.编译Hadoop过程中,需要注意哪些问题?3.如何寻找API?4.如何获取Hadoop源码? 上述问题有的在本文,有的则在本文链接,感兴趣,可以找找答案 2014年08月06日 Hadoop2.5发布 官网下载地址 对Hadoop2.5进行了编译,编译的

java8新特性,使用流遍历集合

在这篇“Java 8新特性教程”系列文章中,我们会深入解释,并通过代码来展示,如何通过流来遍历集合,如何从集合和数组来创建流,以及怎么聚合流的值. 在之前的文章“遍历.过滤.处理集合及使用Lambda表达式增强方法”中,我已经深入解释并演示了通过lambda表达式和方法引用来遍历集合,使用predicate接口来过滤集合,实现接口的默认方法,最后还演示了接口静态方法的实现. 源代码都在我的Github上:可以从 这里克隆. 内容列表 使用流来遍历集合. 从集合或数组创建流. 聚合流中的值. 1.

Hadoop 2.4.0新特性介绍

在2014年4月7日,Apache发布了Hadoop 2.4.0 .相比于hadoop 2.3.0,这个版本有了一定的改进,突出的变化可以总结为下列几点(官方文档说明): 1 支持HDFS访问控制列表(ACL,Access Control Lists) 这个特性解决了在一定情况下,文件权限访问的权限问题.其机制是基于Linux文件访问权限的特征,如果你熟悉Linux的文件访问机制,你就不用再去理解HDFS文件访问的特性了. 有了ACL特性后,对HDFS文件系统就具有了良性的扩展特性.HDFS-4

JBOSS EAP 6 系列一 新特性

在项目中,采用的架构是Springmvc+spring+EJB+Jpa等架构,当然服务器是Jboss,本次Jboss我们采用的是JBossEap6.2,Jboss7的新特性与Jboss4.5的大的改变是: 模块申明式容器 JBOSS EAP不再有lib的概念,一切都是module.无论是系统调用的lib,用户编制的lib,或者应用程序引用到的第三方lib都以模块的方式构建起来,并在使用的地方申明具体使用了哪个模块.这就带来两个好处, 按官方的说法提供了一种完全的模块化的类加载系统,JBOSS会根

Hadoop 2.x HDFS新特性

Hadoop 2.x HDFS新特性     HDFS联邦     HDFS HA(要用到zookeeper等,留在后面再讲)     HDFS快照 回顾: HDFS两层模型     Namespace: 包括目录.文件和块.它支持所有命名空间相关的文件操作,如创建.删除.修改,查看所有文件和目录.     Block Storage Service(块存储服务) 包括两部分: 1 在namenode中的块的管理:提供datanode集群的注册.心跳检测等功能.处理块的报告信息和维护块的位置信息

重新想象 Windows 8.1 Store Apps (92) - 其他新特性: CoreDispatcher, 日历, 自定义锁屏系列图片

[源码下载] 作者:webabcd 介绍重新想象 Windows 8.1 Store Apps 之其他新特性 CoreDispatcher 的新特性 “日历”的相关操作 自定义锁屏时需要显示的系列图片 示例1.演示 CoreDispatcher 在 win8.1 中的新特性CoreDispatcherDemo.xaml.cs /* * 演示 CoreDispatcher 在 win8.1 中的新特性 * * 关于几个 Core 的基础请参见:http://www.cnblogs.com/weba

Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明)

Atitit 发帖机系列(8)  词法分析器v5 版本新特性说明) v5  增加对sql单引号的内部支持.可以作为string 结构调整,使用递归法重构循环发..放弃循环发. V4 java dsl词法分析 使用循环 V3 sql的词法分析 atitit..sql update语法的词法分析,与语法ast构建 - V1版   anno 解析器 基于fsm设计模式 V2 Atitit.antlr实现词法分析?-?attilax /AtiPlatf_ee/src/com/attilax/fsm/Ja