【发布时间】:2019-05-08 06:57:25
【问题描述】:
我有一个使用 Apache Spark 将键值数据写入 Redis 的应用程序。该应用程序没有任何问题。但是,应用程序要慢得多。我在这里寻找一些建议,以提高写入吞吐量并在将数据写入 Redis 时增加并行度。
这里是代码
Dataset<Row> rowkeyMapping = services.select(regexp_replace(col("rowkey"), "_", "").as("rowkey"),struct(regexp_replace(col("name"), "\\[", ","), regexp_replace(col("oname"), "\\[", ","), col("cid")).as("detailsinfo"));
rowkeyMapping.foreach(obj -> {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(5000);
JedisPool pool = new JedisPool(poolConfig, "redis-host", Integer.parseInt("6379"));
Jedis jedis = pool.getResource();
ObjectMapper om = new ObjectMapper();
String[] rowArray = obj.mkString()
.replaceAll("[\\[]", ",")
.split(",");
String key = rowArray[0];
DetailInfo detail = new DetailInfo();
detail.setName(rowArray[1]);
detail.setOName(rowArray[2]);
detail.setCid(rowArray[3]);
String value = om.writeValueAsString(detail);
logger.info("writing key value pairs to Redis cache (Key) :: " + key);
jedis.set(key, value);
jedis.quit();
});
我对 Redis Pipelining 了解甚少。但是,我认为流水线更多的是批处理命令。在这里,就我而言,我正在处理数百万个数据。我不确定流水线是否最合适。
任何帮助表示赞赏。在此先感谢。
【问题讨论】:
-
好吧,我尝试使用这个库,但它有很多问题。于是,我开始使用 Jedis java 库。
标签: java apache-spark redis