Spark 安装配置及基本操作示例

来源:互联网 发布:知乎 机器人瓦力 编辑:程序博客网 时间:2024/04/29 07:21

image

简介:

  • Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
  • Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
  • Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

本文概述:

  • Spark可以独立安装,也可以和Hadoop一起安装使用(本文与hadoop安装在一起)
  • 本教程中,我们采用和Hadoop一起安装使用,这样,就可以让Spark使用HDFS存取数据
  • 本文统一使用hadoop用户操作,安装包放在 /opt/source 目录下

1. Hadoop 安装

  • 关于Hadoop的单机模式、伪分布式集群配置请查看 官网示例文档
  • 完全分布式集群配置 请查看我之前的文章介绍或 参考官网

2. Spark 安装

下载地址 http://spark.apache.org/downloads.html

这里写图片描述

  • Spark部署模式主要有四种:
    • Local模式(单机模式)
    • Standalone模式(使用Spark自带的简单集群管理器)
    • YARN模式(使用YARN作为集群管理器)
    • Mesos模式(使用Mesos作为集群管理器)

本文介绍 Local模式(单机模式)的 Spark安装。

[hadoop@master ~]$ sudo tar zxf spark-2.0.2-bin-hadoop2.6.tgz -C /opt/source/[hadoop@master ~]$ cd /opt/source[hadoop@master ~]$ sudo mv spark-2.0.2-bin-hadoop2.6 spark[hadoop@master ~]$ sudo chown hadoop:hadoop spark -R[hadoop@master ~]$ cd spark/conf[hadoop@master ~]$ cp spark-env.sh.template spark-env.sh修改Spark的配置文件spark-env.sh[hadoop@master ~]$ vim spark-env.shexport SPARK_DIST_CLASSPATH=$(/opt/source/hadoop/bin/hadoop classpath)
  • 配置以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据.
  • 如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据.
  • 配置完成后就可以直接使用,不需要像Hadoop运行启动命令.
  • 通过运行Spark自带的示例,验证Spark是否安装成功.
    这里写图片描述

在spark-shell 统计单词

打开 spark-shell[hadoop@master ~]$ cd /opt/source/spark/[hadoop@master ~]$ ./bin/spark-shell ........16/12/26 17:34:28 WARN spark.SparkContext: Use an existing SparkContext, some configuration may not take effect.Spark context Web UI available at http://192.168.11.130:4040Spark context available as 'sc' (master = local[*], app id = local-1482744865947).Spark session available as 'spark'.Welcome to      ____              __     / __/__  ___ _____/ /__    _\ \/ _ \/ _ `/ __/  '_/   /___/ .__/\_,_/_/ /_/\_\   version 2.0.2      /_/Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_111)Type in expressions to have them evaluated.Type :help for more information.scala> 

如何在spark-shell 加载文件?

  • 本地 文件:
    • scala> val textFile = sc.textFile(“file:///to/path/file”)
  • HDFS中的 文件:
    • scala> val textFile = sc.textFile(“hdfs://master:9000/to/path/file”)

准备一个 word.txt 文档

$ cat /opt/source/spark/code/word.txt$ ./bin/hdfs dfs -mkdir -p /user/hadoop$ ./bin/hdfs dfs -ls . && ./bin/hdfs dfs -ls /user/hadoop [效果一样]$ ./bin/hdfs dfs -ls /   [查看根目录]上传本地文件到 HDFS 用户目录$ ./bin/hdfs dfs -put /usr/local/spark/mycode/wordcount/word.txt .查看文件:$ ./bin/hdfs dfs -cat ./word.txt

切换回到spark-shell窗口,编写语句从HDFS中加载word.txt文件,并显示第一行文本内容:

scala> val textFile = sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")scala> textFile.first()* 需要注意的是,sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")中,* hdfs://localhost:9000/ 是Hadoop端口地址9000,实际上,也可以省略不写,如下三条语句都是等价的:scala> val textFile = sc.textFile("hdfs://localhost:9000/user/hadoop/word.txt")scala> val textFile = sc.textFile("/user/hadoop/word.txt")scala> val textFile = sc.textFile("word.txt")

进行单词统计:

  • 限于笔者测试机性能较差所以这里使用本地文件进行统计(HDFS中的文件直接更换路径即可)
scala> val textFile = sc.textFile("file:///opt/source/spark/code/word.txt")scala> val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)scala> wordCount.collect()

这里写图片描述

这里写图片描述

这里写图片描述

0 0
原创粉丝点击