spark初步理解和认识

了解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** 详细参数说明

参数名 参数说明
–master master 的地址,提交任务到哪里执行,例如 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-memory Driver内存,默认 1G
–driver-java-options 传给 driver 的额外的 Java 选项
–driver-library-path 传给 driver 的额外的库路径
–driver-class-path 传给 driver 的额外的类路径
–driver-cores Driver 的核数,默认是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()
  }
}

你可能感兴趣的:(Spark)