Spark集群的搭建

JDK安装与配置

1、将JDK包解压至/usr/local目录下

1
sudo tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local/

2、配置环境变量,在/etc/profile或者用户的.bash_profile文件,在文件末尾处添加路径变量如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
##JAVA Environment

export JAVA_HOME=/usr/local/jdk1.8.0_271
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin

# ---------------------------------------------------------------------

export JAVA_HOME=/usr/local/jdk1.8.0_271
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
  • 你要将/usr/local/jdk1.8.0_271改为你的jdk安装目录;
  • linux下用冒号“:”来分隔路径;
  • ${PATH}、${CLASSPATH}、${JAVA_HOME}是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误;
  • CLASSPATH中当前目录“.”不能丢,把当前目录丢掉也是常见的错误;
  • export是把这三个变量导出为全局变量;
  • 大小写必须严格区分。

3、让修改的环境变量生效

1
source /etc/profile

设置SSH无密码登录

Hadoop是由很多台服务器所组成的,当启动Hadoop系统时,NameNode必须与DataNode连接并管理这些节点(DataNode)。此时系统会要求我们输入密码,为了让系统顺利运行而不需要手动输入密码,需要将SSH设置成为无密码登录。(无密码登录是以事先交换的SSH Key秘钥来进行身份登录)。Hadoop使用SSH(Secure Shell)连接,目前是最可靠、专为远程登录其他服务器提供的安全性协议。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# 1、检查ssh和rsync是否安装
# ssh协议,rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件
rpm -qa | grep openssh
rpm -qa | grep rsync

# 2、若显示没有,则安装SSH和rsync
dnf install ssh
dnf install rsync

#------------------------------------------------
# 3、配置Master节点免密登录本机、所有的Slave
#------------------------------------------------
# (3.1)、产生SSH Key秘钥进行后续身份验证(可简写为ssh-keygen -t rsa -P ''),
# 生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/root/.ssh"目录下。
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

# 默认在 ~/.ssh目录生成两个文件:
# id_rsa :私钥
# id_rsa.pub :公钥

# 将产生的Key放置到许可证文件中
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

# (3.2)、对于CentOS7.2及早期版本,(CentOS7.3及以后的版本跳过此步骤);
# 修改ssh配置文件"/etc/ssh/sshd_config"的下列内容,将以下内容的注释去掉:

RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式
AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

# 重启ssh服务,才能使刚才设置有效。
service sshd restart

# (3.3)、对于CentOS7.3以后的版本,在服务器上更改权限;
# (很重要,如果不这么设置,就是不让你免密登录)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

# (3.4)、验证无密码登录本机是否成功。
ssh localhost

# (3.5)、导入要免密码登录的Slave服务器
#首先将公钥复制到服务器
scp ~/.ssh/id_rsa.pub xxx@host:/home/id_rsa.pub
#然后,将公钥导入到认证文件(这一步的操作在服务器上进行)
cat /home/id_rsa.pub >> ~/.ssh/authorized_keys
#最后在本地登录服务器
ssh -v hostname@hostip

Hadoop集群环境搭建

Hadoop安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 建议读者专门建立一个存放应用程序安装包文件夹,本文使用的是/opt,进入/opt目录下
cd /opt

# 下载Hadoop: http://hadoop.apache.org/
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.5/hadoop-2.10.1.tar.gz

# 解压缩
tar -zxvf hadoop-2.10.1.tar.gz

