AVRO

AVRO是Apache提供的一套序列化RPC的机制

AVRO早期是为Hadoop设计的一套序列化系统,后来将AVRO独立出来。

序列化

1.序列化的目的:数据的存储和传输。

2.序列化的衡量标准:

a.序列化的时间及占用的CPU。

b.序列化之后产生的数据量。

c.序列化机制能否跨平台跨语言。

AVIO考虑到了跨语言传输的问题,采用了json格式。

maven工程依赖如下



    4.0.0

    com.yasuofenglei
    avro
    1.0-SNAPSHOT

    
        UTF-8
        2.3.2
        1.7.5
    
    
        
            junit
            junit
            4.10
            test
        
        
            org.slf4j
            slf4j-simple
            1.6.4
            compile
        
        
            org.apache.avro
            avro
            1.7.5
        
        
            org.apache.avro
            avro-ipc
            1.7.5
        
    
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                ${compiler-plugin.version}
            
            
                org.apache.avro
                avro-maven-plugin
                1.7.5
                
                    
                        schemas
                        generate-sources
                        
                            schema
                            protocol
                            idl-protocol
                        
                        
                            
                            ${project.basedir}/src/main/resources/avro
                            
                            ${project.basedir}/src/main/java/
                        
                    

                
            
        
    

 resources下新建avro目录,并新建User.avsc

{
    "namespace":"avro.pojo",//指定了一个包名avro.pojo
    "type":"record",//表示定义的是一个类
    "name":"User",//类名为User
    "fields":[
    {"name":"username","type":"string"},//String username
    {"name":"age","type":"int"}//int age
    ]
}

点击maven->gemerate sources生成实体类

编写序列化代码

package avro;

import avro.pojo.User;
import org.apache.avro.file.DataFileWriter;
import org.apache.avro.io.DatumWriter;
import org.apache.avro.specific.SpecificDatumWriter;

import java.io.File;
import java.io.IOException;

public class Demo {
    public static void main(String[] args) throws IOException {
        User u=new User();
        u.setAge(18);
        u.setUsername("tom");
        //创建序列化流
        DatumWriter dw=new SpecificDatumWriter();
        //需要将数据序列化到文件中
        DataFileWriter dfw=new DataFileWriter(dw);
        //指定写到哪个文件中
        dfw.create(User.SCHEMA$,new File("1.txt"));
        //序列化
        dfw.append(u);
        dfw.close();
    }
}

RPC

1.全称是远程过程调用,允许一个节点远程调用另一个节点上的方法而不用做实现。

2.存根的作用是限制两个节点上能调用的方法是一样的。

 

你可能感兴趣的:(大数据,java)