Use la idea para escribir Spark Streaming_updateStateByKey

Use la idea para escribir Spark Streaming_updateStateByKey

paquete cn.itcast.streaming
import org.apache.spark.streaming.dstream. {DStream, ReceiverInputDStream}
import org.apache.spark.streaming. {Segundos, StreamingContext}
import org.apache.spark. {SparkConf, SparkContext}
objeto WordCount2 {
def main (args: Array [String]): Unit = {
// 1. Create StreamingContext
//spark.master debe establecerse como local [n], n> 1
val conf = new SparkConf (). setAppName ("wc ”) .SetMaster (“ local [*] ”)
val sc = new SparkContext (conf)
sc.setLogLevel (“ WARN ”)
val ssc = new StreamingContext (sc, Seconds (5)) // 5 significa hacer coincidir los datos en 5 segundos Dividir en un RDD
// el requisito falló: ...
configúrelo mediante StreamingContext.checkpoint (). // Nota: Usamos updateStateByKey a continuación para acumular datos actuales e históricos
// Entonces, ¿dónde existen los datos históricos? Necesitamos establecerle un directorio de punto de control
ssc.checkpoint ("./ wc") // HDFS en desarrollo
// 2. Monitor Socket recibir datos
// ReceiverInputDStream es todos los datos recibidos El RDD está encapsulado en DStream. La siguiente operación en DStream es operar en RDD
val dataDStream: ReceiverInputDStream [String] = ssc.socketTextStream ("hadoop01", 9999)
// 3. Datos de operación
val wordDStream: DStream [String] = dataDStream.flatMap ( .split (""))
val wordAndOneDStream: DStream [(String, Int)] = wordDStream.map ((
, 1))
// val wordAndCount: DStream [(String, Int)] = wordAndOneDStream.reduceByKey ( + )
//Use updateStateByKey para acumular datos actuales y datos históricos
val wordAndCount: DStream [(String, Int)] = wordAndOneDStream.updateStateByKey (updateFunc)
wordAndCount.print ()
ssc.start () // Abrir
ssc.awaitTermination () // Espera parada elegante
}
// currentValues: lote actual Valor de valor, como: 1,1,1 (tome el hadoop en los datos de prueba como ejemplo)
// historyValue: el valor histórico acumulado antes, la primera vez que ningún valor es 0, la segunda vez es 3
// El objetivo es poner los datos actuales + Los datos históricos se devuelven como un nuevo resultado (los siguientes datos históricos)
def updateFunc (currentValues: Seq [Int], historyValue: Option [Int]): Option [Int] = {
// currentValues ​​current value
// historyValue historical value
val resultado: Int = currentValues.sum + historyValue.getOrElse (0)
Some (result)
}
}

2. Ejecute
1. Primero ejecute nc -lk 9999
2. Luego ejecute el código anterior
3.
Ingrese constantemente diferentes palabras en 1, hadoop spark sqoop hadoop spark hive hadoop
4. Observe la salida de la consola IDEA
sparkStreaming calcula la corriente cada 5 segundos Los datos dentro de 5s, y luego los datos de resultados de cada lote se acumulan y se emiten.

238 artículos originales publicados · elogiados 429 · 250,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_45765882/article/details/105563153
Recomendado
Clasificación