我采用的是阿里云服务器的centos,安装docker后,拉取Ubuntu镜像,配置好所需环境后commit为一个新的镜像ubuntu:spark,之后再docker run 三个ubuntu:saprk,进行搭建。
基本步骤都是按照参考文章来的,这里主要记录一下遇到的一些问题及解决方法。
ps:由于我是根据自己搭建时遇到的问题进行记录的,故排在前面的问题,解决方案可能只解决了当前问题,但仍有不对的地方。一定要看到最后。
问题及解决方法
- 问题一:压缩包下载
- 问题二: 阿里云端口
- 问题三:参考文章中有一些小错误
- 1
- 2
- 问题四:hadoop报错
- 问题五:jps命令
- 问题六:8080端口被tomcat占用
- 问题七 :50070端口无法访问(暂未解决)
问题一:压缩包下载
如果直接在ubuntu镜像运行的容器中wget所需的jdk、hadoop、scala、zookeeper、spark压缩包,下载速度会很慢。
解决方法:通过电脑在官网下载所需的压缩包,由于我是通过mobaxterm登录的阿里云服务器,可以直接将下载好的压缩包传到宿主机,然后通过docker cp将压缩包拷贝到容器内的/root/soft/apache/目录下。
问题二: 阿里云端口
由于参考文章使用的是VMware虚拟机,虚拟机中自带浏览器,可以登录spark的web界面。但我使用的阿里云服务器,只能通过自己电脑的浏览器进入。
解决方法:在阿里云实例的安全组中开启以下端口:
在docker run时记得-p开启端口
[root@fanb ~]# docker run -it -h master --name master -P -p 50070:50070 -p 8080:8080 -p 8081:8081 ubuntu:spark
root@master:/#
[root@fanb ~]# docker run -it -h slave1 --name slave1 -p 8082:8081 -p 4040:4040 ubuntu:spark
root@slave1:/#
[root@fanb ~]# docker run -it -h slave2 --name slave2 -p 8083:8081 -p 4041:4040 ubuntu:spark
root@slave2:/#
这样就能在自己的电脑浏览器通过 阿里云公网IP:对应端口 进入web页面
问题三:参考文章中有一些小错误
1
参考文章中在配置Hadoop的core-site.xml时最后一行应为
</configuration>
2
参考文章中一些脚本未给出绝对路径
eg:start-dfs.sh
只需改成:/root/soft/apache/hadoop/hadoop-3.2.2/sbin/start-dfs.sh
问题四:hadoop报错
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no *HDFS_NAMENODE_USER
由于出现这个问题时忘记记录了
删除线部分报错缺什么就添加什么。
除参考解决文章事例外我还添加了以下两条:
HDFS_JOURNALNODE_USER=root
HDFS_ZKFC_USER=root
问题五:jps命令
jps命令无法找到。
root@master:/# jps
bash: jps: command not found
解决方案:使Java的环境变量配置生效
root@master:/# source /etc/profile
但commit镜像之后仍然会出现这个问题,每次docker run 进入容器之后,都需要重新source /etc/profile 。
所以需要配置永久环境变量:
运行容器之后
vim /etc/bash.bashrc
在最前面添加;
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_291
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
保存退出后,
root@85508e96f86c:/etc# source /etc/bash.bashrc
root@85508e96f86c:/etc# exit
再将此其保存为一个新的镜像
[root@fanb ~]# docker commit -m "zookeeper hadoop spark scala install" 85508e96f86c ubuntu:spark
问题六:8080端口被tomcat占用
浏览器通过 阿里云公网IP:8080 时无法访问,原因是8080端口被我之前搭建的tomcat所占用。
解决方法:通过修改 /root/soft/apache/spark/spark-3.1.2-bin-hadoop3.2/sbin/ 目录下的start-master.sh文件
操作方法:
vim start-master.sh
在vim命令模式下输入 /8080
if [ “$SPARK_MASTER_WEBUI_PORT” = “” ]; then
SPARK_MASTER_WEBUI_PORT=8080 fi
找到这个,将8080修改为8001
保存退出即可
那么阿里云安全组则需添加8001端口
docker run master容器时,对应的-p端口也需要做出改变
[root@fanb ~]# docker run -it -h master --name master -P -p 50070:50070 -p 8001:8001 -p 8081:8081 ubuntu:spark
root@master:/#
- 8001端口
- 8081端口
- 8082端口
- 8083端口
问题七 :50070端口无法访问(暂未解决)
解决方法:参考文章中的Hadoop是2.x版本,而我用的3.x版本,端口已经改为了9870.
找到hdfs-site.xml
root@ffbdfaa99ea0:~/soft/apache/hadoop/hadoop-3.2.2/etc/hadoop# vim hdfs-site.xml
将文件中之前配置的50070的地方全改为9870.
exit之后,将其commit为一个新的镜像。
[root@fanb ~]# docker commit -m "zookeeper hadoop spark scala install" ffbdfaa99ea0 ubuntu:spark2
之后docker run 时-p端口也得改一下
[root@fanb ~]# docker run -it -h master --name master -P -p 8001:8001 -p 8081:8081 -p 9870:9870 ubuntu:spark2