Thrift最初由Facebook用做系统内各语言之间的RPC通信。2007年由Facebook贡献到Apache基金,之后发展成为一种可伸缩的、跨语言的服务开发框架。Apache Thrift—可伸缩的跨语言服务开发框架。
我们熟知的服务调用方式有很多种,比如:基于SOAP消息格式的Web Service,基于JSON消息格式的RESTful等等。所使用的数据传输方式有:XML、JSON等,然而XML相对体积太大,传输效率低,JSON体积较小,但还不够完善。
Apache Thrift采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码生成引擎可以在多种语言中使用,如:Java、C++、Python、PHP、Ruby、Perl、C#等等。其传输数据采用二进制格式,相对XML和JSON体积更小,对于高并发、大数据量和多语言的环境更有优势。
Spark Thrift Server是Spark框架中的一个应用程序,Spark Thrift Server启动的时候,会启动Spark Context、Spark SqlContext,最终调用第三方Hive框架中的HiveServer2;而第三方Hive框架的HiveServer2不仅仅提供给Spark Thrift Server使用,而且作为API接口,可以直接提供Java JDBC连接Hive Server2;第三方Hive框架中的HiveServer2使用ApacheThrift的协议开发,Thrift是Facebook实现的一种高效的、支持多种编程语言的远程服务调用的框架。
Thrift的基本概念包括数据类型、传输协议、传输层、服务端类型等。数据类型包含基本类型、结构体、容器、异常、服务类型;传输协议是Thrift客户端和服务器端远程调用传输数据采取的数据格式;传输层是数据传输方式;服务端类型包括单线程服务、多线程服务等。
1.数据类型
Thrift脚本可定义的数据类型包括以下几种类型:
1)基本类型:
●bool:布尔值,true或false,对应Java的boolean。
●byte:8位有符号整数,对应Java的byte。
●i16:16位有符号整数,对应Java的short。
●i32:32位有符号整数,对应Java的int。
●i64:64位有符号整数,对应Java的long。
●double:64位浮点数,对应Java的double。
●string:未知编码文本或二进制字符串,对应Java的String。
2)结构体类型:
●struct:定义公共的对象,类似于C语言中的结构体定义,在Java中是一个JavaBean。
3)容器类型:
●list:对应Java的ArrayList。
●set:对应Java的HashSet。
●map:对应Java的HashMap。(www.xing528.com)
4)异常类型:
●exception:对应Java的Exception。
5)服务类型:
●service:对应服务的类。
2.协议
Thrift可以让用户选择客户端与服务端之间传输通信协议的类别,在传输协议上总体划分为文本(Text)和二进制(Binary)传输协议,为节约带宽,提高传输效率,一般情况下使用二进制类型的传输协议为多数,有时也会使用基于文本类型的协议,这需要根据项目/产品中的实际需求。常用协议有以下几种:
1)TBinaryProtocol——二进制编码格式进行数据传输。
2)TCompactProtocol——高效率的、密集的二进制编码格式进行数据传输。
3)TJSONProtocol——使用JSON的数据编码协议进行数据传输。
4)TSimpleJSONProtocol——只提供JSON只写的协议,适用于通过脚本语言解析。
3.传输层
Thrift常用的传输层有以下几种:
1)TSocket——使用阻塞式I/O进行传输,是最常见的模式。
2)TFramedTransport——使用非阻塞方式,按块的大小进行传输,类似于Java中的NIO。
3)TNonblockingTransport——使用非阻塞方式,用于构建异步客户端。
4.服务端类型
Thrift常见的服务端类型有以下几种:
1)TSimpleServer——单线程服务器端使用标准的阻塞式I/O。
2)TThreadPoolServer——多线程服务器端使用标准的阻塞式I/O。
3)TNonblockingServer——多线程服务器端使用非阻塞式I/O。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。