5.1 SparkStreaming接受socket数据,实现单词计数WordCount
5.1.1 架构图
5.1.2 实现流程
(1)安装并启动生产者
首先在linux服务器上用YUM安装nc工具,nc命令是netcat命令的简称,它是用来设置路由器。我们可以利用它向某个端口发送数据。
yum install -y nc
(2)通过netcat工具向指定的端口发送数据
nc -lk 9999
(3)编写Spark Streaming程序
[AppleScript] 纯文本查看 复制代码
?
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
package cn.test.spark[ / align] import org.apache.spark.streaming.dstream. {
DStream , ReceiverInputDStream } import org.apache.spark.streaming. {
Seconds , StreamingContext } import org.apache.spark. {
SparkConf , SparkContext } / * * * sparkStreming流式处理接受socket数据,实现单词统计 * / object SparkStreamingTCP {
def main ( args : Array[String] ) : Unit = {
/ / 配置sparkConf参数 val sparkConf : SparkConf = new SparkConf ( ) .setAppName ( "SparkStreamingTCP" ) .setMaster ( "local[2]" ) / / 构建sparkContext对象 val sc : SparkContext = new SparkContext ( sparkConf ) / / 设置日志输出级别 sc.setLogLevel ( "WARN" ) / / 构建StreamingContext对象,每个批处理的时间间隔 val scc : StreamingContext = new StreamingContext ( sc , Seconds ( 5 ) ) / / 注册一个监听的IP地址和端口 用来收集数据 val lines : ReceiverInputDStream[String] = scc.socketTextStream ( "192.168.200.160" , 9999 ) / / 切分每一行记录 val words : DStream[String] = lines.flatMap ( _.split ( " " ) ) / / 每个单词记为 1 val wordAndOne : DStream[ ( String , Int ) ] = words.map ( ( _ , 1 ) ) / / 分组聚合 val result : DStream[ ( String , Int ) ] = wordAndOne.reduceByKey ( _ + _ ) / / 打印数据 result . print ( ) scc.start ( ) scc.awaitTermination ( ) } } |
由于使用的是本地模式"local[2]"所以可以直接在本地运行该程序
注意:要指定并行度,如在本地运行设置setMaster("local[2]"),相当于启动两个线程,一个给receiver,一个给computer。如果是在集群中运行,必须要求集群中可用core数大于1。
5.1.3 执行查看效果
(1)先执行nc -lk 9999