Spark的介绍和安装配置

概述

由Scala编写。Spark是主要基于内存(也有磁盘)计算的,SparkCore是核心功能,SparkSQL可以代替Hive的部分功能,SparkStream可以代替Storm的部分功能,SparkMLlib是机器学习可以代替部分Mahout功能。

Spark是迭代式,交互式,MapReduce的迭代式需要多个jar包,每一次MapReduce输出的文件下一次作为MR的输入,几次打几个jar包,MR不能交互式,必须使用jar包提交任务。Yarn是资源调度的,可调度MapReduce,Spark等,MapReduce和Spark都提交给Yarn,Yarn能共同协调管理(每个框架单独管理容易导致资源争抢)。

Spark计算框架的性质如下:

  1. 客户端提交的程序和Spark程序所需数据存储在HDFS上,Spark从HDFS读取数据,一般是读取到内存中,可能存在Spark中的几个节点,节点对数据处理后可能会进入其他节点的内存中,这样下去。
  2. MapReduce有Map和Reduce节点,Spark计算模型可分n个阶段,因为它是内存迭代式的,计算完一个阶段可以继续计算下个阶段,所以Spark的计算模型功能更强大。
  3. Spark的计算结果可以写入到HDFS,Hive,HBase,DB和客户端。
  4. Spark原生支持Scala,性能也更好。Scala编译后也是JVM支持的class文件,所以本质和Java是一样的,不过Scala的编程风格更优雅(犀利,雷厉风行)。

安装和配置

  1. 下载安装包,例如Spark-1.3.0-bin-hadoop2.4.tgz。解压缩。例如到/usr/local/spark

  2. 设置环境变量,SPARK_HOME和CLASS_PATH。并修改PATH

  3. 进入Spark的conf目录下,编辑spark-env.sh,例如:

    export JAVA_HOME=/usr/java/default
    export SCALA_HOME=/usr/local/scala
    export SPARK_MASTER_IP=<MasterIP> # Spark集群中Master节点IP
    export SPARK_WORKER_MEMORY=1G # Worker节点能够最大分配给Executor的内存
    export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop # Hadoop集群配置文件目录
    
  4. 修改conf目录下的slaves文件,没有的从slaves.template复制一份(上同下同)。将Worker节点的机器名加入即可。Spark中Master节点启动的是Master进程,Slaves节点启动的是Worker进程。

  5. 使用scp将master机器上的Spark目录拷贝到其他Worker节点上即可。如果必要将~/.bashrc环境变量配置文件也拷贝到Worker节点。

  6. 在Spark的sbin目录下执行./start-all.sh,启动spark(在spark-env.sh中配置了Spark Host和Spark Port作为Master,也启动了slaves中的Worker,Master和Worker是JVM进程名)。通过http://master:8080检查集群是否成功。然后可以执行spark-shell命令打开spark命令行看是否成功。

组件介绍

Spark的核心功能有:离线处理或延迟性的交互式数据处理、SQL查询和实时计算等。Spark的计算组件有:

  1. SparkCore,核心组件,包括RDD。
  2. SparkSQL,SQL接口
  3. SparkStreaming,流式计算和实时计算库。
  4. SparkMLlib,机器学习库。弊端是Spark并不能很好地支持机器学习中的迭代运算
  5. SparkGraphX:用于作图。

SparkCore开发首先是定义初始的RDD,其次是对RDD的计算,Spark中称为算子(如map,flatmap,reduce等),计算可能分很多阶段,每个阶段可能会把数据转到其他节点,最后把结果输出到指定位置。其他计算框架都基于RDD。

RDD算子

RDD(Resilient Distributed Dataset,弹性分布式数据集)是Spark提供的核心抽象,属于SparkCore范畴。一个RDD在逻辑上抽象地代表了一个HDFS文件,但RDD是被分区的,每个分区分布在不同的节点上(一般在内存中),从而并行执行,每个分区输出一个文件(似乎以part开头命名)。

RDD算子包括:

  • 转换算子:也叫计算,有flatmap、map等;
  • 缓存算子:这个有的不叫算子,叫持久化,使用cache方法;
  • 行动算子:有collect等。RDD是懒执行的,没有行动算子,前面的所有算子不会执行(但是会加载进来,加载也会执行其中的代码,例如打印代码)。
  • 输出算子:如saveAsFile等。

Spark中对于一个RDD执行多次算子的默认原理是:每次你对一个RDD执行一个算子操作时,都会重新从源头处计算一遍,计算出那个RDD来,然后再对这个RDD执行你的算子操作。例如:A->B->C->D,然后如果需要C->E就需要A->B->C->E这一套计算,这种方式的性能是很差的。如果C重复使用可以做持久化,也就是做缓存算子。

RDD通常通过HDFS文件或Hive表创建,也可以通过应用程序的集合(例如Scala代码)来创建。

RDD的性质如下:

  • 不可变性:每经过一次算子生成一个新的RDD,不是对之前的做改变,RDD理解成逻辑的概念;

  • 可分区性:类似MapReduce中多个Map任务并行度,有默认分区也可自定义(根据集群性能来确定分区);

  • 弹性:包括:

    1. 存储弹性:内存与磁盘的自动切换,RDD默认存放在内存中,但内存容量不足时,Spark会自动将RDD数据写入磁盘,用户不用去管这些,也就是对用户透明。这就是RDD的弹性;
    2. 容错的弹性:数据丢失可自动恢复,RDD的一套算子是一个血统,也就是血统关系,知道每个算子的位置。假如一个节点的RDD Partition失败或宕掉,RDD会通过数据来源重新计算该Partition,这对使用者是透明的);
    3. 计算的弹性:计算出错重试机制,MapReduce出错也重试(默认4次);
    4. 分片弹性:根据需求重新分片,分片就是分区。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值