使用spark-redis组件访问云数据库Redis

本文涉及的产品
EMR Serverless Spark 免费试用,1000 CU*H 有效期3个月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 本文演示了在Spark Shell中通过spark-redis组件读写Redis数据的场景。所有场景在阿里云E-MapReduce集群内完成,Redis使用阿里云数据库Redis。

作者:无谓 阿里巴巴高级技术专家,2008年加入阿里巴巴集团,先后在B2B和阿里云工作,一直从事大数据和分布式计算相关研究,作为主要开发和运维人员经历了阿里内部大数据集群的上线和发展壮大,现在阿里云EMR团队,负责Spark、Hadoop等计算引擎研发。


本文演示了在Spark Shell中通过spark-redis组件读写Redis数据的场景。所有场景在阿里云E-MapReduce集群内完成,Redis使用阿里云数据库Redis。

创建服务

我们以EMR-3.21.0版本和Redis 4.0为例。EMR集群安装的Spark版本是2.4.3,我们需要使用对应的Spark-Redis 2.4版本,该组件可以支持Redis 2.9.0以上版本。

EMR和Redis需要在同一个VPC网络中创建,同时,在云数据库Redis实例启动之后,需要在“白名单设置”中添加EMR集群IP地址(参考Redis快速入门文档)。

启动Spark Shell

接下去,我们登录EMR Master节点启动Spark Shell。如果Master节点可以连接外网,可以使用package方式加载spark-redis相关jar包:

 --conf spark.redis.host=hostname \
 --conf spark.redis.port=6379 \
 --conf spark.redis.auth=password

spark.redis.host等参数可以在命令行指定,也可以配置在 spark-defaults.conf 中,也可以在代码中指定。其中:

1.spark.redis.host:Redis内网连接地址
2.spark.redis.port:Redis服务端口号
3.spark.redis.auth:创建Redis实例时指定的密码

也可以通过--jars的方式指定依赖的jar包:

 --conf spark.redis.host=hostname \
 --conf spark.redis.port=6379 \
 --conf spark.redis.auth=password

通过Spark写入数据到Redis(RDD)

import com.redislabs.provider.redis._

scala> val data = Array(("key1", "v1"), ("key2", "world"), ("key3", "hello"), ("key4", "Hong"), ("key5", "Kong"))    
data: Array[(String, String)] = Array((key1,v1), (key2,world), (key3,hello), (key4,Hong), (key5,Kong))

scala> val distData = sc.parallelize(data)    
distData: org.apache.spark.rdd.RDD[(String, String)] = ParallelCollectionRDD[0] at parallelize at <console>:29

scala> sc.toRedisKV(distData)

读取Redis(RDD)

stringRDD: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[3] at map at <console>:27

scala> val values = stringRDD.collect()
values: Array[String] = Array(world, hello, v1, Kong, Hong)

scala> println(values.mkString(","))
world,hello,v1,Kong,Hong

Spark DataFrame写入Redis

defined class Person

scala> val personSeq = Seq(Person("John", 30), Person("Peter", 45))
personSeq: Seq[Person] = List(Person(John,30), Person(Peter,45))

scala> val df = spark.createDataFrame(personSeq)
df: org.apache.spark.sql.DataFrame = [name: string, age: int]

scala> df.write.format("org.apache.spark.sql.redis").option("table", "person").save()
                                                                                

参考文档

更多使用spark-redis的方式请参考官方文档:

1.spark-redis Package:https://spark-packages.org/package/RedisLabs/spark-redis
2.spark-redis Github:https://github.com/RedisLabs/spark-redis

_

相关实践学习
基于EMR Serverless StarRocks一键玩转世界杯
基于StarRocks构建极速统一OLAP平台
快速掌握阿里云 E-MapReduce
E-MapReduce 是构建于阿里云 ECS 弹性虚拟机之上,利用开源大数据生态系统,包括 Hadoop、Spark、HBase,为用户提供集群、作业、数据等管理的一站式大数据处理分析服务。 本课程主要介绍阿里云 E-MapReduce 的使用方法。
相关文章
|
20天前
|
存储 NoSQL 数据库
Redis 逻辑数据库与集群模式详解
Redis 是高性能内存键值数据库,广泛用于缓存与实时数据处理。本文深入解析 Redis 逻辑数据库与集群模式:逻辑数据库提供16个独立存储空间,适合小规模隔离;集群模式通过分布式架构支持高并发和大数据量,但仅支持 database 0。文章对比两者特性,讲解配置与实践注意事项,并探讨持久化及性能优化策略,助你根据需求选择最佳方案。
50 5
|
20天前
|
NoSQL 安全 Java
深入理解 RedisConnectionFactory:Spring Data Redis 的核心组件
在 Spring Data Redis 中,`RedisConnectionFactory` 是核心组件,负责创建和管理与 Redis 的连接。它支持单机、集群及哨兵等多种模式,为上层组件(如 `RedisTemplate`)提供连接抽象。Spring 提供了 Lettuce 和 Jedis 两种主要实现,其中 Lettuce 因其线程安全和高性能特性被广泛推荐。通过手动配置或 Spring Boot 自动化配置,开发者可轻松集成 Redis,提升应用性能与扩展性。本文深入解析其作用、实现方式及常见问题解决方法,助你高效使用 Redis。
110 4
|
2月前
|
NoSQL Java Redis
Redis Pipeline介绍 ---- 提高操作Redis数据库的执行效率。
Redis Pipeline是提高Redis执行效率的重要技术,通过批量发送命令,显著减少了网络往返次数,提高了系统的吞吐量和性能。在实际应用中,合理使用Pipeline可以有效优化Redis的性能,特别是在需要批量操作的场景下。本文通过Python和Java的示例代码展示了如何实现和使用Redis Pipeline,为开发者提供了具体的操作指南。
68 16
|
2月前
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
3月前
|
缓存 NoSQL Redis
Redis原理—2.单机数据库的实现
本文概述了Redis数据库的核心结构和操作机制。
Redis原理—2.单机数据库的实现
|
8月前
|
canal 缓存 NoSQL
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
根据对一致性的要求程度,提出多种解决方案:同步删除、同步删除+可靠消息、延时双删、异步监听+可靠消息、多重保障方案
Redis缓存与数据库如何保证一致性?同步删除+延时双删+异步监听+多重保障方案
|
4月前
|
存储 缓存 NoSQL
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
云端问道21期方案教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
|
10月前
|
缓存 NoSQL Java
Redis 缓存与数据库数据不一致问题
Redis 缓存与数据库数据不一致问题
163 3
|
9月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
8月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
1448 2