Ignite集成Spark之IgniteDataFrames
  下面简要地回顾一下在第一篇文章中所谈到的内容。
  
  Ignite是一个分布式的内存数据库、缓存和处理平台,为事务型、分析型和流式负载而设计,在保证扩展性的前提下提供了内存级的性能。
  
  Spark是一个流式数据和计算引擎,通常从HDFS或者其他存储中获取数据,一直以来,他都倾向于OLAP型业务,并且聚焦于MapReduce类型负载。
  
  因此,这两种技术是可以互补的。
  
  将Ignite与Spark整合
  
  整合这两种技术会为Spark用户带来若干明显的好处:
  
  通过避免大量的数据移动,获得真正可扩展的内存级性能;
  
  提高RDD、DataFrame和SQL的性能;
  
  在Spark作业之间更方便地共享状态和数据。
  
  下图中显示了如何整合这两种技术,并且标注了显著的优势:
  
  在第一篇文章中,主要聚焦于IgniteRDD,而本文会聚焦于IgniteDataFrames。
  
  IgniteDataframes
  
  Spark的DataFrame API为描述数据引入了模式的概念,Spark通过表格的形式进行模式的管理和数据的组织。
  
  DataFrame是一个组织为命名列形式的分布式数据集,从概念上讲,DataFrame等同于关系数据库中的表,并允许Spark使用Catalyst查询优化器来生成高效的查询执行计划。而RDD只是跨集群节点分区化的元素集合。
  
  Ignite扩展了DataFrames,简化了开发,改进了将Ignite作为Spark的内存存储时的数据访问时间,好处包括:
  
  通过Ignite读写DataFrames时,可以在Spark作业之间共享数据和状态;
  
  通过优化Spark的查询执行计划加快SparkSQL查询,这些主要是通过IgniteSQL引擎的高级索引以及避免了Ignite和Spark之间的网络数据移动实现的。
  
  IgniteDataframes示例
  
  下面通过一些代码以及搭建几个小程序的方式,了解Ignite DataFrames如何使用,如果想实际运行这些代码,可以从GitHub上下载。
  
  一共会写两个Java的小应用,然后在IDE中运行,还会在这些Java应用中执行一些SQL。
  
  一个Java应用会从JSON文件中读取一些数据,然后创建一个存储于Ignite的DataFrame,这个JSON文件Ignite的发行版中已经提供,另一个Java应用会从Ignite的DataFrame中读取数据然后使用SQL进行查询。
  
  下面是写应用的代码:
  
  public class DFWriter {
  
  private static final String CONFIG = "config/example-ignite.xml";
  
  public static void main(String args[]) {
  
  Ignite ignite = Ignition.start(CONFIG);
  
  SparkSession spark = SparkSession
  
  .builder()
  
  .appName("DFWriter")
  
  .master("local")
  
  .config("spark.executor.instances", "2")
  
  .getOrCreate();
  
  Logger.getRootLogger().setLevel(Level.OFF);
  
  Logger.getLogger("org.apache.ignite").setLevel(Level.OFF);
  
  Dataset<Row> peopleDF = spark.read().json(
  
  resolveIgnitePath("resources/people.json").getAbsolutePath());
  
  System.out.println("JSON file contents:");
  
  peopleDF.show();
  
  System.out.println("Writing DataFrame to Ignite.");
  
  peopleDF.write(www.mingcheng178.com)
  
  .format(IgniteDataFrameSettings.FORMAT_IGNITE())
  
  .option(IgniteDataFrameSettings.OPTION_CONFIG_FILE(), CONFIG)
  
  .option(IgniteDataFrameSettings.OPTION_TABLE(), "people")
  
  .option(IgniteDataFrameSettings.OPTION_CREATE_TABLE_PRIMARY_KEY_FIELDS(), "id")
  
  .option(IgniteDataFrameSettings.OPTION_CREATE_TABLE_PARAMETERS(), "template=replicated")
  
  .save();
  
  System.out.println("Done!");
  
  Ignition.stop(false);
  
  }
  
  }
  
  在DFWriter中,首先创建了SparkSession,它包含了应用名,之后会使用spark.read().json()读取JSON文件并且输出文件内容,下一步是将数据写入Ignite存储。下面是DFReader的代码:
  
  public class DFReader {
  
  private static final String CONFIG = "config/example-ignite.xml";
  
  public static void main(String args[]) {
  
  Ignite ignite = Ignition.start(CONFIG);
  
  SparkSession spark = SparkSession
  
  .builder()
  
  .appName("DFReader"www.gcyL157.com)
  
  .master("local")
  
  .config("spark.executor.instances", "2")
  
  .getOrCreate();
  
  Logger.getRootLogger().setLevel(Level.OFF);
  
  Logger.getLogger("org.apache.ignite").setLevel(Level.OFF);
  
  System.out.println("Reading data from Ignite table.");
  
  Dataset<Row> peopleDF = spark.read()
  
  .format(IgniteDataFrameSettings.FORMAT_IGNITE())
  
  .option(IgniteDataFrameSettings.OPTION_CONFIG_FILE(), CONFIG)
  
  .option(IgniteDataFrameSettings.www.mcyllpt.com OPTION_TABLE(), "people")
  
  .load();
  
  peopleDF.createOrReplaceTempView("people");
  
  Dataset<Row> sqlDF = spark.sql("SELECT * FROM people WHERE id > 0 AND id < 6");
  
  sqlDF.show(www.mhylpt.com/  );
  
  System.out.println("Done!");
  
  Ignition.stop(false);
  
  }
  
  }
  
  在DFReader中,初始化和配置与DFWriter相同,这个应用会执行一些过滤,需求是查找所有的id > 0 以及 < 6的人,然后输出结果。
  
  在IDE中,通过下面的代码可以启动一个Ignite节点:
  
  public class ExampleNodeStartup www.michenggw.com {
  
  public static void main(String[] args) throws IgniteException {
  
  Ignition.start("config/example-ignite.xml");
  
  }
  
  }
  
  到此,就可以对代码进行测试了。
  
  运行应用
  
  首先在IDE中启动一个Ignite节点,然后运行DFWriter应用,输出如下:
  
  JSON file www.dfgjpt.com contents:
  
  +-------------------+---+------------------+
  
  |         department| id|              name|
  
  +-------------------+---+------------------+
  
  |Executive Committee|  1|       Ivan Ivanov|
  
  |Executive Committee|  2|       Petr Petrov|
  
  |         Production|  3|          John Doe|
  
  |         Production|  4|         Ann Smith|
  
  |         Accounting|  5|    Sergey Smirnov|
  
  |         Accounting|  6|Alexandra Sergeeva|
  
  |                 IT|  7|         Adam West|
  
  |        Head Office|  8|    Beverley Chase|
  
  |        Head Office|  9|      Igor Rozhkov|
  
  |                 IT| 10|Anastasia Borisova|
  
  +-------------------+---+------------------+
  
  Writing DataFrame to Ignite.
  
  Done!
  
  如果将上面的结果与JSON文件的内容进行对比,会显示两者是一致的,这也是期望的结果。
  
  下一步会运行DFReader,输出如下:
  
  Reading data from Ignite table.
  
  +-------------------+--------------+---+
  
  |         DEPARTMENT|          NAME| ID|
  
  +-------------------+--------------+---+
  
  |Executive Committee|   Ivan Ivanov|  1|
  
  |Executive Committee|   Petr Petrov|  2|
  
  |         Production|      John Doe|  3|
  
  |         Production|     Ann Smith|  4|
  
  |         Accounting|Sergey Smirnov|  5|
  
  +-------------------+--------------+---+
  
  Done!
  
  这也是期望的输出。
  
  总结
  
  通过本文,会发现使用Ignite DataFrames是如何简单,这样就可以通过Ignite DataFrame进行数据的读写了。
  
  未来,这些代码示例也会作为Ignite发行版的一部分进行发布。
  
  关于Ignite和Spark的集成,内容就是这些了。
