关于Flink写入Redis没有incrByFloat等方法的解决措施

首当其冲:改源码。
使用的是org.apache.bahir:flink-connector-redis_2.11
目前2020年8月中maven官方库中最新的版本只有1.0。此版本未提供incrByFloat的方法。

首先猜测可能maven库不是最新的。去到此项目的github上一看。居然是1.1-SNAPSHOT的版本。但是此版本中仍然没有找到incrByFloat

所以我们可以使用改源码重新编译的方式来解决这个问题。org.apache.flink:flink-connector-redis_2.11库与其类似。好在这个库比较简单,不需要做结构性的改动。

本博客意在记录需要改动源码的地方。

  • org.apache.flink.streaming.connectors.redis.common.container.RedisCommandsContainer
    redis的操作接口,在这里添加void incrByFloat(String key, Double value);
    的接口定义。
  • 操作接口的实现有2处。org.apache.flink.streaming.connectors.redis.common.container.RedisClusterContainerorg.apache.flink.streaming.connectors.redis.common.container.RedisContainer
    加入incrByFloat实现:(写法完全照抄其他方法实现)
    @Override
    public void incrByFloat(String key, Double value) {
        Jedis jedis = null;
        try {
            jedis = getInstance();
            jedis.incrByFloat(key, value);
        } catch (Exception e) {
            if (LOG.isErrorEnabled()) {
                LOG.error("Cannot send Redis message with command INCRBYFLOAT to key {} and value {} error message {}",
                        key, value, e.getMessage());
            }
            throw e;
        }finally {
            releaseInstance(jedis);
        }
    }
  • org.apache.flink.streaming.connectors.redis.common.mapper.RedisCommand
    redis操作指令枚举
    加入INCRBYFLOAT(RedisDataType.STRING),

  • org.apache.flink.streaming.connectors.redis.RedisSink:
    最后在sink中的switch中加入对incrByFloat的支持

case INCRBYFLOAT:
	this.redisCommandsContainer.incrByFloat(key, Double.valueOf(value));
	break;

至此大功告成。maven安装即可。注意要在父工程中安装才行。
mvn install

然后就可以在其他项目中使用了,可以选择maven本地引用(注意版本是1.1-SNAPSHOT),也可以直接引用jar包。

<dependency>
      <groupId>org.apache.bahir</groupId>
      <artifactId>flink-connector-redis_2.11</artifactId>
      <version>1.1-SNAPSHOT</version>
  </dependency>

其他方法缺失也可以使用同样方法在同样位置加代码。这就是有源码的好处,还可以改工程的version。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
java flink是一个高性能的分布式流式计算框架,可以实现大规模的数据处理和分析。而hive是一个分布式数据仓库工具,可以用于存储和查询大规模的结构化数据。redis是一个高性能的内存数据库,可以用于存储和检索数据。 要实现java flink读取hive表中的数据写入redis,我们可以按照以下步骤进行操作: 1. 在java flink中,首先需要配置并连接到hive数据库。可以使用Flink的HiveCatalog来创建一个连接到Hive的catalog,并设置相关的hive metastore地址、用户名和密码等。 2. 根据需要,编写flink程序来读取hive表的数据。可以使用flink的DataStream或Table API来读取hive表数据,并将其转换为适当的数据流或表。 3. 在准备好数据之后,我们可以使用flinkRedisSink来将数据写入redis中。在使用RedisSink之前,需要先引入flink-connector-redis的依赖包,并在flink配置文件中配置好redis的连接参数,如redis的主机地址、端口号、密码等。 4. 编写代码将数据写入redis。可以根据数据的特点,选择将整个数据写入一个redis数据结构中,或者将数据分解为多个key-value对存储到redis中。 5. 在代码编写完成后,我们可以使用flink提供的命令或者IDE工具来运行flink程序,它会自动连接到hive数据库和redis,并完成数据的读取和写入。 通过以上步骤,java flink就可以实现读取hive表中的数据并写入redis。这样可以通过flink的分布式计算和hive的数据存储能力,结合redis的高速读写能力,实现大规模数据的处理和查询。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值