【www.shanpow.com--其他诗词】
avro篇一:Avro简介
一、引言
1、 简介
Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件。在Hadoop的其他项目中例如HBase(Ref)和Hive(Ref)的Client端与服务端的数据传输也采用了这个工具。Avro是一个数据序列化的系统。Avro 可以将数据结构或对象转化成便于存储或传输的格式。Avro设计之初就用来支持数据密集型应用,适合于远程或本地大规模数据的存储和交换。
2、 特点
丰富的数据结构类型;
快速可压缩的二进制数据形式,对数据二进制序列化后可以节约数据存储空间和网络传输带宽;
存储持久数据的文件容器;
可以实现远程过程调用RPC;
简单的动态语言结合功能。
avro支持跨编程语言实现(C, C++, C#,Java, Python, Ruby, PHP),类似于Thrift,但是avro的显著特征是:avro依赖于模式,动态加载相关数据的模式,Avro数据的读写操作很频繁,而这些操作使用的都是模式,这样就减少写入每个数据文件的开销,使得序列化快速而又轻巧。这种数据及其模式的自我描述方便了动态脚本语言的使用。当Avro数据存储到文件中时,它的模式也随之存储,这样任何程序都可以对文件进行处理。如果读取数据时使用的模式与写入数据时使用的模式不同,也很容易解决,因为读取和写入的模式都是已知的。
New schema
Writer
Reader
Action
Added field
Old
New
The reader uses the default value of the new field, since it is not written by the writer.
New
Old
The reader does not know about the new field written by the writer, so it is ignored
(projection).
Removed field
Old
New
The reader ignores the removed field (projection).
New
Old
The removed field is not written by the writer. If the old schema had a default defined
for the field, the reader uses this; otherwise, it gets an error. In this case, it is best to
update the reader’s schema, either at the same time as or before the writer’s.
Avro和动态语言结合后,读/写数据文件和使用RPC协议都不需要生成代码,而代码生成作为一种可选的优化只需要在静态类型语言中实现。
Avro依赖于模式(Schema)。通过模式定义各种数据结构,只有确定了模式才能对数据进行解释,所以在数据的序列化和反序列化之前,必须先确定模式的结构。正是模式的引入,使得数据具有了自描述的功能,同时能够实现动态加载,另外与其他的数据序列化系统如Thrift相比,数据之间不存在其他的任何标识,有利于提高数据处理的效率。
二、技术要领
1、 类型
数据类型标准化的意义:一方面使不同系统对相同的数据能够正确解析,另一方面,数据类型的标准定义有利于数据序列化/反序列化。
简单的数据类型:Avro定义了几种简单数据类型,下表是其简单说明:
类型
说明
null
no value
boolean
a binary value
int
32-bit signed integer
long
64-bit signed integer
float
single precision (32-bit) IEEE 754 floating-point number
double
double precision (64-bit) IEEE 754 floating-point number
bytes
sequence of 8-bit unsigned bytes
string
unicode character sequence
简单数据类型由类型名称定义,不包含属性信息,例如字符串定义如下:
{"type": "string"}
复杂数据类型:Avro定义了六种复杂数据类型,每一种复杂数据类型都具有独特的属性,下表就每一种复杂数据类型进行说明。
类型
属性
说明
Records
type name
record
name
a JSON string providing the name of the record (required).
namespace
a JSON string that qualifies the name(optional).
doc
a JSON string providing documentation to the user of this schema (optional).
aliases
a JSON array of strings, providing alternate names for this record (optional).
fields
a JSON array, listing fields (required).
name
a JSON string.
type
a schema/a string of defined record.
default
a default value for field when lack.
order
ordering of this field.
Enums
type name
enum
name
a JSON string providing the name of the enum (required).
namespace
a JSON string that qualifies the name.
doc
a JSON string providing documentation to the user of this schema (optional).
aliases
a JSON array of strings, providing alternate names for this enum (optional)
symbols
a JSON array, listing symbols, as JSON strings (required). All symbols in an enum must be unique.
Arrays
type name
array
items
the schema of the array’s items.
Maps
type name
map
values
the schema of the map’s values.
Fixed
type name
fixed
name
a string naming this fixed (required).
namespace
a string that qualifies the name.
aliases
a JSON array of strings, providing alternate names for this enum (optional).
size
an integer, specifying the number of bytes per value (required).
Unions
a JSON arrays
每一种复杂数据类型都含有各自的一些属性,其中部分属性是必需的,部分是可选的。
这里需要说明Record类型中field属性的默认值,当Record Schema实例数据中某个field属性没有提供实例数据时,则由默认值提供,具体值见下表。Union的field默认值由Union定义中的第一个Schema决定。
avro type
json type
example
null
null
null
boolean
boolean
true
int,long
integer
1
float,double
number
1.1
bytes
string
"\u00FF"
string
string
"foo"
record
object
{"a": 1}
enum
string
"FOO"
array
array
[1]
map
object
{"a": 1}
fixed
string
"\u00ff"
2、 序列化/反序列化
Avro指定两种数据序列化编码方式:binary encoding 和Json encoding。使用二进制编码会高效序列化,并且序列化后得到的结果会比较小;而JSON一般用于调试系统或是基于WEB的应用。
binary encoding规则如下:
1、 简单数据类型
Type
Encoding
Example
null
Zero bytes
Null
boolean
A single byte
{true:1, false:0}
int/long
variable-length zig-zag coding
float
4 bytes
Java"s floatToIntBits
double
8 bytes
Java"s doubleToLongBits
bytes
a long followed by that many bytes of data
string
a long followed by that many bytes of UTF-8 encoded character data
“foo”:{3,f,o,o}
06 66 6f 6f
2、 复杂数据类型
Type
encoding
Records
encoded just the concatenation of the encodings of its fields
Enums
a int representing the zero-based position of the symbol in the schema
Arrays
encoded as series of blocks. A block with count 0 indicates the end of the array. block:{long,items}
Maps
encoded as series of blocks. A block with count 0 indicates the end of the map. block:{long,key/value pairs}.
Unions
encoded by first writing a long value indicating the zero-based position within the union of the schema of its value. The value is then encoded per the indicated schema within the union.
fixed
encoded using number of bytes declared in the schema
实例:
records
{
"type":"record",
"name":"test",
"fields" : [
{"name": "a","type": "long"},
{"name": "b","type": "string"}
]
}
假设:a=27b=”foo” (encoding:36(27), 06(3), 66("f"), 6f("o"))
binary encoding:3606 66 6f 6f
enums
{"type": "enum","name": "Foo", "symbols": ["A","B", "C", "D"] }
“D”(encoding: 06(3))
binary encoding: 06
arrays
{"type": "array","items": "long"}
设:{3, 27 } (encoding:04(2), 06(3), 36(27) )
binary encoding:0406 36 00
maps
设:{("a":1), ("b":2) } (encoding:61(“a”), 62(“b”), 02(1), 04(2))
binary encoding:0261 02 02 62 04
unions
["string","null"]
设:(1)null; (2) “a”
binary encoding:
(1) 02;说明:02代表null在union定义中的位置1;
(2) 00 02 61;说明:00为string在union定义的位置,02 61为”a”的编码。
图1表示的是Avro本地序列化和反序列化的实例,它将用户定义的模式和具体的数据编码成二进制序列存储在对象容器文件中,例如用户定义了包含学号、姓名、院系和电话的学生模式,而Avro对其进行编码后存储在student.db文件中,其中存储数据的模式放在文件头的元数据中,这样读取的模式即使与写入的模式不同,也可以迅速地读出数据。假如另一个程序需要获取学生的姓名和电话,只需要定义包含姓名和电话的学生模式,然后用此模式去读取容器文件中的数据即可。
图表 1
3、 模式Schema
Schema通过JSON对象表示。Schema定义了简单数据类型和复杂数据类型,其中复杂数据类型包含不同属性。通过各种数据类型用户可以自定义丰富的数据结构。
Schema由下列JSON对象之一定义:
1. JSON字符串:命名
2. JSON对象:{“type”: “typeName” …attributes…}
3. JSON数组:Avro中Union的定义
举例:
{"namespace": "example.avro",
"type":"record",
"name":"User",
"fields": [
{"name":"name", "type": "string"},
{"name":"favorite_number", "type": ["int", "null"]},
{"name":"favorite_color", "type": ["string","null"]}
]
}
4、 排序
Avro为数据定义了一个标准的排列顺序。比较在很多时候是经常被使用到的对象之间的操作,标准定义可以进行方便有效的比较和排序。同时标准的定义可以方便对Avro的二进制编码数据直接进行排序而不需要反序列化。
只有当数据项包含相同的Schema的时候,数据之间的比较才有意义。数据的比较按照Schema深度优先,从左至右的顺序递归的进行。找到第一个不匹配即可终止比较。
两个拥有相同的模式的项的比较按照以下规则进行:
null:总是相等。
int,long,float:按照数值大小比较。
boolean:false在true之前。
string:按照字典序进行比较。
bytes,fixed:按照byte的字典序进行比较。
array:按照元素的字典序进行比较。
enum:按照符号在枚举中的位置比较。
record:按照域的字典序排序,如果指定了以下属性:
“ascending”,域值的顺序不变。
“descending”,域值的顺序颠倒。
“ignore”,排序的时候忽略域值。
map:不可进行比较。
5、 对象容器文件
Avro定义了一个简单的对象容器文件格式。一个文件对应一个模式,所有存储在文件中的对象都是根据模式写入的。对象按照块进行存储,块可以采用压缩的方式存储。为了在进行mapreduce处理的时候有效的切分文件,在块之间采用了同步记号。一个文件可以包含任意用户定义的元数据。
一个文件由两部分组成:文件头和一个或者多个文件数据块。
文件头:
四个字节,ASCII‘O’,‘b’,‘j’,1。
文件元数据,用于描述Schema。
16字节的文件同步记号。
其中,文件元数据的格式为:
i. 值为-1的长整型,表明这是一个元数据块。
ii. 标识块长度的长整型。
iii. 标识块中key/value对数目的长整型。
iv. 每一个key/value对的string key和bytesvalue。
v. 标识块中字节总数的4字节长的整数。
文件数据块:
数据是以块结构进行组织的,一个文件可以包含一个或者多个文件数据块。
表示文件中块中对象数目的长整型。
表示块中数据序列化后的字节数长度的长整型。
序列化的对象。
16字节的文件同步记号。
当数据块的长度为0时即为文件数据块的最后一个数据,此后的所有数据被自动忽略。
下图示对象容器文件的结构分解及说明:
一个存储文件由两部分组成:头信息(Header)和数据块(Data Block)。而头信息又由三部分构成:四个字节的前缀,文件Meta-data信息和随机生成的16字节同步标记符。Avro目前支持的Meta-data有两种:schema和codec。
codec表示对后面的文件数据块(File Data Block)采用何种压缩方式。Avro的实现都需要支持下面两种压缩方式:null(不压缩)和deflate(使用Deflate算法压缩数据块)。除了文档中认定的两种Meta-data,用户还可以自定义适用于自己的Meta-data。这里用long型来表示有多少个Meta-data数据对,也是让用户在实际应用中可以定义足够的Meta-data信息。对于每对Meta-data信息,都有一个string型的key(需要以“avro.” 为前缀)和二进制编码后的value。对于文件中头信息之后的每个数据块,有这样的结构:一个long值记录当前块有多少个对象,一个long值用于记录当前块经过压缩后的字节数,真正的序列化对象和16字节长度的同步标记符。由于对象可以组织成不同的块,使用时就可以不经过反序列化而对某个数据块进行操作。还可以由数据块数,对象数和同步标记符来定位损坏的块以确保数据完整性。
三、RPC实现
当在RPC中使用Avro时,服务器和客户端可以在握手连接时交换模式。服务器和客户端有彼此全部的模式,因此相同命名字段、缺失字段和多余字段等信息之间通信中需要处理的一致性问题就可以容易解决。如图2所示,协议中定义了用于传输的消息,消息使用框架后放入缓冲区中进行传输,由于传输的初始就交换了各自的协议定义,因此即使传输双方使用的协议不同所传输的数据也能够正确解析。
图表 2
Avro作为RPC框架来使用。客户端希望同服务器端交互时,就需要交换双方通信的协议,它类似于模式,需要双方来定义,在Avro中被称为消息(Message)。通信双方都必须保持这种协议,以便于解析从对方发送过来的数据,这也就是传说中的握手阶段。
消息从客户端发送到服务器端需要经过传输层(Transport Layer),它发送消息并接收服务器端的响应。到达传输层的数据就是二进制数据。通常以HTTP作为传输模型,数据以POST方式发送到对方去。在 Avro中,它的消息被封装成为一组缓冲区(Buffer),类似于下图的模型:
如上图,每个缓冲区以四个字节开头,中间是多个字节的缓冲数据,最后以一个空缓冲区结尾。这种机制的好处在于,发送端在发送数据时可以很方便地组装不同数据源的数据,接收方也可以将数据存入不同的存储区。还有,当往缓冲区中写数据时,大对象可以独占一个缓冲区,而不是与其它小对象混合存放,便于接收方方便地读取大对象。
对象容器文件是Avro的数据存储的具体实现,数据交换则由RPC服务提供,与对象容器文件类似,数据交换也完全依赖Schema,所以与Hadoop目前的RPC不同,Avro在数据交换之前需要通过握手过程先交换Schema。
1、 握手过程
握手的过程是确保Server和Client获得对方的Schema定义,从而使Server能够正确反序列化请求信息,Client能够正确反序列化响应信息。一般的,Server/Client会缓存最近使用到的一些协议格式,所以,大多数情况下,握手过程不需要交换整个Schema文本。
所有的RPC请求和响应处理都建立在已经完成握手的基础上。对于无状态的连接,所有的请求响应之前都附有一次握手过程;对于有状态的连接,一次握手完成,整个连接的生命期内都有效。
具体过程:
Client发起HandshakeRequest,其中含有Client本身SchemaHash值和对应Server端的Schema Hash值(clientHash!=null,clientProtocol=null, serverHash!=null)。如果本地缓存有serverHash值则直接填充,如果没有则通过猜测填充。
Server用如下之一HandshakeResponse响应Client请求:
(match=BOTH, serverProtocol=null,serverHash=null):当Client发送正确的serverHash值且Server缓存相应的clientHash。握手过程完成,之后的数据交换都遵守本次握手结果。
(match=CLIENT, serverProtocol!=null,serverHash!=null):当Server缓存有Client的Schema,但是Client请求中ServerHash值不正确。此时Server发送Server端的Schema数据和相应的Hash值,此次握手完成,之后的数据交换都遵守本次握手结果。
(match=NONE):当Client发送的ServerHash不正确且Server端没有Client Schema的缓存。这种情况下Client需要重新提交请求信息 (clientHash!=null,clientProtocol!=null, serverHash!=null),Server响应 (match=BOTH, serverProtocol=null,serverHash=null),此次握手过程完成,之后的数据交换都遵守本次握手结果。
握手过程使用的Schema结构如下示。
{
"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"},
{"name":"meta", "type": ["null", {"type":"map", "values": "bytes"}]}
]
}
{
"type":"record",
"name":"HandshakeResponse", "namespace":"org.apache.avro.ipc",
"fields":[
{"name":"match","type": {"type": "enum","name": "HandshakeMatch",
"symbols":["BOTH", "CLIENT", "NONE"]}},
{"name":"serverProtocol", "type": ["null","string"]},
{"name":"serverHash","type": ["null", {"type":"fixed", "name": "MD5", "size": 16}]},
{"name":"meta","type": ["null", {"type":"map", "values": "bytes"}]}
]
}
2、 消息帧格式
消息从客户端发送到服务器端需要经过传输层,它发送请求并接收服务器端的响应。到达传输层的数据就是二进制数据。通常以HTTP作为传输模型,数据以POST方式发送到对方去。在 Avro中消息首先分帧后被封装成为一组缓冲区(Buffer)。
数据帧的格式如下:
一系列Buffer:
1、4字节的Buffer长度
2、Buffer字节数据
长度为0的Buffer结束数据帧
3、 Call格式
一个调用由请求消息、结果响应消息或者错误消息组成。请求和响应包含可扩展的元数据,两种消息都按照之前提出的方法分帧。
调用的请求格式为:
请求元数据,一个类型值的映射。
消息名,一个Avro字符串。
消息参数。参数根据消息的请求定义序列化。
调用的响应格式为:
响应的元数据,一个类型值的映射。
一字节的错误标志位。
如果错误标志为false,响应消息,根据响应的模式序列化。
如果错误标志位true,错误消息,根据消息的错误联合模式序列化。
四、实例
1、 本地序列化/反序列化
user.avsc
{"namespace":"example.avro",
"type": "record",
"name": "User",
"fields": [
{"name": "name", "type":"string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type":["string", "null"]}
]
}
Main.java
public class Main {
public static void main(String[] args)throws Exception {
User user1 = new User();
user1.setName("Alyssa");
user1.setFavoriteNumber(256);
// Leave favorite color null
// Alternate constructor
User user2 = new User("Ben", 7,"red");
// Construct via builder
User user3 = User.newBuilder()
.setName("Charlie")
.setFavoriteColor("blue")
.setFavoriteNumber(null)
.build();
// Serialize user1 and user2to disk
File file = new File("users.avro");
DatumWriter<User> userDatumWriter = new SpecificDatumWriter<User>(User.class);
DataFileWriter<User> dataFileWriter = newDataFileWriter<User>(userDatumWriter);
dataFileWriter.create(user1.getSchema(),new File("users.avro"));
dataFileWriter.append(user1);
dataFileWriter.append(user2);
dataFileWriter.append(user3);
dataFileWriter.close();
// Deserialize Usersfrom disk
DatumReader<User> userDatumReader = newSpecificDatumReader<User>(User.class);
DataFileReader<User> dataFileReader = newDataFileReader<User>(file, userDatumReader);
User user = null;
while (dataFileReader.hasNext()) {
// Reuse user object bypassing it to next(). This saves us from
// allocating and garbagecollecting many objects for files with
// many items.
user = dataFileReader.next(user);
System.out.println(user);
}
}
}
2、 RPC
mail.avsc
{"namespace":"example.proto",
"protocol": "Mail",
"types": [
{"name": "Message", "type":"record",
"fields": [
{"name": "to", "type": "string"},
{"name": "from", "type": "string"},
{"name": "body", "type":"string"}
]
}
],
"messages": {
"send": {
"request": [{"name": "message","type": "Message"}],
"response": "string"
}
}
}
Main.java
public class Main {
public static class MailImpl implements Mail {
// in this simple example just return details of the message
public Utf8 send(Message message) {
System.out.println("Sending message");
return new Utf8("Sending message to " + message.getTo().toString()
+ " from " +message.getFrom().toString()
+ " with body " +message.getBody().toString());
}
}
private static Server server;
private static void startServer() throws IOException {
server = new NettyServer(new SpecificResponder(Mail.class,new MailImpl()),newInetSocketAddress(65111));
// the server implements the Mail protocol (MailImpl)
}
public static void main(String[] args)throws IOException {
System.out.println("Starting server");
// usually this would be anotherapp, but for simplicity
startServer();
System.out.println("Server started");
NettyTransceiver client = new NettyTransceiver(new InetSocketAddress(65111));
// client code - attach to the server and send a message
Mail proxy = (Mail) SpecificRequestor.getClient(Mail.class, client);
System.out.println("Client built, got proxy");
// fill in the Message record and send it
Message message = new Message();
message.setTo(new Utf8("127.0.0.1"));
message.setFrom(new Utf8("127.0.0.1"));
message.setBody(new Utf8("this is my message"));
System.out.println("Calling proxy.send with message: " + message.toString());
System.out.println("Result: " +proxy.send(message));
// cleanup
client.close();
server.close();
}
}
avro篇二:数据序列化框架Apache Avro
数据序列化框架Apache Avro
Apache框架数据结构HadoopHBase
Avro是Hadoop中的一个子项目,也是Apache中一个独立的项目,Avro是一个基于二进制数据传输高性能的中间件。在Hadoop的其他项目中例如HBase和Hive的Client端与服务端的数据传输也采用了这个工具,Avro可以做到将数据进行序列化,适用于远程或本地大批量数据交互。在传输的过程中Avro对数据二进制序列化后 节约数据存储空间 和 网络传输带宽。Avro还可以做到在同一系统中支持多种不同语言,也有点类似Apache的另一个产品:Thrift,对于Thrift不同的是Avro更加具有灵活性,Avro可以支持对定义的数据结构(Schema)动态加载,利于系统扩展。
在INFOQ2011.4架构师月刊里有详细的介绍和使用。
avro篇三:Avro Lancaster兰开斯特轰炸机从加拿大飞往伦敦拍卖
最后飞行:中标者将获得在兰开斯特的Avro从加拿大飞往伦敦
对于航空爱好者,这是一个终身难忘。一个战机遗产博物馆拍卖掉的机会,在eBay上著名的二战轰炸机飞。
在留在世界上唯一剩下的两??个适航兰开斯特之一 - - 此行的优胜者将有掏钱25000英镑为独特的旅程,从加拿大前往英格兰四天。
18个小时的旅程-最后一次斯特谷通道x将使得飞行-将在8月,根据对加拿大的军用飞机文化博物馆,这是卖了独特的机会。
eBay拍卖:加拿大战机遗产是提供飞行的42766美元(?25,000)
历史爱好者的梦想:英镑25K航班从加拿大到英国将同类的兰开斯特品牌的最后一趟
里面的轰炸机获胜者将飞英寸..
状态:在显示
适航:适航(定期飞行)
类型:轰炸机
建造时间: 1945
序列号: RCAF FM213
工程号码: 3414
民事登记: C-GVRA
电流瑕疵: RCAF KB726
该机的统计...
长度: 69英尺6英寸
翼展: 102英尺
功率: 1,640马力每个
发动机: 4×惠普梅林224
最高车速: 275英里每小时
巡航速度: 210英里每小时
实用升限: 25700英尺
范围: 2530英里
安省咸美顿的空军历史博物馆宣布,加拿大唯一能飞行的二战时代兰开斯特轰炸机(Lancaster bomber),将在今年5月飞越大西洋前往英国,与英国皇家空军的一架同型轰炸机一起,在英国进行为期一个月的巡回飞行表演后拍卖。
博物馆大卫罗勒的首席执行官说,这是第一次在飞机一直在合适的条件下,使飞行,加入的易趣拍卖:“你永远无法过一次做这样的事,于是我们想到,为什么不把它在那里?有人要他们的水桶名单上有这个。“
参加的七人船员的现金将放在对行程在什么被认为是第二次世界大战中最有名的盟军轰炸机380000英镑成本。
该Avro的兰开斯特的Mk X - 献给安德鲁Mynarski,最后加拿大的飞行员被授予了VC在第二次世界大战 - 将参与为期一个月的飞行之旅英国。
这将联手与英国纪念飞行兰卡斯特皇家空军的战役 - 第一次世界最后两个适航的兰开斯特轰炸机已经出动了一起 - 九月回国汉密尔顿之前。
该显示器将迎来非常接近英国和加拿大的关系和纪念英联邦轰炸机机组人员和这两个国家的今天空中力量的专业精神的牺牲和奉献。
起飞:在第二次世界大战中兰开斯特轰炸机的飞行需要18个小时飞行四天
条款:该战机博物馆态的赢家一定是幸福的被拍摄下来,为在旅途中的纪录??片
一个第二次世界大战兰开斯特轰炸机 - 一个类似于获胜者将在飞 - 被描绘在林肯郡航空遗产中心
兰开斯特轰炸机号码
19维多利亚十字由轰炸机司令部的人,包括盖伊·吉布森,谁领导了大坝的主力部队突袭拿下
125,000轰炸机司令部空中乘务第二次世界大战期间服务
55,573死于行动,44%的死亡率
4%的被击落每个任务平均机会 - 但机组人员必须完成至少30次机会幸存的战争比步兵军官在第一次世界大战战壕低。
9,838轰炸机队成为战俘
130万吨炸弹对德国下降了盟军
635,000是德国平民丧生的估算
轰炸机司令部死的72%是英国人。其余的分别来自加拿大,澳大利亚和新西兰
在网上拍卖网站,博物馆写道:“中标者与有机会接受培训,并作为在加拿大建兰开斯特飞机的最后一个航班从加拿大到英国在2014年8月一名船员。
“这将是大约18个小时的飞行在为期四天的时间。
“博物馆保留评估中标者的个人是否适合接受培训,以安全为船员经营权。
“最大乘员重量250磅,你必须能够爬上梯子,并游刃于狭小的地方。
“优胜者必须愿意为纪录片拍摄签署一张照片豁免。
“投标人负责运输到博物馆汉密尔顿机场和运输家来自英格兰。投标人必须在出发前的两天培训是汉密尔顿。
“博物馆将提供住宿。
“付款必须通过银行转帐内拍卖结束后五个营业日内支付。此产品不符合支付宝付款,因此不提供易趣的保护。“
没有出价都尚未作出的飞行,这将是在著名的轰炸机,下面万英尺行驶的客舱无压力。
罗勒先生说:“我们不会有餐服务或在飞行中的电影,但我们将有一个外面的。”
轰炸机被设置为离开加拿大8月4日,一路上加油前五个小时的跳数。
飞行中与一个观点:兰开斯特,飞行速度行驶低于万英尺作为客舱不加压
著名战机:中标人将飞赴英国加拿大兰开斯特轰炸机内
著名景点:存档照片PA474的Avro兰卡斯特轰炸机,类似于一个获胜者将被在行驶
来自安大略省汉密尔顿市出发,3700英里的飞行将停止在鹅湾,纽芬兰,加拿大; 纳拉萨苏克,格陵兰; 和凯夫拉维克,达到英国皇家空军科宁斯在林肯郡之前,冰岛。
Ebayers有直到5月10日进行投标就行了 - 至今已拥有近12,000看法 - 他们还需要自己预订的航班回家,因为飞行是单向的。
罗勒先生,电流斯特飞行员,说:“经鉴定,使世界上仅有的两个飞兰开斯特一起作为一个特殊的敬礼轰炸机司令部所有的退伍军人,其中许多人是在他们的80年代末和机会的难得窗口老了。“
加拿大军用飞机文化博物馆的网站说:“这也是一个机会,让英国纪念飞行和加拿大军用飞机文化博物馆之战飞起来,展示一个飞行表演,并赞扬那些曾在需要的时候谁,在加拿大,英国和整个英联邦那可能永远不会再看到。"
在兰开斯特的Avro是第二次世界大战的最认可的英国飞机之一。
它是最有名的在Dambu??ster袭击,看到19架兰开斯特攻击德国与大坝于1943年巴恩斯沃利斯先生的“弹跳炸弹的参与。
其特点采用加拿大从二战到今天的飞机 - - 这架飞机是由加拿大战机文化博物馆收购在1978年,当它经历了10年的恢复,并且自1988年以来一直保持适航。
军官指挥英国纪念飞行的皇家空军战斗,中队中队长Dunc梅森说:“要看到在这些事件两架飞机飞起来将是一个独特的景象,也有机会真正地纪念那些谁付出了最大的牺牲。我们不要忘记“。
兰开斯特专用去年加拿大飞行员被授予了VC在二战中...
一生一次:这将标志着一个兰开斯特航班从加拿大到英国的最后时间
“也许是第二次世界大战最著名的盟军轰炸机的Avro Lancaster必须令人印象深刻的飞行特性及营运表现,”加拿大军用飞机文化博物馆在其网站上说。
获胜者将被悬挂在加拿大军用飞机文化博物馆的兰开斯特的Mk X,它建于胜利飞机,莫尔顿,加拿大,于1945年7月。
这架飞机是专门为少尉安德鲁Mynarski的记忆谁被授予维多利亚十字 - 在可以颁发给英国和英联邦军队在敌人面前最高奖为勇敢。
加拿大Mynarski获奖6月13日1944年,当他的兰开斯特是在第二次世界大战期间击落在火焰由德国夜间战斗机。
由于轰炸机下跌,Mynarski设法释放的尾炮手被困在燃烧的和外的控制飞机的后部炮塔之前就死了。
独特的机会:获奖者将在什么被认为是第二次世界大战中最有名的盟军轰炸机飞
船员存活和生活来讲述这个故事,导致维多利亚十字勋章被授予1946年 - 最后一次这种奖的加拿大飞行员在第二次世界大战中。
兰开斯特轰炸机,这是飞往英国的8月,是献给Mynarski,并称为“Mynarski纪念兰开斯特”。
它是画在他的飞机KB726的颜色 - VR-A,这与加拿大皇家空军中队的飞行。
1952年,它遭遇了严重的事故,并从兰开斯特说已经飞在战斗中德国各地收到了更换翼的中心部分。
它曾作为海上巡逻机在纽芬兰多年,从皇家部队退休了1963年底。
从蒙塔基金会帮助下于1977年,它是从加拿大皇家军团在Goderich,安大略省,在那里它一直外部显示器上获得的。
十一年前它通过完全复原,再次飞到1988年9月24日。
兰开斯特(Lancaster)轰炸机是英国于二次世界大战期间非常重要的战略轰炸机之一,担负对德国城市的夜间轰炸任务。在执行三处德国水坝的轰炸任务之后获得水坝克星(Dam Buster)的昵称。
首个装备Lancaster飞机的是44中队。1942年3月3日第一次参加轰炸Heligola
ndBight矿山,然后参加1942年3-6月间对德国鲁尔区的埃森、科隆、杜伊斯堡、杜塞尔多夫的夜间照明轰炸,特别是对科隆、埃森、不来梅的3次“千机大轰炸”,是战争史上的首次。
据资料记载:5月30日夜对科隆的轰炸,一次出动飞机1046架,投弹1455吨,历时90分钟,其中有2/3为燃烧弹,科隆全城40公顷的地区被夷为平地,486人死亡,5027人受伤,14万人无家可归。这是英国人将目标轰炸改为面积轰炸后效果最明显的一次。但它的意义不在于取得的这些物质效果,也不在于对德国民心士气打击的效果,它标志着英国对德国进行大规模轰炸的开始,迫使德国处在复杂的战线上作战。德国必需加强本土的防空力量,使空军力量的使用极度分散,顾此失彼。
1943年5月“兰开斯特”担负了第二次世界大战中最为著名的一次攻击行动。5月16至17日夜间,第617轰炸机中队的兰开斯特式轰炸机执行了代号为“惩罚行动”的飞行任务——攻击德国工业中心周围的水坝,进而衰减德国的军事工业生产。“炸坝行动”,就如它后来所闻名的那样,要求使用新设计的圆柱型炸弹,投弹飞机必须在超低空以精确的速度飞行,才能保证圆柱炸弹在水面上弹跳,并沿着水坝大墙下降到大坝底部爆炸。
在谢菲尔德和曼彻斯特的山谷与水库上空连续飞行训练后,超低空飞行演练达到纯熟状态,同时“跳跃炸弹”也装配完毕。直到这个时候各机组才知道飞行训练的目的是用来攻击德国水坝,而在这之前,很多机组成员都认为用这种轰炸方式攻击普通目标简直是异想天开。
1944年11月12日,皇家空军完成了第二次世界大战中最为成功的精确轰炸任务,击沉了德国的“提尔皮茨海军上将”号战列舰。执行这项任务的是来自第9轰炸机中队和第617轰炸机中队的29架兰开斯特式轰炸机。
自从“提尔皮茨”号1941年建成以来,皇家空军、皇家海军和苏联潜艇对它进行了不下十次攻击。所以很自然德国海军吹嘘“提尔皮茨”号是“不沉之舰”。当帝国空军参谋长阿奇博尔德·辛克莱爵士,到中队驻扎的机场向飞行员们表示祝贺的时候,他说道,皇家空军击沉了“有史以来世界上最为顽强的军舰”。
对在远东服役的兰开斯特式轰炸机进行了一系列的改进,主要是修改机身以增加载油量,从而加大航程。例如在机身内增设额外的油箱,甚至还考虑到了空中加油方案。直到最后,由于改进型号使用了全然不同的发动机和自卫武器安装方式,被重新命名为林肯式轰炸机。
欧洲的战争快要结束的时候,兰开斯特式轰炸机深入德国的心脏地区活动。记录上的最后一批出击任务是1945年4月25日轰炸希特勒的山顶别墅贝希特斯加登,和对挪威石油设施的许多夜间攻击。到了战争结束的时候,“兰开斯特”一共出击156,000架次。
1945年4月,皇家空军轰炸机司令部共有56个一线战斗中队,装备了745架轰炸机,另有296架飞机用于训练。停战以后其中大部分飞机被用来运输战俘,总共输送了75,000人。
随着战争之后的和平时代来临,一些飞机改进后装备给部署在
缅甸的“猛虎队”。同时,另一有些于1946年装上了照相侦察设备,随同第152轰炸机中队和第82轰炸机中队间服役于东部、中非和西部非洲。
还有一些兰开斯特式轰炸机改装后执行海空救援任务。隶属于空军海防总队的“兰开斯特”以马耳他为基地,到1954年2月最后一架飞机返回本土之前,一直执行海上侦察飞行任务。但是一架编号为RF325的“兰开斯特”MR3型飞机却持续飞行到1956年10月15日,完成了最后一次飞行任务。
但是这并没有意味着“兰开斯特”故事的终结。相当数量的“兰开斯特”10型轰炸机服役于加拿大空军,执行各种各样的任务,包括空中测量、海空救援和海上侦察。
在加拿大,“兰开斯特”一直服役到1964年4月1日,实在令人惊奇。其它的“兰开斯特”外国用户包括阿根廷(15架经过翻新过的)和法国,共有54架“兰开斯特”服役于法国海军。
尽管生产数量巨大,时到今日只有两架还能飞行的“兰开斯特”保存下来。
PA474的“兰开斯特”是最受欢迎的不列颠战役纪念飞行器,编号FM123的“兰开斯特”由加拿大军用飞机博物馆提供的零部件组装而成,1988年完成了重建后的第一次飞行。
“兰开斯特”凭借它所使用的性能优异的“梅林”发动机和相
当实用的大弹舱以及丰富多样的作战模式,博得了军事行家的好评。作为战时英国最大的战略轰炸机,以夜间空袭为主要作战手段,几乎包揽了全部重要的战役、战斗任务,以意外少的损失,赢得了巨大战果,为反法西斯事业作出了不可估量的贡献。
采用常规布局的“兰开斯特”飞机具有一副长长的梯形悬臂中单机翼,四台发动机均安置在这相对较厚的机翼上。近矩形断面的机身前部,是一个集中了空勤人员的驾驶舱,机身下部为宽大的炸弹舱,椭圆形双垂尾和可收放后三点起落架则与当时流行的重轰炸机毫无二致。
“兰开斯特”硕大的弹舱内可灵活选挂形形色色的炸弹,除250磅常规炸弹外,还可半裸悬挂从4000、8000、12000直至22400英磅重(合10160千克)的各式巨型炸弹,用于对特殊目标的打击。作为自卫武器,它的基本装备是机枪,后机身背部和机尾分别设FN5、FN50和FN20型动力炮塔,各炮塔安装“白朗宁”7.7毫米机枪2-4挺。







