美文网首页码农的世界互联网科技大数据
使用spark-redis组件访问云数据库Redis

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

作者: 阿里云技术 | 来源:发表于2019-08-19 14:42 被阅读24次

作者:无谓 阿里巴巴高级技术专家,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

作者:无谓
阅读原文
本文为云栖社区原创内容,未经允许不得转载。

相关文章

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

    作者:无谓 阿里巴巴高级技术专家,2008年加入阿里巴巴集团,先后在B2B和阿里云工作,一直从事大数据和分布式计算...

  • web信息泄露

    1.redis数据库任意访问 简介 redis默认数据库端口6379, 未设置密码造成任意访问,然后使用redis...

  • 阿里云redis rinetd 配置

    阿里云数据库 Redis 需要通过 ECS 的内网进行连接访问,如果您本地需要通过公网访问云数据库 Redis,可...

  • 云数据库 Redis 版功能特性

    关于云数据库 Redis 版详细了解: 云数据库 Redis 版使用教程 (云数据库Redis版是兼容Redis协...

  • redis 批量删除key

    redis数据库访问密码,使用下面的命令 特定的数据库,使用下面的命令 -n参数

  • Redis面试题复习

    Redis面试题汇总 使用Redis的好处? key-value 形式的内存数据库。 数据访问在内存中,访问速度快...

  • Redis

    redis(remote dictionary server)远程字段访问nosql数据库 主要的使用场景是充当缓...

  • 使用Nginx替代rinetd访问阿里云Redis

    服务使用的阿里云的Redis,但是阿里云的Redis不提供公网地址,因此如果公司内网要访问Redis必然需要一个代...

  • Vue+Node.js部署到Heroku

    简介 使用Heroku的免费云服务来部署Express服务器,数据库使用的是MongoDB云数据库。由于国内访问这...

  • 1.使用redis-cli进行数据迁移

    注意事项 由于云数据库 Redis 版仅支持从阿里云内网访问,所以此操作方案仅在阿里云 ECS 上执行才生效。 若...

网友评论

    本文标题:使用spark-redis组件访问云数据库Redis

    本文链接:https://www.haomeiwen.com/subject/qxmssctx.html