Ignite集成Spark之IgniteDataFrames的更多相关文章
- Ignite(三): Ignite VS Spark
		
参考:https://www.itcodemonkey.com/article/9613.html gnite 和 Spark,如果笼统归类,都可以归于内存计算平台,然而两者功能上虽然有交集,并且 I ...
 - CDH搭建和集成spark、kafka操作
		
系统:Centos7 CDH版本:5.14.0 请自己提前安装好:mysql.jdk 并下载好相关依赖(每一台机器) yum -y install chkconfig python bind-util ...
 - Apache Hudi集成Spark SQL抢先体验
		
Apache Hudi集成Spark SQL抢先体验 1. 摘要 社区小伙伴一直期待的Hudi整合Spark SQL的PR正在积极Review中并已经快接近尾声,Hudi集成Spark SQL预计会在 ...
 - Ignite与Spark集成时,ClassNotFoundException问题解决
		
参考文章:https://apacheignite-fs.readme.io/docs/installation-deployment Spark application deployment mod ...
 - 详解 jupyter notebook 集成 spark 环境安装
		
来自: 代码大湿 代码大湿 1 相关介绍 jupyter notebook是一个Web应用程序,允许你创建和分享,包含活的代码,方程的文件,可视化和解释性文字.用途包括:数据的清洗和转换.数值模拟.统 ...
 - spring-boot集成spark并使用spark-sql
		
