大数据
大数据之流式数据分析实现Socket数据分析
文章目录
前言
netcat是一款基于Socket的控制台网络通信工具(简称nc),它同时具备绑定服务端和启动客户端的能力,服务端负责将控制台输入的数据通过Socket传送到连接此服务端的客户端控制台并显示出来
一、Socket事件流操作
netcat网络Socket控制台工具
netcat是一款基于Socket的控制台网络通信工具(简称nc),它同时具备绑定服务端和启动客户端的能力,服务端负责将控制台输入的数据通过Socket传送到连接此服务端的客户端控制台并显示出来。
启动nc服务端,并绑定当前主机的9999端口
nc -lk 9999
控制台发送hellofjr
启动nc客户端,并连接到端口为9999的nc服务端
客户端获取服务端发送来的消息hellofjr
二、基于本地的Spark Streaming流式数据分析示例
通过间隙扫描Scoket端口源数据,并将拉取到的数据放置于SparkStreaming控制台打印出来
通过配置参数及Streaming上下文获取输入离散流对象
对离散流中的每个RDD进行处理
三、基于集群的Spark Streaming流式数据分析示例
通过间隙扫描Scoket端口源数据,并将拉取到的数据放置于hdfs
将最终结果通过saveASTextFile()函数存储到HDFS
四、基于集群模式下的集群文件IO流分析示例
从上述的集群操作可以看到,不同的RDD都会创建相同的文件从而产生文件覆盖,为了收集到所有的数据就不能使用saveAsTextFile方法了,而应该在Task中使用FileSystem的IO流来进行操作。
五、实现Socket数据分析示例(基于本地的Spark Streaming流式数据分析示例)
示例代码
package com.bnyw.bigdata.spark.streaming.local;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.VoidFunction;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaReceiverInputDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
public class SocketToPrint {
@SuppressWarnings("serial")
public static void main(String[] args) throws InterruptedException {
SparkConf conf=new SparkConf();
conf.setMaster("local[2]");
conf.setAppName("WordCountOnLine");
//获取Streaming上下文(基于Spark上下文的子实现) Durations.seconds(5)流数据被分成batch的时间间隔
JavaStreamingContext jsc=new JavaStreamingContext(conf, Durations.seconds(5));
//创建一个输入流对象 参数1:hostname 参数2:port
JavaReceiverInputDStream<String> JobLines=jsc.socketTextStream("hadoop102",9999);
//对 Dstream中的每个RDD应用一个函数
JobLines.foreachRDD(new VoidFunction<JavaRDD<String>>(){
public void call(JavaRDD<String> javaRDD) throws Exception {
//返回rdd中的元素个数
long size=javaRDD.count();
System.out.println("-----foreachRDD-call-collection-size:"+size+"-------");
//对RDD中的每个元素应用一个方法
javaRDD.foreach(new VoidFunction<String>(){
public void call(String line) throws Exception {
System.out.println(line);
}
});
}
});
//启动Streaming
jsc.start();
System.out.println("--------already start---------");
jsc.awaitTermination();
System.out.println("--------already await---------");
jsc.close();
System.out.println("--------already close----------");
}
}
1、在IDEA上直接连接虚拟机(也可以在虚拟机里面的IDEA运行代码)
2、在本地模式下的节点上开启Socket监听服务
3、在IDEA中运行代码
均为输出
在节点的控制台上输入数据nihaofjr
IDEA的控制台将会打印,输出
-----foreachRDD-call-collection-size:1-------
nihaofjr
若是快速输入两行数据
fjr
ssocket
则会输出
-----foreachRDD-call-collection-size:2-------
fjr
ssocket
六、可能出现的问题和解决方法
1、对于IDEA运行代码时报如下错误,可能是依赖写错或者是版本不对
解决:
(1)取消依赖中的这一句
<scope>provided</scope>
(2)将本机的scala版本更改成和虚拟机中一个版本2.11.8
2、对于宿主机的IDEA怎样直接连接虚拟机运行代码
选择SFTP连接方式:
填写虚拟机名字或者ip:
填写相应信息正确连接
连接成功
总结
以上就是今天要讲的内容,本文仅仅简单介绍了大数据之流式数据分析实现Socket数据分析的详细分析方法,结合课本内容和以上步骤相信你也可以,加油!