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。