云计算可谓当红的发紫,而作为云计算的领头羊Hadoop的生态圈,日益增大,都知道未来的海量数据时代,掌握了制高点,就等于掌握了核心和命脉;
童鞋们,如果不了解云,如何还是,如果了解云,又该如何深入呢;
个人也是带着疑问,一步步走来,简单一个思路,看设计原理不难,搭建环境、准备Demo也不难;给出设计思路也不算很难;
但是对核心源码的分析和对设计思路的追奔溯源,需要更大的激情和毅力;
一句话,Hadoop志在必得,所以打点行囊,上路吧,从底层开始首先从Avro开始;
Apache Avro™ is a data serialization system
海量数据的核心就是无边的数据,而这些数据如果采用传统的OS模型的文件格式有何不妥呢;
为何Hadoop的HDFS需要依赖底层的Avro来完成呢?
先看看Avro的设计目标:
将数据结构或对象转化成--便于存储和传输的格式 【多个节点之前的数据存储和传输要求】
支持数据密集型应用,适合于大规模数据的存储和交换。
看看arvo的特性和功能:
1:丰富的数据结构类型
2:快速可压缩的二进制数据格式
3:存储持久数据的文件容器
4:远程过程调用(RPC)
5:简单的动态语言结合功能
arvo数据存储到文件中时,模式随着存储,这样保证任何程序都可以对文件进行处理。
模式为json格式
Java写入的,可以用C/C++读取
下载源码分析
对应源码部分有多种语言版本
记下了在另外一部分可以看到schema
首先看下data下的Json.avsc的schema格式
{"type": "record", "name": "Json", "namespace":"org.apache.avro.data",
"fields": [
{"name": "value",
"type": [
"long",
"double",
"string",
"boolean",
"null",
{"type": "array", "items": "Json"},
{"type": "map", "values": "Json"}
]
}
]
}
可以看下ipc和mapred下额schema
首先看下ipc的schema定义
1:handleshakerequest.avsc
{
"type": "record",
"name": "HandshakeRequest", "namespace":"org.apache.avro.ipc",
"fields": [
{"name": "clientHash",
"type": {"type": "fixed", "name": "MD5", "size": 16}},
{"name": "clientProtocol", "type": ["null", "string"]},
{"name": "serverHash", "type": "MD5"},
{