实现思路
1.第一步获取StreamingContext对象,因为要使用检查点恢复数据,所以不能使用new StreamingContext的方法获取对象,要使用StreamingContext.getOrCreate建立对象
2.创建StreamingContext对象,使用了贷出模式 ——贷出函数的方式来创建
3.从Kafka的生产者端读取数据进行分析
4.读取数据的方式采用Direct方式读取数据
5.处理读取到的数据,获取需要的值
6.调用updateStateByKey实时累加统计函数,进行累加统计
7.将结果打印到控制台,并将数据存放到Redis中
具体代码实现
import com.huadian.bigdata.jedis.JedisPoolUtil
import kafka.serializer.StringDecoder
import org.apache.spark.SparkConf
import org.apache.spark.streaming.dstream.DStream
import org.apache.spark.streaming.kafka.KafkaUtils
import org.apache.spark.streaming.{
Seconds, StreamingContext}
object G_RedisOrderTotalStreaming {
//检查点目录
val CHECK_POINT_PATH = "file:///E:\\JavaWork\\20190811\\test5"
//Redis使用Hash存放数据
val REDIS_KEY_ORDER_TOTAL_PRICE = "orders:total:price"
def main(args: Array[String]): Unit = {
/**
* 先去查看检查点,
* createFunc:第一次运行SparkStreaming应用的时候才会执行,才会创建StreamingContext
*/
val ssc: StreamingContext = StreamingContext.getOrCreate(
CHECK_POINT_PATH,
createFunc
)
//设置日志级别
ssc.sparkContext.setLogLevel("WARN")
ssc.start()
ssc.awaitTermination()
//stop(stopSparkContext: Boolean, stopGracefully: Boolean)
ssc