Spark Streaming单词统计操作

Spark Streaming实时计算框架:

• Spark Streaming是一个构建在Spark之上,是Spark四大组件之一
• 是Spark系统中用于处理流式数据的分布式流式处理框架
• 具有可伸缩、高吞吐量、容错能力强等特点
• 能够和Spark SQL、MLlib、GraphX无缝集成
• 处理的数据源可以来自Kafka,Flume,Twitter,ZeroMQ,Kinesis or TCP sockets
• 不仅可以通过调用map,reduce,join和window等API函数来处理数据,也可以使用机器学习、图算法来处理数据
• 最终结果可以保存在文件系统、数据库或者实时Dashboard展示。

一、实验步骤

*任务一:从一台服务器的8888端口上接受一行或者多行文本内容,并对接收到的内容以空格分割计算每个单词出现的次数。

1.启动spark-shell命令(./spark-shell)

./spark-shell
 

1.2导入Spark Streaming数据

 import org.apache.spark.streaming.StreamingContext
 import org.apache.spark.streaming.StreamingContext._
 import org.apache.spark.streaming.dstream.DStream
 import org.apache.spark.streaming.Duration
 import org.apache.spark.streaming.Seconds

  

 1.3设置日志级别。

sc.setLogLevel("WARN")

 

 1.4从SparkConf创建StreamingContext并指定1s的批处理大小。

val ssc = new StreamingContext(sc, Seconds(1))

 1.5启动连接到slave1 8888端口上,使用收到的数据创建DStream。

val lines = ssc.socketTextStream("slave1", 8888)
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()

 1.6启动流计算环境StreamingContext。

 ssc.start()

 1.7在slave1 8888端口上输入“I am learning Spark Streaming now”语句。

nc -l 8888
I am learning Spark Streaming now

 1.8返回master启动流计算中查看结果。

*任务二:使用ssc.textFileStream()方法监听HDFS上的目录/user/root/sparkStreaming/temp,一旦有新文件加入到/user/root/sparkStreaming/temp目录下,Spark Streaming计算出该时间内的单词统计数。

2.1记事本中保持数据,在xftp中上传本地数据到虚拟机中。

I am learning Spark Streaming now
I like Spark
Spark is insteresting

I am learning Spark Streaming now
I like Spark
Spark is insteresting
I am learning Spark Streaming now
I like Spark
Spark is insteresting

 

 2.2在HDFS中创建目录/user/root/sparkStreaming/temp(里面没有添加数据)。

hdfs dfs -mkdir -p /user/root/sparkStreaming/temp

 2.3Spark Streaming监控HDFS目录

import org.apache.spark.streaming.{Seconds,StreamingContext}
import org.apache.spark.streaming.StreamingContext._
val ssc = new StreamingContext(sc, Seconds(10))
val lines = ssc.textFileStream("hdfs://master:9000/user/root/sparkStreaming/temp")
val words = lines.flatMap(_.split(" "))
val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _)
wordCounts.print()
ssc.start()
ssc.awaitTermination()

2.4运行中重新打开一个master主节点上传新文件到HDFS中。

hdfs dfs -put a.txt /user/root/sparkStreaming/temp
hdfs dfs -put b.txt /user/root/sparkStreaming/temp

2.5返回master启动流计算中查看结果。


总结

解决方法:①在slave1 8888端口上(nc -l 8888)输入数据,运行就不会报错,要是没有安装nc要使用命令 yum install -y nc安装在进行操作。

②端口号没有写对Spark默认的HDFS端口与Hadoop中core.site.xml配置一样的端口号都是9000,所以启动连接到master节点HDFS中端口号为9000。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,需要安装Java和Spark环境。然后,可以使用以下步骤安装netcat和运行Spark Streaming进行单词统计: 1. 安装netcat 在Centos7中,可以使用以下命令安装netcat: ``` sudo yum install nc -y ``` 2. 创建数据源 使用以下命令创建数据源,它将模拟一个实时数据源,发送单词流到本地主机的端口9999: ``` nc -lk 9999 ``` 3. 创建Spark Streaming应用程序 使用以下代码创建一个Spark Streaming应用程序,它将接收来自本地主机端口9999的单词流,并对单词进行计数: ```java import org.apache.spark.SparkConf; import org.apache.spark.streaming.Durations; import org.apache.spark.streaming.api.java.JavaDStream; import org.apache.spark.streaming.api.java.JavaReceiverInputDStream; import org.apache.spark.streaming.api.java.JavaStreamingContext; public class WordCountApp { public static void main(String[] args) throws InterruptedException { // 创建SparkConf对象 SparkConf sparkConf = new SparkConf() .setAppName("WordCountApp") .setMaster("local[*]"); // 创建JavaStreamingContext对象 JavaStreamingContext streamingContext = new JavaStreamingContext(sparkConf, Durations.seconds(1)); // 创建JavaReceiverInputDStream对象 JavaReceiverInputDStream<String> lines = streamingContext.socketTextStream("localhost", 9999); // 对单词进行计数 JavaDStream<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairDStream<String, Integer> wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1)).reduceByKey((x, y) -> x + y); // 打印结果 wordCounts.print(); // 启动Streaming应用 streamingContext.start(); // 等待Streaming应用终止 streamingContext.awaitTermination(); } } ``` 4. 运行应用程序 使用以下命令编译和运行应用程序: ``` $ spark-submit --class WordCountApp --master local[*] wordcount.jar ``` 其中,`wordcount.jar`是你的应用程序的Jar包。然后,你可以在终端上启动netcat并发送单词流,Spark Streaming应用程序将在控制台上显示单词计数结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值