spark-shell、spark架构设计、使用idea初始化spark运行环境、Spark RDD

本文介绍了如何在Spark Shell中操作RDD,包括创建、合并、比较和基本的WordCount示例。深入探讨了Spark架构,重点讲解了SparkContext、SparkSession的使用以及RDD与Spark 2.0后的新抽象Dataset和DataFrame的区别。

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

spark-shell

spark自带的交互式工具

val rdd1 = sc.parallelize(1 to 10)
rdd1.collect
//res0: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
rdd1.partitions.size
//res1: Int = 1
val rdd2 = sc.makeRDD(5 to 15)
rdd2.collect
//res4: Array[Int] = Array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)
rdd1 ++ rdd2
res6.collect
//res8: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 11, 1    2, 13, 14, 15)
rdd1.canEqual(rdd2)
//res9: Boolean = false
rdd1.cartesian(rdd2)
//res10: org.apache.spark.rdd.RDD[(Int, Int)] = CartesianRDD[3] at cartesian at <c    onsole>:28

rddWordCount

vavl rddWorCount = sc.parallelize(Array("hello world","hello java","hello scala","scala very good"))
rddWordCount.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey(_+_).collect
rddWordCount.flatMap(x=>x.split(" ")).map(x=>(x,1)).groupByKey().map(x=>x._1,x._2.size).collect
rddWordCount.getNumPartitions

spark架构设计

1、运行架构
在这里插入图片描述
在驱动程序中,通过SparkContext主导应用的执行
SparkContext可以连接不同类型的Cluster Manager(Standalone、YARN、Mesos),连接后,获得集群节点上的Executor
一个Worker节点默认一个Executor,可通过SPARK_WORKER_INSTANCES调整
每个应用获取自己的Executor
每个Task处理一个RDD分区

2、spark架构核心组件
在这里插入图片描述

使用idea初始化spark运行环境

1、创建maven项目,添加依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>2.11.12</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>2.1.1</version>
    </dependency>
  </dependencies>

2、SparkContext
连接Driver与Spark Cluster(Workers)
Spark的主入口
每个JVM仅能有一个活跃的SparkContext
SparkContext.getOrCreate

val conf = new SparkConf().setMaster("local[*]").setAppName("SparkDemo")
val sc = SparkContext.getOrCreate(conf)

3、SparkSession
Spark 2.0+应用程序的主入口:包含了SparkContext、SQLContext、HiveContext以及StreamingContext
SparkSession.getOrCreate

val spark:SparkSession = SparkSession.builder().master("local[*]").appName("sparkSessionDemo").getOrCreate()
println(spark)

4、使用spark实现wordcount

//内存中创建
val wordCount = sc.parallelize(Array("hello world","hello java","hello scala","scala very good"))
wordCount.flatMap(x=>x.split(" ")).map(x=>(x,1)).reduceByKey(_+_).collect.foreach(println)
//sc读取hdfs上的文件
val wordCountHdfs = sc.textFile("hdfs://192.168.232.211:9000/kb11file/hello.txt")
wordCountHdfs.collect.foreach(println)
//sc读取本地文件
val wordCount1 = sc.textFile("D:\\kb11\\sparkstu\\hello")
wordCount.collect.foreach(println)

5、使用spark-shell来读取文件

//读取本地文件
sc.textFile("file:///root/hello.txt").collect.foreach(println)
//读取hdfs文件
sc.textFile("hdfs://hadoop100:9000/kb11file/hello.txt").collect.foreach(println)

Spark RDD

RDD
Spark核心,主要数据抽象
Dataset
从Spark1.6开始引入的新的抽象,特定领域对象中的强类型集合,它可以使用函数或者相关操作并行地进行转换等操作
DataFrame
DataFrame是特殊的Dataset

Spark RDD概念-1
简单的解释
RDD是将数据项拆分为多个分区的集合,存储在集群的工作节点上的内存和磁盘中,并执行正确的操作
复杂的解释
RDD是用于数据转换的接口
RDD指向了存储在HDFS、Cassandra、HBase等、或缓存(内存、内存+磁盘、仅磁盘等),或在故障或缓存收回时重新计算其他RDD分区中的数据

Spark RDD概念-2
RDD是弹性分布式数据集(Resilient Distributed Datasets)
分布式数据集
RDD是只读的、分区记录的集合,每个分区分布在集群的不同节点上
RDD并不存储真正的数据,只是对数据和操作的描述
弹性
RDD默认存放在内存中,当内存不足,Spark自动将RDD写入磁盘
容错性
根据数据血统,可以自动从节点失败中恢复分区

RDD与DAG
两者是Spark提供的核心抽象
DAG(有向无环图)反映了RDD之间的依赖关系

RDD的特性
一系列的分区(分片)信息,每个任务处理一个分区
每个分区上都有compute函数,计算该分区中的数据
RDD之间有一系列的依赖
分区器决定数据(key-value)分配至哪个分区
优先位置列表,将计算任务分派到其所在处理数据块的存储位置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值