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();
}