原文名:Apache Ignite(三):核心特性之大数据处理、客户端和部署
本文是Ignite系列的第三篇介绍性文章,内容整体比较简略,和第二篇文章一起,大体上介绍了Ignite平台的所有关键技术点,方便大家有一个整体的认识,供技术选型时参考。
一、Spark共享RDD
Apache Ignite提供了一个Spark RDD抽象的实现,他允许跨越多个Spark作业时方便地在内存内共享状态,不管是在同一个应用内部还是在不同的Spark应用之间。
IgniteRDD作为Ignite分布式缓存的视图,既可以在Spark作业执行进程中部署,也可以在Spark workder中部署,也可以在他自己的集群中部署。
根据事先配置好的部署模型,状态共享既可以只存在于一个Spark应用的生命周期的内部(嵌入式模式),或者也可以存在于Spark应用的外部(独立模式),这种模式下状态可以在多个Spark应用之间共享。
特性一览
- 共享Spark RDD:
IgniteRDD是原生Spark RDD的一个实现,DataFrame API具有所有标准RDD的功能,并且RDD的状态可以在Spark作业、应用以及worker之间共享。
- 更快的SQL:
Spark不支持SQL索引,但是Ignite可以,由于先进的内存索引功能,IgniteRDD在执行SQL查询时比Spark原生RDD或者DataFrame有百倍的性能提升。
二、内存文件系统
Ignite一个独有的技术就是分布式内存文件系统(IGFS),IGFS提供了和Hadoop HDFS类似的功能,但是仅仅在内存内部。事实上,除了他自己的API,IGFS实现了Hadoop的文件系统API,并且可以透明地加入Hadoop或者Spark应用。
IGFS将每个文件中的数据拆分为独立的数据块然后将他们存储在分布式内存缓存中。然而和Hadoop HDFS不同,IGFS不需要一个name节点,并且用一个哈希函数自动地确定文件数据位置。
IGFS可以独立部署,也可以部署在HDFS之上,不管是哪种情况,他对于HDFS中存储的文件都是一个透明的缓存层。
特性一览
- 堆内和堆外:
IGFS既可以在堆内,也可以在堆外存储文件,对于更大的存储空间关键是利用堆外来避免长时间的JVM垃圾回收导致的暂停。
- IGFS作为Hadoop文件系统:
IGFS实现了Hadoop的FileSystem API,并且可以部署为原生的Hadoop文件系统,就像HDFS一样,这样就可以在Hadoop或者Spark环境中以即插即用的方式原生部署IGFS。
- Hadoop文件系统缓存:
IGFS也可以在另一个Hadoop文件系统上部署为一个缓存层。这种情况下,IGFS中的一个文件如果发生变化,更新会被自动地写入HDFS。此外,如果读取了一个文件并且当时他不在IGFS中,Ignite会自动地将其从HDFS载入IGFS。
- Hadoop发行版:
IGFS集成了一个原生的Apache Hadoop,也支持Cloudera CDH以及Hortonworks HDP。
三、内存MapReduce
Apache Ignite带来了一个Hadoop MapReduce API的内存实现,他比原生的Hadoop MapReduce实现有了显著的性能提升。Ignite MapReduce比Hadoop性能更好,是因为基于推的资源分配以及数据的进程内协同计算。
另外,因为IGFS不需要一个name节点,当使用IGFS时,Ignite MapReduce作业会在一个链路内直达IGFS数据节点。
特性一览
- 原生Hadoop MapReduce:
Ignite MapReduce是Hadoop MapReduce API的一个实现,他可以原生地加入已有的Hadoop环境,并且性能有很大的提升。
- Hadoop加速:
Ignite提供了一个Hadoop的加速发行版,包括IGFS以及Ignite MapReduce,这个环境可以很容易地加入已有的Hadoop环境。
四、客户端协议
对于客户端连接Ignite集群,Ignite提供了若干种协议,包括Ignite原生客户端,REST/HTTP,SSL/TLS,Memcached,Node.js(正在开发中)等等。
详细说明如下:
- Ignite原生客户端:
对于客户端远程连接Ignite,原生客户端提供了完整的功能,他允许使用完整的Ignite API,包括近缓存,事务,计算,流式处理,服务等等。
- Memcached:
Ignite兼容于Memcached,他允许用户使用任何Memcached兼容客户端在Ignite缓存中保存以及获取分布式数据,包括Java、PHP、Python、Ruby以及其他的客户端。
- REST/HTTP:
Ignite提供了一个HTTP REST客户端,可以以REST的方式通过HTTP或者HTTPS协议进行通信。REST API可以进行执行很多的操作,比如从缓存中读取,实行任务,获取各种度量等等。
- SSL/TLS:
Ignite允许在所有的Ignite客户端和服务端节点之间使用SSL进行Socket通信。
- Node.js(开发中):
Ignite未来会提供Node.js客户端,他能进行所有的缓存操作以及在Ignite中存储的JSON数据中执行SQL查询。
五、部署环境
Apache Ignite可以独立运行,在集群中运行,在Docker容器中运行,还可以运行在Apache Mesos以及Hadoop Yarn环境。他可以在物理机上运行,也可以在虚拟机上运行。
特性一览
- 独立集群:
Ignite节点之间会自动感知,这有助于集群的可扩展性,而不需要重启集群,简单地启动新加入的节点然后他们就是自动地加入集群。
- Docker容器:
Docker可以将Ignite及其所有的依赖打包进一个标准的映像。Docker下载Ignite版本映像之后,就可以将用户的应用部署进Ignite,配置节点,他会自动启动整个配置后的Ignite节点。
- 公共云:
对于公共云环境,Ignite原生地集成了Amazon AWS和GCE,对于其他的云环境,Ignite集成了Apache JCloud,他支持大多数已有的云服务商。
- Apache Mesos:
Ignite提供了Apache Mesos的原生支持,可以很容易地将Ignite部署进Mesos数据中心,比如Hadoop和Spark环境。
- Hadoop Yarn:
Ignite提供了Hadoop Yarn的原生支持,可以很容易地将Ignite部署进Hadoop和Spark环境。