实验课要完成spark的安装,我在老师提供的安装教程上修改了一些,简单记录一下~
之以是想上传这个安装过程是由于之前实验跟着一个教程安装了Hadoop,安装过程非常麻烦中间出了很多错误,但是批评区大家提供的各种思绪帮助了我,以是我也想分享一下我的安装经验帮助有必要的朋友。(这不是教程,只是我安装成功的经验分享,是小白,如有错漏,敬请指正~)
一、安装过程
1.安装Scala
由于Scala是Spark的原生语言。因此,安装Scala有助于高效地使用Spark,特别是当访问Spark的底层功能时,而且Spark的核心API是在Scala中实现的。以是首先使用下令“sudo apt-get install scala”安装Scala
- sudo apt-get install scala
复制代码
2. 下载Spark
2.1在Spark官网下载安装压缩包
https://archive.apache.org/dist/spark/spark-2.4.0/spark-2.4.0-bin-without-hadoop.tgz
2.2解压安装包
运行以下下令将下载的Spark压缩包解压到指定目录:
“sudo tar -zxf /home/xxx/spark-2.4.0-bin-without-hadoop.tgz”(地址改成你本身的),之后会生成一个名为spark-2.4.0-bin-without-hadoop的文件夹。
- sudo tar -zxf /home/xxx/spark-2.4.0-bin-without-hadoop.tgz
复制代码
2.3重定名
实验下令:
“sudo cp -r /home/xxx/spark-2.4.0-bin-without-hadoop /home/xxx/spark”将整个spark-2.4.0-bin-without-hadoop/ 文件夹复制到/home/xxx/spark目录下。
- sudo cp -r /home/xxx/spark-2.4.0-bin-without-hadoop /home/xxx/spark
复制代码 2.4将Spark文件夹移动至指定目录
实验下令:
“sudo mv /home/xxx/spark-2.4.0-bin-without-hadoop/ /usr/local/spark”移动文件夹。
- sudo mv /home/xxx/spark-2.4.0-bin-without-hadoop/ /usr/local/spark
复制代码 2.5修改Spark文件权限
实验下令:
“sudo chmod 777 -R /usr/local/spark”会递归地更改 /usr/local/spark 目录及其所有子目录和文件的权限。
- sudo chmod 777 -R /usr/local/spark
复制代码
2.6配置环境变量
首先配置profile文件,实验下令:“sudo vim /etc/profile”。
在文件中添加以下内容:
export SPARK_HOME=/usr/local/spark
export PATH=$PATH SPARK_HOME/bin
- export SPARK_HOME=/usr/local/spark
- export PATH=$PATH:$SPARK_HOME/bin
复制代码
接下来,进入/usr/local/spark/conf目录中,查察所有文件,找到文件spark-env.sh.template,实验下令:“cp spark-env.sh.template spark-env.sh”, 将spark-env.sh.template复制为spark-env.sh。
配置文件spark-env.sh,实验下令:“sudo vim spark-env.sh”。
- cp spark-env.sh.template spark-env.sh
复制代码
在文件中添加以下内容:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
- export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
复制代码
3.运行Spark
实验下令:“cd /usr/local/spark/sbin”进入指定目录。
接着实验下令:“./start-all.sh”启动Spark集群中的 master 和 worker 进程。
出现以下内容则证明启动成功。
这时,用浏览器打开:http://localhost:8080/,出现如下页面则证明Spark已成功启动。
二、遇到的问题
在启动时出现
"localhost: failed to launch: nice -n 0 /usr/local/spark/bin/spark-class org.apache.spark.deploy.master.Master --host hadoop --port 7077 --webui-port 8080"
以及
"localhost: failed to launch: nice -n 0 /usr/local/spark/bin/spark-class org.apache.spark.deploy.worker.Worker --webui-port 8081 spark://hadoop:7077"
这个问题通常是由于启动 Spark 集群时无法找到或加载相关的 Java 类导致的。
Spark 依赖于 java,因此必要确保 java 已正确安装而且 JAVA_HOME 环境变量已正确设置。查抄 java是否已正确安装,而且是否是正确的版本(我安装的spark是2.4.0版本,起码必要的版本是java8):
查抄发现我的错误是安装错了版本,以是我删除原有的java7,安装OpenJDK 8。
由于我安装的Ubuntu系统版本较老,以是默认的包管理库可能不包括 OpenJDK 8。导致更新完软件源后,输入下令“sudo apt-get install openjdk-8-jdk”,显示未发现软件包 openjdk-8-jdk。
我选择添加 PPA 存储库。
再次更新软件包列表。
安装OpenJDK 8。
- sudo add-apt-repository ppa:openjdk-r/ppa
- sudo apt-get update
- sudo apt-get install openjdk-8-jdk
复制代码 如果在更新软件包时出现 :“W: 以下 ID 的密钥没有可用的公钥:EB....2A(公钥内容)”,这是由于 PPA 的署名密钥未正确导入,可以手动导入公钥:
- sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB...2A(公钥内容)
复制代码 安装成功之后,再次用"java -version"查抄版本情况。会输出以下内容:
- java version "1.8.0_xxx"
- OpenJDK Runtime Environment (build 1.8.0_xxx)
- OpenJDK 64-Bit Server VM (build xx, mixed mode)
复制代码 如果照旧显示 :
java -version java version "1.7.0_201"
OpenJDK Runtime Environment (IcedTea 2.6.17) (7u211-2.6.17-0ubuntu0.1)
OpenJDK 64-Bit Server VM (build 24.201-b00, mixed mode) 之类的,阐明 OpenJDK 8 已安装成功,但系统仍默认使用 java 7。可以切换默认 java 版本到 OpenJDK 8。
运行以下内容,查察可用版本:
- sudo update-alternatives --config java
复制代码 终端将显示类似以下内容的列表:
- There are 2 choices for the alternative java (providing /usr/bin/java).
- Selection Path Priority Status
- ------------------------------------------------------------
- * 1 /usr/lib/jvm/java-7-openjdk-amd64/bin/java 1071 auto mode
- 2 /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1081 manual mode
复制代码 根据列表中显示的序号选择 java 8。例如,如果 java 8 的序号为 2,输入2。按回车后,java 8 会成为默认版本。
但是之后照旧显示启动失败,缘故起因是 Spark 启动过程中无法找到相关的类文件。
由于在 ~/.bashrc 文件中设置的 JAVA_HOME 路径是 /usr/lib/jvm/default-java。但是,Spark 启动失败的缘故起因可能是由于 Spark 找不到正确的 Java 路径。
查抄 /usr/lib/jvm/default-java 是否指向正确的 Java 版本。
- ls -l /usr/lib/jvm/default-java
复制代码 显示 “lrwxrwxrwx 1 root root 24 3月 23 2014 /usr/lib/jvm/default-java -> java-1.7.0-openjdk-amd64”,果然指向版本出错了,照旧java7。
以是我必要更新 default-java 链接,指向 java 8 的路径。
- sudo rm -rf /usr/lib/jvm/default-java
- sudo ln -s /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/default-java
复制代码 解决完这个问题之后照旧报错。。。
错误日记显示 java.lang.ClassNotFoundException: org.slf4j.Logger,意味着 Spark 缺少了 SLF4J库的依赖。(而且我之后报错无法找到相应的类org.slf4j.Logger 类,以是我两个一起解决)
确认 jars 目录下是否有 SLF4J 的相关 JAR 文件:
- ls /usr/local/spark/jars | grep slf4j
复制代码 如果没有找到任何 SLF4J 相关的 JAR 文件,则可以手动添加所需的 JAR 文件。
先下载
- wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.16/slf4j-api-1.7.16.jar -P /tmp/
- wget https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.16/slf4j-log4j12-1.7.16.jar -P /tmp/
- wget https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar -P /tmp/
- wget https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.13.3/log4j-core-2.13.3.jar -P /tmp/
复制代码 再复制文件到 Spark 的 jars 目录
- sudo cp /tmp/slf4j-api-1.7.16.jar /usr/local/spark/jars/
- sudo cp /tmp/slf4j-log4j12-1.7.16.jar /usr/local/spark/jars/
- sudo cp /tmp/log4j-api-2.13.3.jar /usr/local/spark/jars/
- sudo cp /tmp/log4j-core-2.13.3.jar /usr/local/spark/jars/
复制代码 使用 ls 下令验证 JAR 文件是否成功复制到 Spark 的 jars 目录:
- ls /usr/local/spark/jars | grep slf4j
- ls /usr/local/spark/jars | grep log4j
复制代码 然后照旧报错,我发现我愚蠢地忘记复制spark-env.sh.template并新建spark-env.sh了 |