# 移动hadoop到/usr/local/hadoop
mv hadoop-2.10.1/* /usr/local/hadoop

# 查看hadoop安装目录/usr/local/hadoop-2.10.1hadoop
ll /usr/local/hadoop

配置Hadoop环境变量

在/etc/profile或者~/.bashrc添加文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 设置JDK安装路径
export JAVA_HOME=/usr/local/jdk1.8.0_271

# 设置HADOOP_HOME为Hadoop的安装路径/usr/local/hadoop
export HADOOP_HOME=/usr/local/hadoop-2.10.1

# 设置PATH,这样在其他目录时仍然可以运行Hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

# 设置Hadoop其他环境变量
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME

# 链接库的相关设置
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY

让~/.bashrc生效

1
source ~/.bashrc

修改Hadoop配置设置文件

主要包括:hadoop-env.sh、core-site.xml、yarn-site.xml、mapred-site.xml、hdfs-site.xml

(1)设置hadoop-env.sh文件

1
vim /usr/local/hadoop-2.10.1/etc/hadoop/hadoop-env.sh

修改JAVA_HOME

1
2
3
4
5
6
7
8
export JAVA_HOME=/usr/local/jdk1.8.0_271

# 其中有博客文章配置的变量为:(https://www.cnblogs.com/nswdxpg/p/8526920.html)
#export JAVA_HOME=/usr/local/jdk1.8.0_271
#export HADOOP_HOME=/usr/local/hadoop-2.10.1
#export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
#export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
#export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/etc/hadoop"}

(2)设置core-site.xml

1
vim /usr/local/hadoop-2.10.1/etc/hadoop/core-site.xml

设置HDFS的默认名称:

1
2
3
4
5
6
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>

这里需要注意的是:使用 fs.default.name 还是使用 fs.defaultFS ,要首先判断是否开启了 NN 的HA (namenode 的 highavaliable),如果开启了nn ha,那么就用fs.defaultFS,在单一namenode的情况下,就用 fs.default.name , 如果在单一namenode节点的情况使用 fs.defaultFS ,系统将报错误如下:

ERROR org.apache.hadoop.hdfs.server.namenode.NameNode: Failed to start namenode.
java.lang.IllegalArgumentException: Invalid URI for NameNode address (check fs.defaultFS): file:/// has no authority.

(3)设置yarn-site.xml

1
vim /usr/local/hadoop-2.10.1/etc/hadoop/yarn-site.xml

在之间输入:

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>

(4)设置mapred-site.xml
mapred-site.xml用于设置监控Map与Reduce程序的JobTracker任务分配情况以及TaskTracker任务运行情况。Hadoop提供了设置的模板文件,可以自行复制修改。

1
2
3
cp /usr/local/hadoop-2.10.1/etc/hadoop/mapred-site.xml.template /usr/local/hadoop-2.10.1/etc/hadoop/mapred-site.xml

nano /usr/local/hadoop-2.10.1/etc/hadoop/mapred-site.xml

在之间输入:

1
2
3
4
5
6
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

(5)hdfs-site.xml
hdfs-site.xml用于设置HDFS分布式文件系统.

1
vim /usr/local/hadoop-2.10.1/etc/hadoop/hdfs-site.xml

在之间输入,默认的blocks副本备份数量是每一个文件在其他node的备份数量,默认值为3。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<configuration>
<!--指定hdfs保存数据的副本数量-->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<!--指定hdfs中namenode的存储位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-2.10.1/hadoop_data/hdfs/namenode</value>
</property>

<!--指定hdfs中datanode的存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-2.10.1/hadoop_data/hdfs/datanode</value>
</property>

</configuration>

创建并格式化HDFS目录

1
2
3
4
5
6
7
8
9
10
11
# 创建namenode数据存储目录
mkdir -p /usr/local/hadoop-2.10.1/hadoop_data/hdfs/namenode

# 创建datanode数据存储目录
mkdir -p /usr/local/hadoop-2.10.1/hadoop_data/hdfs/datanode

# 将Hadoop的所有者更改为root
chown root:root -R /usr/local/hadoop-2.10.1

# 格式化HDFS,如果HDFS已有数据,格式化操作会删除所有的数据
hadoop namenode -format

启动Hadoop

分别启动HDFS和YARN,使用start-dfs.sh(启动HDFS)和使用start-yarn.sh(启动YARN)
同时启动HDFS和YARN,使用start-all.sh

1
2
3
4
5
6
7
8
9
10
11
# 启动HDFS
# start-dfs.sh

# 启动YARN
# start-yarn.sh

# 或者同时启动HDFS和YARN
start-all.sh

# 使用jps查看已经启动的进程,查看NameNode和DataNode进程是否启动
jps

HDFS功能:NameNode、SecondaryNameNode和DataNode
YARN功能:ResourceManager、NodeManager

Hadoop ResourceManager Web界面查看Hadoop运行状态:node、application和status.

http://master_ip:8088

在VMware虚拟的CentOS8中,宿主机并不能访问虚拟机的IP端口,但是能ping得通,centos7 防火墙由firewalld管理,service firewalld stop关闭防火墙即可。

参考:

1、https://blog.csdn.net/weixin_40814247/article/details/95042886

2、win7无法访问虚拟机中的hadoop2.x的web管理界面

Hadoop集群的搭建

前面我们只用了一台机器,实际生产中,不可能这样操作,我们的通常做法是:
1、有一台主要的计算机master,在HDFS担任NameNode的角色,在YARN担任ResourceManager角色。【注:通常会安排一台机器当做SecondaryNameNode使用,像上文中的http://192.168.111.227:8088/cluster一样,就是辅助节点。】
2、有多台机器data1、data2、data3,在HDFS担任DataNode角色,在YARN担任NodeManager角色。

img

Reference:

1、Ubuntu下SSH无密码验证配置

2、CentOS7.4配置SSH登录密码与密钥身份验证踩坑

3、本地CentOS8 配置ssh免密登录服务器

2、Spark学习笔记—Linux安装Spark集群详解

1、推荐系统中的A/B测试,谁能详细说下思路?

------ 本文结束------
Donate comment here.

欢迎关注我的其它发布渠道