Flink de la entrada a la fragancia real (9, salida de datos del sumidero-Redis)

Si no hay un entorno redis, primero puede instalar un
sudo yum install epel-release -y en la máquina virtual

sudo yum -y instalar redis

systemctl start redis

El valor predeterminado es monitorear en 127.0.0.1, si desea ajustar, puede cambiar el archivo de configuración /etc/redis.conf para cambiar #bind 127.0.0.1 para vincular 0.0.0.0 y luego reiniciar el servicio redis (si encuentra que aún no es accesible, hay una alta probabilidad (Es un problema de firewall de Linux)

在 pom.xml 中 增加 redis 依赖
<dependency>
<groupId> org.apache.bahir </groupId>
<artifactId> flink-connector-redis_2.11 </artifactId>
<version> 1.0 </version>
</dependency>

Cree un nuevo paquete RedisSink1.scala (tenga cuidado de no tener el mismo nombre que RedisSink en el código fuente importado)
com.mafei.sinktest

import org.apache.flink.streaming.api.scala. {StreamExecutionEnvironment, createTypeInformation}
import org.apache.flink.streaming.connectors.redis.RedisSink
import org.apache.flink.streaming.connectors.redis.common.config.FlinkJedisPoolConfig
import org.apache.flink.streaming.connectors.redis.common.mapper. {RedisCommand, RedisCommandDescription, RedisMapper}

clase de caso SensorReadingTest5 (id: String, timestamp: Long, temperature: Double)

object RedisSink1 {
def main (args: Array [String]): Unit = {
// Crear entorno de ejecución
val env = StreamExecutionEnvironment.getExecutionEnvironment

val inputStream= env.readTextFile("/opt/java2020_study/maven/flink1/src/main/resources/sensor.txt")
env.setParallelism(1)
inputStream.print()

//先转换成样例类类型
val dataStream = inputStream
  .map(data =>{
    val arr = data.split(",")   //按照,分割数据,获取结果
    SensorReadingTest5(arr(0), arr(1).toLong,arr(2).toDouble)  //生成一个传感器类的数据,参数中传toLong和toDouble是因为默认分割后是字符串类别
  })

//定义一个FlinkJedisConfigBase
val conf = new FlinkJedisPoolConfig.Builder()
    .setHost("127.0.0.1")
    .setPort(6379)
    .build()
dataStream.addSink(new RedisSink[SensorReadingTest5](conf, new MyRedisMapper))
env.execute("写入redis")

}
}

// Definir una clase de mapeador de redis, que se utiliza para definir el comando llamado al guardar en la
clase de redis MyRedisMapper extiende RedisMapper [SensorReadingTest5] {

// Defina el comando para guardar datos en redis, valor de clave de nombre de tabla HSET
override def getCommandDescription: RedisCommandDescription = {
// additionalKey se usa para hset similar, establezca el nombre de tabla
new RedisCommandDescription (RedisCommand.HSET, "sensor_temper")
}

// Establecer la anulación de la clave redis
def getKeyFromData (t: SensorReadingTest5): String = t.id

// Establece el valor de redis en la
anulación de temperatura def getValueFromData (t: SensorReadingTest5): String = t.temperature.toString
}

Efecto de operación y diagrama de estructura de código
Flink de la entrada a la fragancia real (9, salida de datos del sumidero-Redis)
Inicie sesión en redis en el servidor para ver el efecto:
[root @ localhost ~] # redis-cli
127.0.0.1:6379> keys *
1) "sensor_temper"
127.0.0.1:6379> hget sensor_temper sensor1
"41.0"

Supongo que te gusta

Origin blog.51cto.com/mapengfei/2547246
Recomendado
Clasificación