spark初步理解和认识

本文介绍了Spark的基本概念,强调其作为大数据分析引擎的高速、易用、通用和良好的兼容性特点。Spark生态系统包括多个子项目,如SparkSQL、SparkStreaming等。相较于Hadoop MapReduce,Spark内存计算速度提升显著,并支持Java、Python和Scala的API。此外,Spark提供统一的批处理、交互式查询、实时流处理和图计算解决方案,能无缝融合其他开源产品。文章还提及了如何通过spark-submit提交任务到Spark集群及使用Spark Shell进行编程。

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

了解spark前应学习hadoop体系和scala语言

1. 概念

Spark是一种快速、通用、可扩展的大数据分析引擎

spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、SparkStreaming、GraphX、MLlib等子项目

**2.**Spark特点

2.1****快

与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上,基于硬盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流。

2.2****易用

Spark支持Java、Python和Scala的API,还支持超过80种高级算法

2.3****通用

Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(Spark SQL)、实时流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。这些不同类型的处理都可以在同一个应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台去处理遇到的问题,减少开发和维护的人力成本和部署平台的物力成本。

2.4****兼容性

Spark可以非常方便地与其他的开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器

**3.**执行Spark程序

3.1****spark-submit 可以提交任务到 spark 集群执行

该算法是利用蒙特·卡罗算法求PI

/usr/local/spark-1.6.1-bin-hadoop2.6/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
/usr/local/spark-1.6.1-bin-hadoop2.6/lib/spark-examples-1.6.1-hadoop2.6.0.jar \
100

spark-submit**/shell** 详细参数说明

参数名参数说明
–mastermaster 的地址,提交任务到哪里执行,例如 spark://host:port, yarn, local
–deploy-mode在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
–class应用程序的主类,仅针对 java 或 scala 应用
–name应用程序的名称
–jars用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下
–packages包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标
–exclude-packages为了避免冲突 而指定不包含的 package
–repositories远程 repository
–conf PROP=VALUE指定 spark 配置属性的值, 例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"
–properties-file加载的配置文件,默认为 conf/spark-defaults.conf
–driver-memoryDriver内存,默认 1G
–driver-java-options传给 driver 的额外的 Java 选项
–driver-library-path传给 driver 的额外的库路径
–driver-class-path传给 driver 的额外的类路径
–driver-coresDriver 的核数,默认是1。在 yarn 或者 standalone 下使用
–executor-memory每个 executor 的内存,默认是1G
–total-executor-cores所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用
–num-executors启动的 executor 数量。默认为2。在 yarn 下使用
–executor-core每个 executor 的核数。在yarn或者standalone下使用

3.2****启动Spark Shell

/usr/local/spark-1.6.1-bin-hadoop2.6/bin/spark-shell \
--master spark://node01:7077 \
--executor-memory 2g \
--total-executor-cores 2

与spark submit同

4. spark shell编写WordCount程序

1.首先启动hdfs
2.向hdfs上传一个文件到hdfs://node01:9000/words.txt
3.在spark shell中用scala语言编写spark程序
sc.textFile("hdfs://node01:9000/words.txt").flatMap(_.split(" "))
.map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://node01:9000/out")

4.使用hdfs命令查看结果
hdfs dfs -ls hdfs://node01:9000/out/p*

5.spark程序 WC

//scala编写
object SparkWC {
  def main(args: Array[String]): Unit = {
    // 首先创建SparkConf 配置文件对象
    // SetAPPName 表示设置应用程序名字
    // local 用一个线程来模拟集群运行
    // local[2] 用两个线程来模拟集群运行
// local[*] 用所有的空闲线程模拟集群运行

// 将任务打包到集群进行运行。  将setMaster去掉,表示不是本地运行
    val conf = new SparkConf().setAppName("SparkWC")
    // 创建SparkContext上下文,也就是集群的执行入口
    val sc = new SparkContext(conf)
    // 读取本地文件, 如果我们不传入分区数的话,底层将默认分配两个分区
    val lines: RDD[String] = sc.textFile(args(0))
    // 进行单词的统计,首先调用flatMap算子,进行切分压平
    val words: RDD[String] = lines.flatMap(_.split(" "))
    // 调用map算子 ,进行单词的统计
    val wc: RDD[(String, Int)] = words.map((_,1))
    // 进行聚合操作
    val reduces: RDD[(String, Int)] = wc.reduceByKey(_+_)
    // 进行数据排序(按照value值排序)
    val sortwc: RDD[(String, Int)] = reduces.sortBy(_._2,false)
    // 将数据结果打印
    //println(sortwc.collect().toBuffer)
    // 将数据结果保存到hdfs上面
    sortwc.saveAsTextFile(args(1))
    // 关闭程序
    sc.stop()
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值