Linux环境下Spark单机摆设安装经验分享(已经安装了Hadoop) ...

诗林  金牌会员 | 2025-3-16 06:30:40 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 683|帖子 683|积分 2049

实验课要完成spark的安装,我在老师提供的安装教程上修改了一些,简单记录一下~
之以是想上传这个安装过程是由于之前实验跟着一个教程安装了Hadoop,安装过程非常麻烦中间出了很多错误,但是批评区大家提供的各种思绪帮助了我,以是我也想分享一下我的安装经验帮助有必要的朋友。(这不是教程,只是我安装成功的经验分享,是小白,如有错漏,敬请指正~)
一、安装过程
1.安装Scala
由于Scala是Spark的原生语言。因此,安装Scala有助于高效地使用Spark,特别是当访问Spark的底层功能时,而且Spark的核心API是在Scala中实现的。以是首先使用下令“sudo apt-get install scala”安装Scala
  1. sudo apt-get install scala
复制代码

2. 下载Spark
2.1Spark官网下载安装压缩包

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的文件夹。
  1. 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目录下。
  1. sudo cp -r /home/xxx/spark-2.4.0-bin-without-hadoop /home/xxx/spark
复制代码
2.4Spark文件夹移动至指定目录
实验下令:
“sudo mv /home/xxx/spark-2.4.0-bin-without-hadoop/ /usr/local/spark”移动文件夹。
  1. 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 目录及其所有子目录和文件的权限。
  1. sudo chmod 777 -R /usr/local/spark
复制代码
 


2.6配置环境变量
首先配置profile文件,实验下令:“sudo vim /etc/profile”。
  1. sudo vim /etc/profile
复制代码
在文件中添加以下内容:
export SPARK_HOME=/usr/local/spark
export PATH=$PATHSPARK_HOME/bin
  1. export SPARK_HOME=/usr/local/spark
  2. 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”。
  1. cp spark-env.sh.template spark-env.sh
复制代码

  1. sudo vim spark-env.sh
复制代码
在文件中添加以下内容:
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
  1. export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
复制代码

 3.运行Spark
 实验下令:“cd /usr/local/spark/sbin”进入指定目录。

  1. cd /usr/local/spark/sbin
复制代码
接着实验下令:“./start-all.sh”启动Spark集群中的 master 和 worker 进程。
  1. ./start-all.sh
复制代码
出现以下内容则证明启动成功。
这时,用浏览器打开: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):
  1. java -version
复制代码
查抄发现我的错误是安装错了版本,以是我删除原有的java7,安装OpenJDK 8。
由于我安装的Ubuntu系统版本较老,以是默认的包管理库可能不包括 OpenJDK 8。导致更新完软件源后,输入下令“sudo apt-get install openjdk-8-jdk”,显示未发现软件包 openjdk-8-jdk。
我选择添加 PPA 存储库。
再次更新软件包列表。
安装OpenJDK 8。
  1. sudo add-apt-repository ppa:openjdk-r/ppa
  2. sudo apt-get update
  3. sudo apt-get install openjdk-8-jdk
复制代码
如果在更新软件包时出现 :“W: 以下 ID 的密钥没有可用的公钥:EB....2A(公钥内容)”,这是由于 PPA 的署名密钥未正确导入,可以手动导入公钥:
  1. sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB...2A(公钥内容)
复制代码
安装成功之后,再次用"java -version"查抄版本情况。会输出以下内容:
  1. java version "1.8.0_xxx"
  2. OpenJDK Runtime Environment (build 1.8.0_xxx)
  3. 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。
运行以下内容,查察可用版本:
  1. sudo update-alternatives --config java
复制代码
终端将显示类似以下内容的列表:
  1. There are 2 choices for the alternative java (providing /usr/bin/java).
  2.   Selection    Path                                     Priority   Status
  3. ------------------------------------------------------------
  4. * 1            /usr/lib/jvm/java-7-openjdk-amd64/bin/java  1071      auto mode
  5.   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 版本。
  1. 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 的路径。
  1. sudo rm -rf /usr/lib/jvm/default-java
  2. 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 文件:
  1. ls /usr/local/spark/jars | grep slf4j
复制代码
如果没有找到任何 SLF4J 相关的 JAR 文件,则可以手动添加所需的 JAR 文件。
先下载
  1. wget https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.16/slf4j-api-1.7.16.jar -P /tmp/
  2. wget https://repo1.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.16/slf4j-log4j12-1.7.16.jar -P /tmp/
  3. wget https://repo1.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar -P /tmp/
  4. 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 目录
  1. sudo cp /tmp/slf4j-api-1.7.16.jar /usr/local/spark/jars/
  2. sudo cp /tmp/slf4j-log4j12-1.7.16.jar /usr/local/spark/jars/
  3. sudo cp /tmp/log4j-api-2.13.3.jar /usr/local/spark/jars/
  4. sudo cp /tmp/log4j-core-2.13.3.jar /usr/local/spark/jars/
复制代码
使用 ls 下令验证 JAR 文件是否成功复制到 Spark 的 jars 目录:
  1. ls /usr/local/spark/jars | grep slf4j
  2. ls /usr/local/spark/jars | grep log4j
复制代码
然后照旧报错,我发现我愚蠢地忘记复制spark-env.sh.template并新建spark-env.sh了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

诗林

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表