Spark 分布式计算框架之环境搭建
Spark 的开发语言是 Scala,而 Scala 运行于 JVM 之上,因此,搭建 Spark 的运行环境应该包括 JDK 和 Scala
(本文的操作均在 64位 ubuntu 16.04 操作系统下进行)
1. 安装 JDK
JDK 的安装方式看这里
2. 安装 Scala
2.1 下载
点击这里下载 Scala
本文下载的是 scala-2.12.1.tgz
$ wget http://downloads.lightbend.com/scala/2.12.1/scala-2.12.1.tgz
2.2 解压
在 opt
目录下新建一个目录 scala
$ sudo mkdir /opt/scala
将刚才下载的文件移动到新创建的 scala
目录中
$ sudo mv scala-2.12.1.tgz /opt/scala
进入 scala
目录
$ cd /opt/scala
解压
$ sudo tar zxvf scala-2.12.1.tgz
2.3 配置
打开配置文件 .bashrc
$ sudo vim ~/.bashrc
在文件末尾添加如下代码:
export SCALA_HOME="/opt/scala/scala-2.12.1"
export PATH="$SCALA_HOME/bin:$PATH"
运行如下命令使配置立刻生效:
$ source ~/.bashrc
2.4 验证
在终端输入如下命令:
$ scala -version
如果看到这样的输出则证明安装成功:
Scala code runner version 2.12.1 -- Copyright 2002-2016, LAMP/EPFL and Lightbend, Inc.
3. 安装 Spark
3.1 下载
点击这里下载 Spark
本文下载的是 spark-2.1.0-bin-hadoop2.7.tgz
$ wget http://d3kbcqa49mib13.cloudfront.net/spark-2.1.0-bin-hadoop2.7.tgz
3.2 解压
在用户家目录(~)下新建 apps
目录
$ mkdir ~/apps
将刚才下载的文件移动到 apps
目录中
$ mv spark-2.1.0-bin-hadoop2.7.tgz ~/apps
进入 apps
目录
$ cd ~/apps
解压
$ tar zxvf spark-2.1.0-bin-hadoop2.7.tgz
3.3 配置
打开配置文件 .bashrc
$ sudo vim ~/.bashrc
在文件末尾添加如下代码:
export SPARK_HOME="/home/YOUR_NAME/apps/spark-2.1.0-bin-hadoop2.7"
tip: 将 YOUR_NAME
替换成你的家目录
使配置立刻生效:
$ source ~/.bashrc
4. 配置 spark-env.sh
在运行 spark-shell
之前,我们需要进行一些配置
进入 Spark
的安装目录
$ cd ~/apps/spark-2.1.0-bin-hadoop2.7
复制一份 spark-env.sh.template
,命名为 spark-env.sh
,并对它进行编辑
$ cp conf/spark-env.sh.template conf/spark-env.sh
$ vim conf/spark-env.sh
在文件末尾添加如下配置:
export SPARK_MASTER_IP=127.0.0.1
export SPARK_LOCAL_IP=127.0.0.1
运行 spark-shell
$ ~/apps/spark-2.1.0-bin-hadoop2.7/bin/spark-shell
终端输出如下信息则表示启动成功
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
17/02/26 21:20:06 WARN ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
17/02/26 21:20:07 WARN ObjectStore: Failed to get database default, returning NoSuchObjectException
17/02/26 21:20:12 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException
Spark context Web UI available at http://127.0.0.1:4040
Spark context available as 'sc' (master = local[*], app id = local-1488115184825).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.1.0
/_/
Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121)
Type in expressions to have them evaluated.
Type :help for more information.
scala>
5. 牛刀小试
现在我们来用 Spark
计算一下其安装目录下 LICENSE
文件中每行字符串的平均长度
接上一节中成功启动的 spark-shell
,在 spark-shell
中依次输入如下内容(双斜线开始的注释不需要输入_)
// 通过本地文件系统中的文件创建 RDD (弹性分布式数据集)
scala> val rddFromTextFile = sc.textFile("LICENSE")
// 将每一个字符串都转换为一个整数
scala> val intsFromStringsRDD = rddFromTextFile.map(line => line.size)
// 对所有记录的长度求和
scala> val sumOfRecords = intsFromStringsRDD.sum
// 计算记录总的数目
scala> val numRecords = intsFromStringsRDD.count
// 将记录总长度和记录的总数目相除,得到每一行的平均值
scala> val aveLengthOfRecord = sumOfRecords / numRecords
最终输出结果如下:
aveLengthOfRecord: Double = 58.5685618729097
当然,我们也可以用更简单的方式得到和上面相同的结果。
代码如下:
scala> val aveLengthOfRecordChained = rddFromTextFile.map(line => line.size).sum / rddFromTextFile.count
好了,今天就到这里。睡觉。_
哦,还有一句忘记说了,输入 :q
退出 spark-shell
scala> :q