栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop系列 (六):Spark搭建

Hadoop系列 (六):Spark搭建

文章目录
    • Hadoop系列文章
    • Spark简介
    • Spark搭建
      • Scala安装
      • Spark安装
      • Spark启动
    • Spark界面
    • Spark简单使用
      • Spark Shell
      • PySpark Shell

Hadoop系列文章

Hadoop系列 (一):在CentOS中搭建hadoop环境(伪分布式)

Hadoop系列 (二):完全分布式搭建(腾讯云服务器+阿里云服务器)

Hadoop系列 (三):HDFS详细介绍

Hadoop系列 (四):Yarn详细介绍

Hadoop系列 (五):MapReduce详细介绍

Spark简介

最初Spark作为hadoop的一个计算框架组件而发布,现在慢慢长大,可以独立运行了。意味着我们不搭建Hadoop集群也能 独立的安装运行Spark。

spark框架可以运行在各种操作系统上。

Apache Spark是一个开源集群计算框架。其主要目的是处理实时生成的数据。Spark建立在Hadoop MapReduce的顶部。它被优化为在内存中运行,而Hadoop的MapReduce等替代方法将数据写入计算机硬盘驱动器或从计算机硬盘驱动器写入数据。因此,Spark比其他替代方案更快地处理数据。

Spark作为Hadoop生态中重要的一员,其发展速度堪称恐怖,不过其作为一个完整的技术栈,在技术和环境的双重刺激下,得到如此多的关注也是有依据的。

Spark核心在于内存计算模型代替Hadoop生态的MapReduce离线计算模型,用更加丰富Transformation和Action算子来替代map,reduce两种算子。

Spark搭建

spark依赖scala,所以需要先安装scala。

注意:Scala版本要与Spark版本对应。

Scala安装

Scala各个版本

这里以Scala2.12.15和Spark3.0.0为例:

解压到/opt/scala目录:

tar zxvf scala-2.12.15.tgz

设置环境变量

# 在.bash_profile末尾增加
#set scala env
export SCALA_HOME=/opt/scala
export PATH=$PATH:$SCALA_HOME/bin

使.bash_profile生效

[hadoop@master ~]$ source .bash_profile
[hadoop@master ~]$ echo $SCALA_HOME
/opt/scala

Spark安装

解压Spark到目录/opt/spark

[hadoop@master software]$ sudo tar zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/spark --strip-components 1

设置环境变量

# 在.bash_profile末尾增加
#set spark env
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin

使.bash_profile生效

[hadoop@master ~]$ source .bash_profile
[hadoop@master ~]$ echo $SPARK_HOME
/opt/spark

更改文件夹权限

[hadoop@master opt]$ sudo chown -R hadoop:hadoop spark/
[hadoop@master opt]$ sudo chown -R hadoop:hadoop scala/
Spark启动

设置启动模式

# 复制配置文件模板
[hadoop@master conf]$ pwd
/opt/spark/conf
[hadoop@master conf]$ cp spark-defaults.conf.template spark-defaults.conf
[hadoop@master conf]$ cp slaves.template slaves
[hadoop@master conf]$ cp spark-env.sh.template spark-env.sh
[hadoop@master conf]$ ll -tlr
total 52
-rwxr-xr-x 1 hadoop hadoop 4344 Jun  6  2020 spark-env.sh.template
-rw-r--r-- 1 hadoop hadoop 1292 Jun  6  2020 spark-defaults.conf.template
-rw-r--r-- 1 hadoop hadoop  865 Jun  6  2020 slaves.template
-rw-r--r-- 1 hadoop hadoop 9141 Jun  6  2020 metrics.properties.template
-rw-r--r-- 1 hadoop hadoop 2023 Jun  6  2020 log4j.properties.template
-rw-r--r-- 1 hadoop hadoop 1105 Jun  6  2020 fairscheduler.xml.template
-rw-r--r-- 1 hadoop hadoop 1292 Oct 11 16:03 spark-defaults.conf
-rw-r--r-- 1 hadoop hadoop  865 Oct 11 16:04 slaves
-rwxr-xr-x 1 hadoop hadoop 4344 Oct 11 16:04 spark-env.sh

修改spark-defaults.conf

#用yarn模式
#在尾部添加
spark.master     yarn

修改spark-env.sh

#添加java_home
#set java_home
export JAVA_HOME=/usr/local/java/jdk1.8.0_291

启动执行脚本

查看日志信息

Spark界面

Spark简单使用 Spark Shell

在 Spark 目录下运行以下命令可以启动 Spark Shell:

Spark 最主要的抽象概念就是一个叫做 Dataset 的分布式数据集。Dataset 可以从 Hadoop InputFormats(例如 HDFS 文件)创建或者由其他 Dataset 转换而来。

下面利用HDFS文件创建一个Dataset:

scala> val textFile = spark.read.textFile("test.input")
textFile: org.apache.spark.sql.Dataset[String] = [value: string]

从 Dataset 获取值:

scala> textFile.count() // Number of items in this Dataset
res0: Long = 4  

scala> textFile.first() // First item in this Dataset
res1: String = just a test!

将该 Dataset 转换成一个新的 Dataset。我们调用 filter 这个 transformation 返回一个只包含原始文件数据项子集的新 Dataset。

scala> val linesWithSpark = textFile.filter(line => line.contains("test"))
linesWithSpark: org.apache.spark.sql.Dataset[String] = [value: string]

// How many lines contain "test"?
scala> linesWithSpark.count()
res2: Long = 1

scala> linesWithSpark.first()
res3: String = just a test!

PySpark Shell

由于我环境默认安装的是python3,如果直接执行pyspark会报错:

[hadoop@master bin]$ pyspark --master spark://master:7077
env: ‘python’: No such file or directory

需要先配置环境变量,编辑.bash_profile,在文件末尾添加:

#set pyspark
export PYSPARK_PYTHON=python3

使.bash_profile生效:

[hadoop@master bin]$ source ~/.bash_profile

再次启动pyspark

由于 Python 语言的动态性, 我们不需要强类型的Dataset 。因此 Python 中所有的 Dataset 都是 Dataset[Row], 并且为了和 Pandas 以及 R 中的 data frame 概念保持一致, 我们称其为 Dataframe。

>>> textFile = spark.read.text("test.input")
>>> textFile.count()
4                 
>>> textFile.first()
Row(value='just a test!')
>>>
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/326912.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号