23389c7b5dc3bba96b9c372f5be06dcf
Spark 的那些细枝末节-RDD

前言

介绍 Spark 的可能没有注意到的小知识点,旨在告知大家有这么一个小知识点,不展开做详细介绍,粗体为易忽略但是重要的部分

知识点列表

第一点:Spark的两种抽象

  • the main abstraction Spark provides is a resilient distributed dataset (RDD) 第一个:弹性分布式数据集(RDD)
  • A second abstraction in Spark is shared variables that can be used in parallel operations 第二个:spark的共享变量 ### 第二点:SparkContext

The first thing a Spark program must do is to create a SparkContext object, which tells Spark how to access a cluster. To create a SparkContext you first need to build a SparkConf object that contains information about your application.
Only one SparkContext may be active per JVM. You must stop() the active SparkContext before creating a new one.

  • SparkConf:里面包含了应用的配置信息等
  • SparkContext:spark访问集群的入口,使用SparkConf作为输入参数,所以创建SparkContext之前先要创建SparkConf
  • 一个JVM里面只能有一个活跃的SparkContext
val conf = new SparkConf().setAppName(appName).setMaster(master)
new SparkContext(conf)

第三点: 两种创建RDD的方式

There are two ways to create RDDs: parallelizing an existing collection in your driver program, or referencing a dataset in an external storage system, such as a shared filesystem, HDFS, HBase, or any data source offering a Hadoop InputFormat.

  • parallelizing an existing collection in your driver program(从集合创建,调用sc.parallelize(data))
  • External Datasets:能够从hdfs,hbase,本地文件等创建 ### 第四点:从existing collection创建RDD

One important parameter for parallel collections is the number of partitions to cut the dataset into. Spark will run one task for each partition of the cluster. Typically you want 2-4 partitions for each CPU in your cluster

  • 这种创建rdd的方式允许指定分区数 e.g. sc.parallelize(data, 10),指定data为10个分区
  • 每个分区会对应一个task去处理
  • 通常情况下,每个CPU可以配置2-4个分区 ### 第五点:从External Datasets创建RDD的方法

Spark can create distributed datasets from any storage source supported by Hadoop, including your local file system, HDFS, Cassandra, HBase, Amazon S3, etc. Spark supports text files, SequenceFiles, and any other Hadoop InputFormat.

使用sc.textFile("data.txt")从text files创建RDD

  • 如果从本地文件创建RDD,要保证在集群的各个woker节点的相同路径上都有此文件
  • 支持从压缩文件,使用通配符,目录等创建RDD
textFile("/my/directory"),
textFile("/my/directory/*.txt")
textFile("/my/directory/*.gz")
``
- 支持指定分区数参数,eg:sc.textFile("data.txt",2)指定两个分区,**默认是文件的一个block一个分区**
### 第六点:对于从text files创建RDD,Spark支持的其他方法
- SparkContext.wholeTextFiles:如果目录下有好多小文件,可以使用这个方法生成RDD,RDD的每条记录是个(文件名,文件内容)的kv对,而textFile这个方法的创建的RDD的每条记录是文件的每一行返回一条记录
- SparkContext.sequenceFile[K, V]:对于SequenceFiles使用这个方法创建RDD,K V这两个值是SequenceFiles文件中key和value的数据类型,这个数据类型必须实现了Hadoop的 Writable 接口
- SparkContext.hadoopRDD SparkContext.newAPIHadoopRDD:对于Hadoop InputFormats使用这两个方法创建RDD,第一个是老的Api,第二个是新的Api
### 第七点:Spark的两种共享变量
- broadcast variables:广播变量,这个变量被缓存在各个node的内存里面
- accumulators:累计变量,这个变量是全局变量,可以累加,求和等
### 第八点:spark-shell的可使用参数
- --master:指定master,比如standalone,mesos等
- --jars :指定依赖的jar包,多个jar包用逗号分隔
- --packages:可以直接指定maven的依赖,比如--packages "org.example:example:0.1",不常用
- --repositories :指定仓库,不常用
© 著作权归作者所有
这个作品真棒,我要支持一下!
机器学习、深度学习、大数据、数据科学爱好者集结地,分享 在各自领域里的工程实践经验和应用 让我们每天进步一点点...
0条评论
top Created with Sketch.