2017 面试总结&&58 面试

本文介绍如何使用 Spark Streaming 进行实时数据处理,包括通过网络端口读取数据、统计单词频率,以及整合 Kafka 完成网站点击流的实时统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.ailibabafail.

2.cttc fail

3.58  fail

4.YYXINT fail.

4.SR  OK offer.

这是没有比较的offer. 

 

----------------------------------------------------------`

58 面试到时没有什么

 

被Spark的demo 给搞晕了。

附录Spark 在线和实时的统计。

架构图:

 

 

1.yum 安装一个 nc 

 

启动端口9999

 

 

2.编写 SparkStreaming 程序 

 

 

object  NetworkworkCount{


    def main( args: Array[String]){


        //设置日志级别
        LoggerLevel.setStreamingLogLevels()

        //创建sparkConf 并配置 本地模式

        var conf =new SparkConf().setMaster("local[2]").setAppNamesetAppName("NetworkWordCount");


        //设置DStream 批次的时间间隔为2s
        var ssc=new StreamingContext(conf,Seconds(2));
        //通过网络读取数据库

        var lines=ssc.socketTextStream("192.168.10.101",9999);
        //讲读到的数据用空格切成单词

        var words=lines.flatMap( _.split("") );

        //将单词进行分组求相同的单词出现的次数
        var wordCounts=pairs.reduceByKey(_+_)

        //打印结果的输出到控制台
         wordCounts.print()
         ssc.start();

        ssc.awaitTermination();

        


        }

  }

 

 

 

//启动Spark Steaming 程序:由于使用的是本地i的模式

 

注意: 要制定并行度,如在本地运行设置setMaster(""),相当于启动了2个线程

一个给recevier,一个给computer.如果是在集群中,必须要求可用的core数目大于1.

 

 4.启动Sparking Streaming 程序

在linux 端命令行输入单词

nc -lk 9999

 

5.在IEDA控制台中查看结果

 

 

每次在Linux短输入的单词次数被正确的统计出来,但是结果不能累加。

如果需要累加需要使用updateStateBykey(func) 来更新状态。

 

代码如下:

 

var updateFunc=(iter:Iterator[(String,Seq[Int]),Option[int]])=>{

 

//iter.flatMap{case(x,y,z)  => Some(y.sum+z.getOrElse(0)).map(m=>(x,m))  }

 

 

 

//主函数变化如下

def main (args: Array[String]){

 

LoggerLevel.setStreamingLogLevels()

 

var conf =new SparkConf().setMaster("").setAppName("")

 

var ssc=new StreamingContext(conf,Seconds(5));

 

//做checkpoint("c://aaa")

var lines=ssc.socketTextStream("","")

 

//reduceByKey 结果不累加

//var resut=lines.flatMap(_.split("").map((_,1))).reduceByKey(+)

//updateStateBykey 结果可以累加但是需要传入一个自定义的累加函数:updateFunc

 

var results=lines.flatMap(_.split("").map (_1)) .updateStateBykey(updateFunc,new HashPartitioner(ssc.sparkContext.defaultParallelism)

,true);

result.print()

ssc.start();

ssc.awaitTerminnation();

 

 

 

 

}

 

 

 

demo02: 

 

spark Streaming 整合kafka 完成网站点击流实时统计

 

1.安装并配置zk 

2,安装病配置kafka 

 

6.编写spark Streaming 应用程序

 

obejct UrlCount{

 

var updateFunc=(iterator:Iterator[( String,Seq[int],Optiones[Int]) ] )=){

iterator.flatMap{ case(x,y,z) => Some(y.sum+ z.getOrElse(0)). map(n=>(x,n))}

 

}

 

def main(args:array[String]){

 

//接收命令行的中的参数

var Array(zkQuorum,groupId,topics,numThreads,hdfs)=args

 

//创建sparkConf 并配置AppName

var conf =new SparkConf().setAppname("urlCount");

 

//创建StreamingContext

var ssc=new StreamingContext(conf,Sends(2));

 

//设置检查点

ssc.checkPoint(hdfs);

 

//设置topic 信息

 

var lines=KafkaUtils.createStream(ssc,zkQuorm,groupdID,topicMap,StoreLevevl.Memory_AND_DISK);

 

//切分数据,截取用户点击的url

var urls=lines.map(x=>(x.split("")(6),1))

 

//切分数据,截取用户点击的url

var urls=lines.map(x=>(x.split("")(6),1));

 

//统计url 点击量

var result=urls.updateStateByKey(updateFunc,new HashPartitioner(ssc.sparkContext,defalutParallslims),true);

 

 

result.print()

ssc.start()

ssc.awaitTermnation();

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迅捷的软件产品制作专家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值