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
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"