热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【深入浅出Yarn架构与实现】21Yarn基础库概述

一、主要使用的库ProtocolBuffers:是Google开源的序列化库,具有平台无关、高性能、兼容性好等优点。YARN将其用到了RPC通信中,默认情况下,YARNRPC中所


一、主要使用的库



  • Protocol Buffers:是 Google 开源的序列化库,具有平台无关、高性能、兼容性好等优点。YARN 将其用到了 RPC 通信中,默认情况 下,YARN RPC 中所有参数采用 Protocol Buffers 进行序列化 / 反序列化。

  • Apache Avro:是 Hadoop 生态系统中的 RPC 框架,具有平台无关、支持动态模式(无需编译)等优点,Avro 的最初设计动机是解决 YARN RPC 兼容性和扩展性 差等问题。

  • RPC 库:YARN 仍采用了 MRv1 中的 RPC 库,但其中采用的默认序列化方法被替换成了 Protocol Buffers。

  • 服务库和事件库 :YARN 将所有的对象服务化,以便统一管理(比创建、销毁等), 而服务之间则采用事件机制进行通信,不再使用类似 MRv1 中基于函数调用的方式。

  • 状态机库:YARN 采用有限状态机描述一些对象的状态以及状态之间的转移。引入状态机模型后,相比 MRv1, YARN 的代码结构更加清晰易懂。


二、第三方开源库介绍


一)Protocol Buffers


1、简要介绍#

Protocol Buffers 是 Google 开源的一个语言无关、平台无关的通信协议,其小巧、高效和友好的兼容性设计,使其被广泛使用。
【可以类比 java 自带的 Serializable 库,功能上是一样的。】


Protocol buffers are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages.

核心特点:



  • 语言、平台无关

  • 简洁

  • 高性能

  • 兼容性好


2、安装环境#

以 mac 为例(其他平台方式请自查)


# 1) brew安装
brew install protobuf

# 查看安装目录
$ which protoc
/opt/homebrew/bin/protoc

# 2) 配置环境变量
vim ~/.zshrc

# protoc (for hadoop)
export PROTOC="/opt/homebrew/bin/protoc"

source ~/.zshrc

# 3) 查看protobuf版本
$ protoc --version
libprotoc 3.19.1

3、写个 demo#

1)创建个 maven 工程,添加依赖




com.google.protobuf
protobuf-java
3.19.1


2)根目录新建 protobuf 的消息定义文件 student.proto


syntax = "proto3"; // 声明为protobuf 3定义文件
package tutorial;

option java_package = "com.shuofxz.learning.student"; // 生成文件的包名
option java_outer_classname = "StudentProtos"; // 类名

message Student { // 待描述的结构化数据
string name = 1;
int32 id = 2;
optional string email = 3; //optional 表示该字段可以为空

message PhoneNumber { // 嵌套结构
string number = 1;
optional int32 type = 2;
}

repeated PhoneNumber phOne= 4; // 重复字段
}

3)使用 protoc 工具生成消息对应的Java类(在 proto 文件目录执行)


protoc -I=. --java_out=src/main/java student.proto

可以在对应的文件夹下找到 StudentProtos.java 类,里面写了序列化、反序列化等方法。


推荐阅读
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • 本文介绍了使用C++Builder实现获取USB优盘序列号的方法,包括相关的代码和说明。通过该方法,可以获取指定盘符的USB优盘序列号,并将其存放在缓冲中。该方法可以在Windows系统中有效地获取USB优盘序列号,并且适用于C++Builder开发环境。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 加密世界下一个主流叙事领域:L2、跨链桥、GameFi等
    本文介绍了加密世界下一个主流叙事的七个潜力领域,包括L2、跨链桥、GameFi等。L2作为以太坊的二层解决方案,在过去一年取得了巨大成功,跨链桥和互操作性是多链Web3中最重要的因素。去中心化的数据存储领域也具有巨大潜力,未来云存储市场有望达到1500亿美元。DAO和社交代币将成为购买和控制现实世界资产的重要方式,而GameFi作为数字资产在高收入游戏中的应用有望推动数字资产走向主流。衍生品市场也在不断发展壮大。 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • ***byte(字节)根据长度转成kb(千字节)和mb(兆字节)**parambytes*return*publicstaticStringbytes2kb(longbytes){ ... [详细]
author-avatar
辣子花_644_172
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有