protobuf

附录A 编译安装Hadoop

对着背影说爱祢 提交于 2020-03-06 10:34:51
A.1 编译 Hadoop A.1.1 搭建环境 第一步 安装并设置 maven 1. 下载 maven 安装包 建议安装 3.0 以上版本(由于 Spark2.0 编译要求 Maven3.3.9 及以上版本),本次安装选择的是 maven3.3.9 的二进制包,下载地址如下: http://mirror.bit.edu.cn/apache/maven/maven-3/ 2. 上传 git 并解压缩 把下载的 maven 安装包上传到 /home/spark/work 目录 , 使用如下命令解压缩并把文件夹移动到 /app/soft 目录下: $cd /home/spark/work $tar -zxf apache-maven-3.3.9-bin.tar.gz $mv maven-3.3.9 /app/soft $ll /app/soft 3. 编译安装 在 /etc/profile 配置文件中加入如下设置: export PATH=/app/soft/maven-3.3.9/bin:$PATH 修改 /etc/profile 配置文件并验证配置是否成功: $source /etc/profile $mvn -version 图 附录 A‑ 1 查看 Maven 是否安装成功 第二步 使用 yum 安装必要软件 以 root 用户使用 yum 安装 svn 、 gcc

protocol buffer的简单使用

旧巷老猫 提交于 2020-03-03 08:37:12
protocol buffer是一个高效的结构化数据存储格式,用来结构化数据的序列化与反序列化。目前支持java、c++、Python 相对于json而言:   数据量跟小   其他的还没看出什么优势 下载地址: protobuf-2.5 , protoc-2.5.0-win32.zip 安装过程: 1、进入解压后的java目录,查看readme.txt 2、把protoc.exe放入到protobuf-2.5中的 3、运行mvn -test 编写protocol buffer需要以下三步 1、定义消息格式文件,以proto结尾    package tutorial; option java_package = "com.example.tutorial"; option java_outer_classname = "PersonProtos"; message Person{ required string name=1; required int32 id=2; optional string email=3; message PhoneNumber{ required string number = 1; optional int32 type=2; } repeated PhoneNumber phone=4; }    2、使用编译器生成java文件   protoc

RPC简介及框架选择

你说的曾经没有我的故事 提交于 2020-03-03 07:20:36
简单介绍RPC协议及常见框架,对比传统restful api和RPC方式的优缺点。常见RPC框架,gRPC及序列化方式Protobuf等 HTTP协议 http协议是基于tcp协议的,tcp协议是流式协议,包头部分可以通过多出的\r\n来分界,包体部分如何分界呢?这是协议本身要解决的问题。目前一般有两种方式,第一种方式就是在包头中有个content-Length字段,这个字段的值的大小标识了POST数据的长度,服务器收到一个数据包后,先从包头解析出这个字段的值,再根据这个值去读取相应长度的作为http协议的包体数据。 浏览器connect 80端口 RESTful API (http+json) 理解RESTful架构 - 阮一峰 REST 架构该怎么生动地理解? - 覃超的回答 - 知乎 网站即软件,而且是一种新型的软件,这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。   它首次出现在 2000 年 Roy Fielding 的博士论文中,他是 HTTP 规范的主要编写者之一。Representational State Transfer,翻译是”表现层状态转化”,通俗来讲就是:资源在网络中以某种表现形式进行状态转移。 总结一下什么是RESTful架构:   (1)每一个URI代表一种资源;  

常见RPC开源框架

穿精又带淫゛_ 提交于 2020-03-03 05:52:13
什么是rpc框架 先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用! 远程调用意思就是:被调用方法的具体实现不在程序运行本地,而是在别的某个远程地方。 最早在 Nelson 的论文中指出实现 RPC 的程序包括 5 个理论模型部分: User User-stub RPCRuntime Server-stub Server 这 5 个部分的关系如下图所示: 这里 User 就是 Client 端。当 User 想发起一个远程调用时,它实际是通过本地调用 User-stub。 User-stub 负责将调用的接口、方法和参数通过约定的协议规范进行编码并通过本地的 RPCRuntime 实例传输到远端的实例。 远端 RPCRuntime 实例收到请求后交给 Server-stub 进行解码后发起向本地端 Server 的调用,调用结果再返回给 User 端。 远程调用原理 比如 A (client) 调用 B (server) 提供的remoteAdd方法:

