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)分配至哪个分区
优先位置列表,将计算任务分派到其所在处理数据块的存储位置

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 在 Linux 系统中,查找域名或主机名对应的 IP 地址是网络管理中的一项基础且关键任务,对于排查网络故障、调试网络问题以及监控网络服务是否正常运行等场景都非常重要。本文将介绍五种在 Linux 终端查询域名 IP 地址的方法。 首先,dig 命令(全称 Domain Information Groper)是一个功能强大的 DNS 查询工具,能够向 DNS 服务器发送查询请求并获取详细的响应信息。如果需要查询单个域名的 IP 地址,可以使用命令 dig 2daygeek.com +short 。此外,还可以通过编写 bash 脚本,将包含域名的文本文件中的域名逐个读取,然后利用 dig 命令进行查询,从而实现批量查询域名 IP 地址的功能。 其次,host 命令是一个简单易用的 DNS 查询工具,主要用于将域名解析为 IP 地址。要获取某个域名的 IP 地址,直接使用 host 2daygeek.com 即可。如果只想显示 IP 地址部分,可以通过管道结合 grep 和 sed 命令来实现,例如:host 2daygeek.com | grep "has address" | sed s/has address/-/g 。 再者,nslookup 命令也是一种常用的 DNS 查询工具,它支持交互式查询 DNS 信息。通过 nslookup 2daygeek.com 可以查询域名的 IP 地址。若要以非交互式的方式只显示 IP 地址,可以使用命令 nslookup 2daygeek.com | awk /^Address:/ {print $2} 。 另外,fping 命令与传统的 ping 命令不同,它不会直接进行 DNS 查询,而是通过发送 ICMP Echo Request(pi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值