迄今为止,已经有五次因为安装hadoop被黑客入侵导致重装服务器的系统了。经过不断的排查摸索,终于初步确定了就是因为hadoop开放端口的原因。
在安装spark之前,我们首先需要安装好以下几个组件:
- java
- hadoop
- scala
1.安装java
关于java的安装,可以选择java8或者java11。使用以下命令搜索相关yum源程序:
yum search java
如下图:
之后可以使用如下命令安装java:
yum install java-1.8.0-openjdk-devel.x86_64
或
yum install java-11-openjdk-devel.x86_64
2.安装hadoop
关于安装hadoop,之前已经写过相关文章如CentOS安装Hadoop - lightsmile’s Blog。关于hadoop的下载,我们可以通过清华源来下载,具体下载地址为:Index of /apache/hadoop/core/hadoop-3.3.0。
需要注意的是设置ssh免密登录过程可能会出现问题,在设置完成后可能还需要提示输入密码才可以。
这时可以输入:
ssh -vvv localhost
查看详细的登录日志信息,以确定问题所在。其中的问题主要包括~/.ssh
文件夹的权限不对以及authorized_keys
的权限不对,以及用户自定义ssh秘钥文件名等等。
2.1 hadoop设置ssh免密登录失败常见原因及解决措施
~/.ssh文件夹权限
可以输入以下命令以修改ssh文件夹权限:
chmod 700 ~/.ssh
authorized_keys文件权限
chmod 0600 authorized_keys
找不到ssh秘钥文件或用户自定义ssh秘钥文件名
如果用户不将ssh秘钥文件设置为默认的id_dsa或id_rsa等,那么用户还需要在~/.ssh文件夹下新增一个config文件以配置相关信息,具体内容大致如下:
Host localhost
HostName localhost
User hadoop
Port 22
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
其中Host后面的localhost是指用户自定义的主机名,用于之后免密登录时ssh后面的地址,HostName则为实际的主机名,User指用户名,Port指ssh登录所使用的端口,IdentityFile指秘钥所对应的路径。
在新增config文件之后,同时也还需要设置该文件的权限,如:
chmod 0600 config
3.安装scala
首先需要到ScalaDownload | The Scala Programming Language官网下载scala,可以下载如下文件:
在下载完成之后,将其解压到合适的文件夹,并将bin目录添加到系统PATH环境变量中即可。
我是将hadoop、spark和scala都放到了/opt路径下,同时新增了/etc/profile.d/hadoop.sh
文件,里面内容为:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.9.11-3.el8_3.x86_64
export HADOOP_HOME=/opt/hadoop-3.3.0
export SCALA_HOME=/opt/scala-2.13.4
export SPARK_HOME=/opt/spark-3.0.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$SPARK_HOME/bin
安装完成之后,可以简单验证一下,如下图:
4.安装spark
对于spark的下载,可以通过国内清华源下载以提高下载速度。具体网址为:Index of /apache/spark,当前最新版本的下载链接为:spark-3.0.1-bin-hadoop3.2.tgz。
在下载好spark后,解压到合适的位置并配置环境变量与配置scala类似,此处不表。在安装完成之后,可以简单验证一下,如下命令:
(base) ➜ ~ run-example SparkPi 10 2>&1 | grep "Pi is"
Pi is roughly 3.144179144179144
5.通过安全组控制hadoop服务所开放的端口
通过以下命令排查得到java所对应端口:
(base) ➜ ~ netstat -tunlp | grep java
tcp 0 0 0.0.0.0:8030 0.0.0.0:* LISTEN 81914/java
tcp 0 0 0.0.0.0:8031 0.0.0.0:* LISTEN 81914/java
tcp 0 0 0.0.0.0:8032 0.0.0.0:* LISTEN 81914/java
tcp 0 0 0.0.0.0:8033 0.0.0.0:* LISTEN 81914/java
tcp 0 0 0.0.0.0:8040 0.0.0.0:* LISTEN 82046/java
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 81255/java
tcp 0 0 0.0.0.0:8042 0.0.0.0:* LISTEN 82046/java
tcp 0 0 0.0.0.0:9868 0.0.0.0:* LISTEN 81632/java
tcp 0 0 0.0.0.0:9870 0.0.0.0:* LISTEN 81255/java
tcp 0 0 0.0.0.0:36563 0.0.0.0:* LISTEN 82046/java
tcp 0 0 0.0.0.0:8088 0.0.0.0:* LISTEN 81914/java
通过jps命令查看java进程信息:
(base) ➜ ~ jps
81632 SecondaryNameNode
81255 NameNode
81914 ResourceManager
82046 NodeManager
190765 Jps
然后根据对应的端口号配置安全组,如下图: