大数据之流式数据分析实现Socket数据分析

大数据

大数据之流式数据分析实现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数据分析的详细分析方法,结合课本内容和以上步骤相信你也可以,加油!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值