首先添加相关依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
 - Spark Ignite踩坑记录
		
Ignite spark 踩坑记录 简述 ignite访问数据有两种模式: Thin Jdbc模式: Jdbc 模式和Ignite client模式: shell客户端输出问题,不能输出全列: 针对上 ...
 - Ignite(二): 架构及工具
		
1.集群和部署 Ignite集群基于无共享架构,所有的集群节点都是平等的,独立的,整个集群不存在单点故障. 通过灵活的Discovery SPI组件,Ignite节点可以自动地发现对方,因此只要需要, ...
 - Spark与缓存
		
预期成果 1.1 当前问题 当前以图搜图应用存在的问题: 当前使用spark RDD方案无法达到数据实时加载(每10分钟加载一次,虽然可配,但太短可能会有问题) Spark RDD内存会被分为两部 ...
 
随机推荐
- Android.mk模板
			
此文列出Android.mk的常用模板(部分内容源于多篇他人博客,这里不具体指出),如有错漏,还请在评论中指出,后期持续更新 #链接第三方动态库,在和部分android源码的编译中验证不过 LOC ...
 - 88E1111
			
千兆网phy芯片 支持GMII,RGMII,MII等接口 具备4个GMII时钟模式 支持自适应功能 超低功耗模式 功率降低模式 MDC/MDIO/TWSI接口 支持10Mb/s,100Mb/s,100 ...
 - Spring下读取properties文件
			
由于在spring的xml文件中配置了 <bean id="validator" class="org.springframework.validation.bea ...
 - 原创 :xftp  SFTP子系统申请已拒绝 请确保SSH链接的SFTP子系统设置有效
			
在出现这个错误时候 如果你的远程连接没有问题 那么就执行下面的命令 service sshd restart 搞定!
 - bfs染色法判定二分图
			
#include<iostream> #include<queue> #include<cstring> #include<cstdio> using ...
 - JS中的delete操作符
			
首先,delete删除成功返回true,失败返回false. js代码: function wxCount ($element) { this.init($element); } wxCount.pr ...
 - archlinux alsa安装,音量设置和音量信息保存
			
1,使用前确认安装了alsa-utils sudo pacman -S alsa-utils2,运行alsamixer调试音量 alsamixer左右键选择调哪个,将Master和PCM按“m”解除静 ...
 - 洛谷 P1019 单词接龙 (DFS)
			
题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...
 - substring  substr slice 区别
			
1. substring(start,end) 返回指定索引区间的字串,不改变原字符串 start 必需,开始位置的索引,一个非负的整数 end 可选,结束位置的索引(不包括其本身),如果未设置, ...
 - Django REST framework 中的视图
			
1.Request REST framework传入视图的request对象不再是Django默认的Httprequest对象,而是DRF提供的扩展类的Request类的对象 常用属性 request ...