一,关于Spark与SparkStreaming
Spark由美国加利福尼亚大学伯克利分校的AMP实验室于2009年开发,是基于内存计算的大数据并行计算架构,可用于构建大型的、低延迟的数据分析应用程序。2013年Spark成为Apache孵化器项目后,开始获得迅猛的发展,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目(Hadoop,Spark,Flink)之一。
BDAS架构如图所示:
Spark Core:实现了 Spark 的基本功能,包含 RDD、任务调度、内存管理、错误恢复、与存储系统交互等模块。
Spark SQL:Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL 操作数据。
Spark Streaming:Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API。
Spark MLlib:提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。
GraphX(图计算):Spark 中用于图计算的 API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。
集群管理器:Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。
Structured Streaming:处理结构化流,统一了离线和实时的 API。
二,Spark VS Hadoop
尽管 Spark 相对于 Hadoop 而言具有较大优势,但 Spark 并不能完全替代 Hadoop,Spark 主要用于替代Hadoop中的 MapReduce 计算模型。存储依然可以使用 HDFS,但是中间结果可以存放在内存中;调度可以使用 Spark 内置的,也可以使用更成熟的调度系统 YARN 等。
三,使用sparkStreaming完成文件流(/opt/app/wordcount7/)wordcount计算
①启动hadoop集群
cd hadoop-2.7.3
cd sbin
./start-all.sh
②启动spark集群
cd spark-2.4.7-bin-hadoop-2.7
cd sbin
./start-all.sh
使用jps命令查看,出现Master和Worker两个节点,启动成功。
③spark-shell命令
cd /opt/app/spark
bin/spark-shell
import org.apache.spark._
import org.apache.spark.streaming._
val ssc=new StreamingContext(sc,Seconds(20));
val lines=ssc.textFileStream("file:///opt/app/wordcount7");
(1)将计算文件每行转化为单词
val words=lines.flatMap(x=>x.split(" "));
(2)将文件内容转化为(单词,1)的形式
val wordPair=words.map(x=>(x,1));
(3)得出workcount计算结果
val wordcount=wordPair.reduceByKey((x,y)=>x+y);
wordcount.print;
ssc.start;
cd /opt/app
touch 1.txt
vi 1.txt
内容·如下:
hello world
hello world hello
cp 1.txt wordcount7
SparkStreaming计算结果如下
四,计算结果保存到hdfs根目录下
①在spark-shell中运行
wordcount.saveAsTextFiles("hdfs://hadoop:9000/");
②使用hdfs命令查看根目录下的保存结果
cd hadoop-2.7.3
bin/hdfs dfs -ls /