来杯Caffe——在ubuntu下安装Caffe框架并测试

六眼飞鱼酱① 提交于 2020-03-03 00:27:50
Caffe是一种深度学习框架...blablabla...... Caffe要在ubuntu下安装 1. 安装依赖 sudo apt-get install libatlas-base-dev sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libboost-all-dev libhdf5-serial-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler 2. 下载Caffe # 从自己的git仓库下更快,我的仓库地址 https://git.oschina.net/rongfangliu/caffe.gitgit clone https://github.com/BVLC/caffe.git cd caffe cp Makefile.config.example Makefile.config 3. 修改生成时配置文件 修改 Makefile.config 文件的第8行,将CPU_ONLY的注释打开,只使用CPU(当然是因为穷diao如我没有N卡) # Adjust Makefile.config (for example, if using

android中简单便捷使用GreenDao本地数据库及采坑之路

瘦欲@ 提交于 2020-03-02 19:51:52
   在开发过程中,有时候我们需要使用SQLite数据库去本地存储一些临时文件,之前,我们的做法是通过SQLiteOpenHelper实现创建数据库,以及迭代开发中的数据库数据 内容 字段 变更时处理。 优点 1.通常我们在使用GreenDao的时候,我们只需定义数据模型,GreenDao框架将创建数据对象(实体)和DAO(数据访问对象),能够节省部分代码。 2.不向性能妥协,使用了GreenDao,大多数实体可以以每秒几千个实体的速率进行插入,更新和加载。 3.GreenDao支持加密数据库来保护敏感数据。 4.微小的依赖库,GreenDao的关键依赖库大小不超过100kb. 5.如果需要,实体是可以被激活的。而活动实体可以透明的解析关系(我们要做的只是调用getter即可),并且有更新、删除和刷新方法,以便访问持久性功能。 6.GreenDao允许您将协议缓冲区(protobuf)对象直接保存到数据库中。如果您通过protobuf通话到您的服务器,则不需要另一个映射。常规实体的所有持久性操作都可以用于protobuf对象。所以,相信这是GreenDao的独特之处。 7.自动生成代码,我们无需关注实体类以及Dao,因为GreenDao已经帮我们生成了。 GreenDao使用 1.在工程目录下build.gradle下添加插件 buildscript { repositories

Netty protobuf 整合 -- 使protobuf可同时处理多种类型

浪尽此生 提交于 2020-03-02 07:42:08
简要介绍 在带宽固定的情境下,压缩消息大小可以提升网络传输效率。另外,如果消息需要经过多个组件,那么收益更为可观。 消息序列化一般不会采用jdk自带的Serializable,更多的会采用thrift或者protobuf来做编解码。 thrift protobuf Netty 整合protobuf困境 在做序列化的时候,往往遇上一种困境,在pipeline添加编解码的时候,只能添加一种数据类型编解码。 如下所示 pipeline.addLast(new ProtobufDecoder(LoginAsk.getDefaultInstance)); pipeline.addLast(new ProtobufEncoder()); 上述的代码只能接收LoginAsk,无法处理其他类型的请求。 有一种较为直接的方式,开启多个端口,每一个端口处理特定的业务,不同消息之间用netty代理转发。当业务需要经常和其他类型交互时,由于多了多次转发,代码会变得复杂而不可控。 解决思路 ProtobufDecoder只接受一种实例化方式,传递特定的class,所以只能从这个类型突破。很容易想到,将这个类作为转发器,即,能通过这个类的特定字段定位到特定的class,并且包含body(结合class反序列化成instance)。 由此可得,消息协议可以被设计成head,body,tail三部分

Mac 下编译 Hadoop-2.8

ⅰ亾dé卋堺 提交于 2020-03-01 20:03:35
Mac 下编译 Hadoop-2.8 系统基本环境准备 1. maven:Apache Maven 3.5.4 2. jdk:1.8.0_201 3. brew:Homebrew 2.2.6 编译环境准备 1.cmake: 2.openssl: 3.snappy: 4.zlib: 5.protobuf: 编译hadoop 下载hadoop源码 开始编译 编译完成 系统基本环境准备 由于下面列的东西都比较常规,具体的安装过程就不详细列举的,有问题可以自行百度 1. maven:Apache Maven 3.5.4 2. jdk:1.8.0_201 3. brew:Homebrew 2.2.6 编译环境准备 1.cmake: 安装命令 brew install cmake 2.openssl: 安装命令 brew install openssl 3.snappy: 安装命令 brew install snappy 4.zlib: 安装命令 brew install zlib 5.protobuf: 由于必须使用2.5.0版本需要自行下载安装https://github.com/protocolbuffers/protobuf/releases/tag/v2.5.0 下载后解压后进入protobuf目录 执行命令列表,进行编译 $ cd /Users/wx2514/tool

Netty解决半包(TCP粘包/拆包导致)读写问题

社会主义新天地 提交于 2020-02-29 08:34:41
TCP粘包/拆包 TCP是个"流"协议,所谓流,就是没有界限没有分割的一串数据。TCP会根据缓冲区的实际情况进行包划分,一个完整的包可能会拆分成多个包进行发送,也用可能把多个小包封装成一个大的数据包发送。这就是TCP粘包/拆包。 TCP粘包/拆包问题说明 客户端要给服务端发送数据,假如为两个数据包。 可能的情况如下: 问题产生的原因: 1-应用程序write写入的字节大小 大于 套接字发送缓冲区大小 2-进行MSS大小的TCP分段 3-以太网帧的payload大于MTU进行IP分片 TCP粘包/拆包解决办法 1-定长消息,例如每个报文长度固定,不够补空格 2-使用回车换行符分割,在包尾加上分割符,例如Ftp协议 3-消息分割,头为长度(消息总长度或消息体长度),通常头用一个int32表示 4-复杂的应用层协议 Netty对于读写半包的的处理 提供多种解码器用于处理半包,如 LineBasedFrameDecoder、DelimiterBasedFrameDecoder、FixedLengthFrameDecoder、ProtobufVarint32FrameDecoder、ByteToMessageDecoder以及LengthFileldBasedFrameDecoder等等。 下面的例子为 我在 ProtoBuf中的使用 //decoder //1-读半包的解码器 ch

【MINA】用protobuf做编解码协议

和自甴很熟 提交于 2020-02-29 07:03:49
SOCKET 协议 支持 java serial 与 AMF3 的混合协议 , 目前没有基于 xml 与 json 的实现。 协议说明: * 9个字节协议头+协议体. * * 协议头1-4字节表示协议长度 =协议体长度+9-4(去掉长度占的4字节) * * 协议头第5字节为标志字节: *------------------------ * 该字节的最低位为压缩位:0=协议体未压缩 1=协议体已经压缩, * 该字节的低2-4位为协议位: * 000=基于AMF3的协议, * 001=基于java serial协议 * 010=基于protobuf协议 * 5-8位未用,作为以后扩展 * ------------------------ * * 6-9字节表示命令号 * * 采用网络字节序的整数(高位在前,低位在后) 1-4协议长度 6-9cmd 1 2 3 4 5 标志位 6 7 8 9 数据( AMF3 或者 java serial ) 目前支持3种序列化协议。protobuf没有做额外的压缩,也没有做加密,但是将来都可以用标志位来做,这里另外两种不做解释,主要说protobuf 准备工作 protobuf-java-2.5.0.jar 自定义的proto文件ChatMsg.proto protoc.exe编译工具 编译命令proto.bat #ChatMsg.proto