Hadoop YARN RPC实现

hadoop培训教程:YARN RPC实现,当前存在非常多的开源RPC框架,比较有名的有Thrift、Protocol Buffers和Avro。同Hadoop RPC一样,它们均由两部分组成:对象序列化和远程过程调用(Protocol Buflers官方仅提供了序列化实现,未提供远程调用相关实现,但三方RPC库非常多)。相比于Hadoop RPC,它们有以下几个特点:

跨语言特性。前面提到,RPC框架实际上是客户机–服务器模型的一个应用实例,对于Hadoop RPC而言,由于Hadoop采用Java语言编写,因而其RPC客户端和服务器端仅支持Java语言;但对于更通用的RPC框架,如Thrift或者Protocol Buffers等,其客户端和服务器端可采用任何语言编写,如Java、C++、Python等,这给用户编程带来极大方便。

引入IDL。开源RPC框架均提供了一套接口描述语言(Interface Description Language,IDL),它提供一套通用的数据类型,并以这些数据类型来定义更为复杂的数据类型和对外服务接口。一旦用户按照IDL定义的语法编写完接口文件后,可根据实际应用需要生成特定编程语言(如Java、C++、Python等)的客户端和服务器端代码。

协议兼容性。开源RPC框架在设计上均考虑到了协议兼容性问题,即当协议格式发生改变时,比如某个类需要添加或者删除一个成员变量(字段)后,旧版本代码仍然能识别新格式的数据,也就是说,具有向后兼容性。

随着Hadoop版本的不断演化,研发人员发现Hadoop RPC在跨语言支持和协议兼容性两个方面存在不足,具体表现为:

从长远发展看,Hadoop RPC应允许某些协议的客户端或者服务器端采用其他语言实现,比如用户希望直接使用C/C++语言读写HDFS中的文件,这就需要有C/C++语言的HDFS客户端。

当前Hadoop版本较多,而不同版本之间不能通信,比如0.20.2版本的JobTracker不能与0.21.0版本中的TaskTracker通信,如果用户企图这样做,会抛出VersionMismatch异常。

为了解决以上几个问题,Hadoop YARN将RPC中的序列化部分剥离开,以便将现有的开源RPC框架集成进来。经过改进之后,Hadoop RPC的类关系,RPC类变成了一个工厂,它将具体的RPC实现授权给RpcEngine实现类,而现有的开源RPC只要实现RpcEngine接口,便可以集成到Hadoop RPC中。,WritableRpcEngine是采用Hadoop自带的序列化框架实现的RPC,而AvroRpcEngine和ProtobufRpcEngine分别是开源RPC(或序列化)框架Apache Avro和Protocol Buffers对应的RpcEngine实现,用户可通过配置参数rpc.engine.{protocol}以指定协议{protocol}采用的序列化方式。需要注意的是,当前实现中,Hadoop RPC只是采用了这些开源框架的序列化机制,底层的函数调用机制仍采用Hadoop自带的。

YARN提供的对外类是YarnRPC,用户只需使用该类便可以构建一个基于Hadoop RPC且采用Protocol Buffers序列化框架的通信协议。

 

Yarn RPC是一个抽象类,实际的实现由参数yarn.ipc.rpc.class指定,默认值是org.apache.hadoop.yarn.ipc.HadoopYarnProtoRPC。HadoopYarnProtoRPC通过RPC工厂生成器(工厂设计模式)RpcFactoryProvider生成客户端工厂(由参数yarn.ipc.client.factory.class指定,默认值是org.apache.hadoop.yarn.factories.impl.pb.RpcClientFactoryPBImpl)和服务器工厂(由参数yarn.ipc.server.factory.class指定,默认值是org.apache.hadoop.yarn.factories.impl.pb.RpcServerFactoryPBImpl),以根据通信协议的Protocol Buffers定义生成客户端对象和服务器对象。

RpcClientFactoryPBImpl:根据通信协议接口(实际上就是一个Java interface)及Protocol Buffers定义构造RPC客户端句柄,但它对通信协议的存放位置和类名命有一定要求。假设通信协议接口Xxx所在Java包名为XxxPackage,则客户端实现代码必须位于Java包XxxPackage.impl.pb.client中(在接口包名后面增加“.impl.pb.client”),且实现类名为PBClientImplXxx(在接口名前面增加前缀“PBClientImpl”)。

RpcServerFactoryPBImpl:根据通信协议接口(实际上就是一个Java interface)及Protocol Buffers定义构造RPC服务器句柄(具体会调用前面节介绍的RPC.Server类),但它对通信协议的存放位置和类命名有一定要求。假设通信协议接口Xxx所在Java包名为XxxPackage,则客户端实现代码必须位于Java包XxxPackage.impl.pb.server中(在接口包名后面增加“.impl.pb.server”),且实现类名为PBServiceImplXxx(在接口名前面增加前缀“PBServiceImpl”)。

Hadoop YARN已将Protocol Buffers作为默认的序列化机制(而不是Hadoop自带的Writable),这带来的好处主要表现在以下几个方面:

继承了Protocol Buffers的优势。Protocol Buffers已在实践中证明了其高效性、可扩展性、紧凑性和跨语言特性。首先,它允许在保持向后兼容性的前提下修改协议,比如为某个定义好的数据格式添加一个新的字段;其次,它支持多种语言,进而方便用户为某些服务(比如HDFS的NameNode)编写非Java客户端;此外,实验表明Protocol Buffers比Hadoop 自带的Writable在性能方面有很大提升。

支持升级回滚。Hadoop 2.0已经将NameNode HA方案合并进来,在该方案中,Name-Node分为Active和Standby两种角色,其中,Active NameNode在当前对外提供服务,而Standby NameNode则是能够在Active NameNode出现故障时接替它。采用Protocol Buffers序列化机制后,管理员能够在不停止NameNode对外服务的前提下,通过主备NameNode之间的切换,依次对主备NameNode进行在线升级(不用考虑版本和协议兼容性等问题)。来源:Oracle认证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和伪分布式安装.avi 06-hadoop版本选择和伪分布式安装2.avi 07-hdfs&mapreduce;测试.avi 08-hdfs的实现机制初始.avi 09-hdfs的shell操作.avi 10-hadoop集群搭建的无密登陆配置.avi 第二天 hdfs的原理和使用操作、编程 01-NN元数据管理机制.avi 02-NN工作机制2.avi 03-DN工作原理.avi 04-HDFS的JAVA客户端编写.avi 05-filesystem设计思想总结.av i 06-hadoop中的RPC框架实现机制.avi 07-hadoop中的RPC应用实例demo.avi 08-hdfs下载数据源码跟踪铺 垫.avi 09-hdfs下载数据源码分析-getFileSystem.avi 10-hdfs下载数据源码分析-getFileSystem2.avi 第三天 mapreduce的原理和编程 01-hdfs源码跟踪之打开输入流.avi 02-hdfs源码跟踪之打开输入流总结.avi 03-mapreduce介绍及wordcount.avi 04-wordcount的编写和提交集群运行.avi 05-mr程序的本地运行模式.avi 06-job提交的逻辑及YARN框架的技术机制.avi 07-MR程序的几种提交运行模式.avi 08-YARN的通用性意义.avi 09-yarn的job提交流程.avi 第四天 常见mr算法实现和shuffle的机制 01-复习.avi 02-hadoop中的序列化机制.avi 03-流量求和mr程序开发.avi 04-hadoop的自定义排序实现.avi 05-mr程序中自定义分组的实现.avi 06-shuffle机制.avi 07-mr程序的组件全貌.avi 08-textinputformat对切片规划的源码分析.avi 09-倒排索引的mr实现.avi 10-多个job在同一个main方法中提交.avi 第五天 hadoop2.x中HA机制的原理和全分布式集群安装部署及维护 01-zookeeper.avi 02-zookeeper2.avi 03-NN高可用方案的要点1.avi 04-hadoop-HA机制的配置文件.avi 05-hadoop分布式集群HA模式部署.avi 06-hdfs--HA测试.avi 07-hdfs--动态增加节点和副本数量管理.avi 08-HA的java api访问要点.avi 09-hive入门.avi 第六天 hbase hive 01-复习ha相关.avi 02-hive的元数据库mysql方式安装配置.avi 03-hive的使用.avi 04-hive的常用语法.avi 05-hql语法及自定义函数.avi 06-hbase表结构.avi 07-hbase集群架构及表存储机制.avi 08-hbase-shell.avi 09-hbase的java api.avi 第七天 storm+kafka 006-kafka整合storm.avi 01-storm基本概念.avi 02-storm编程规范及demo编写.avi 03-storm的topology提交执行.avi 04-kafka介绍.avi 05-kafuka集群部署及客户端编程.avi 06-kafka消费者java客户端编程.avi 第八天 实战项目 01-项目背景及技术架构.avi 02-主要技术选型.avi 03-flume介绍及演示.avi 04-行为轨迹增强处理流程.avi 05-样本url筛选模块开发.avi 06-行为轨迹增强模块1.avi 07-行为轨迹增强模块2.avi
你好!对于安装 Flink 在 YARN 上的步骤,你可以按照以下指南进行操作: 1. 首先,确保你已经安装了 HadoopYARN,并且集群已经正常运行。 2. 下载 Flink 的二进制包。你可以从 Flink 的官方网站下载最新版本的二进制包。 3. 解压缩二进制包到一个你想要安装 Flink 的目录中。 4. 进入 Flink 的安装目录,并切换到 `conf` 子目录。 5. 复制 `flink-conf.yaml.template` 文件,并将其重命名为 `flink-conf.yaml`。 6. 编辑 `flink-conf.yaml` 文件,设置以下属性: - 设置 `jobmanager.rpc.address` 为你的 JobManager 主机名或 IP 地址。 - 设置 `taskmanager.numberOfTaskSlots` 为每个 TaskManager 可供使用的槽位数。 7. 配置 Hadoop YARN 相关的属性。在 `flink-conf.yaml` 文件中,找到和 YARN 相关的配置项,并根据你的实际情况进行配置。例如: - 设置 `yarn.application.name` 为你的应用名称。 - 设置 `yarn.application.type` 为 `Apache Flink`。 - 设置 `yarn.containers.vcores` 为每个容器可用的虚拟内核数。 - 设置 `yarn.containers.memory` 为每个容器可用的内存量。 8. 保存和关闭 `flink-conf.yaml` 文件。 9. 运行以下命令启动 Flink 集群: ``` ./bin/start-cluster.sh ``` 10. 检查 Flink 是否成功在 YARN 上启动。你可以通过运行以下命令来查看正在运行的应用程序: ``` yarn application -list ``` 11. 如果一切顺利,你应该能够看到 Flink 应用程序正在运行。 希望这些步骤能够帮助你成功安装 Flink 在 YARN 上。如果你需要更多帮助,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值