spark 小表join spark 外部表_数据


首先在本地客户端(client)编写spark程序,然后将程序打成jar包,在某台能够连接到spark集群的机器上提交spark程序,spark程序会被提交到spark集群上运行。spark会从外部读取数据,如HDFS、Hive表形成初始RDD,对RDD定义不同的转换操作满足计算需求,最后是处理好的数据,可以可以保存到文件(本地或者HDFS)、hive表,MySql、Hbase等DB,或者直接把结果打印返回到客户端。

Spark和mapreduce最大的不同之处在于:迭代式计算模型。

Map Reduce分为两个阶段,map和reduce,两个阶段结束就结束了,一个job里能做的处理很有限,要像完成复杂的计算,需要将多个job串联起来,上个job的输出作为下个job的输入。

spark计算模型可以分为n个阶段,因为它是在内存中迭代计算的,可以处理完一个阶段之后,再继承处理很多个阶段。

RDD是什么

RDD是spark-core的核心抽象,弹性分布式数据集,本质上是一个数据集,具有分布式和弹性的特点。

分布式:RDD在抽象上来说是一种元素集合,在逻辑上就代表了一个抽象的数据集(比如一个HDFS文件),但是它实际上是被分区的,分为多个区(parttition)的,多个分区散落在Spark集群的不同节点上。比方说,RDD有100万数据,分为10个parttiton,散落在spark集群的多个节点上,每个节点保存了RDD的部分数据。RDD通常通过HDFS上的文件,如HDFS或HIve表来进行创建,有时也可以通过应用程序中的集合来创建。

弹性:弹性可以从两个部分理解,一方面是说RDD的数据默认是存放在内存中的,但是在内存资源不足的情况下,spark会自动将数据写入到磁盘。另一方面,RDD的分区数量可以改变,通过repartition可以改变RDD的分区数量。

RDD最重要的特性就是提供了容错性。当某个节点上的RDD partition因为节点故障导致数据丢失,spark程序不会因此挂掉,RDD会自动通过自己的数据来源重新计算该partition。