Hadoop集群部署(Ubuntu系统)

预先注意事项:

注意事项:文章中的文件路径可能与读者的文件路径存在差异,希望读者可以自行发现,自行解决。

需要对应版本!!!否则会出现不兼容的现象 

Ubuntu 官网:https://ubuntu.com/download/desktop

Hadoop官网:https://hadoop.apache.org/releases.html          点击下方的红圈之一,下载 .tar.gz  结尾的hadoop压缩包

 

一、基础准备

1.1 创建hadoop用户

首先安装Ubuntu操作系统 (有图像界面)

装 Ubuntu 的时候如果不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。(因为后续需要频繁用到用户名)

首先按 ctrl+alt+t 打开终端窗口,输入如下命令创建新用户

sudo useradd -m hadoop -s /bin/bash

接着使用如下命令设置密码,可简单设置为 hadoop,按提示输入两次密码:

sudo passwd hadoop

可为 hadoop 用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题:

sudo adduser hadoop sudo

最后注销当前用户(点击屏幕右上角的齿轮,选择注销),返回登陆界面。在登陆界面中选择刚创建的 hadoop 用户进行登陆。

 

1.2 更新apt

sudo apt-get update

如果更新失败可以换源

1.首先点击左侧任务栏的【系统设置】(齿轮图标),选择【软件和更新】

2.Ubuntu更新软件源

3.点击 “下载自” 右侧的方框,选择【其他节点】

4.Ubuntu更新软件源-选择服务器

5.在列表中选中【mirrors.aliyun.com】,并点击右下角的【选择服务器】,会要求输入用户密码,输入即可。

6.Ubuntu更新软件源-选择服务器   接着点击关闭。

7.Ubuntu更新软件源-关闭窗口

8.此时会提示列表信息过时,点击【重新载入】,

9.Ubuntu更新软件源-重新载入

10.最后耐心等待更新缓存即可。更新完成会自动关闭【软件和更新】这个窗口。如果还是提示错误,请选择其他服务器节点如 mirrors.163.com 再次进行尝试。更新成功后,再次执行 sudo apt-get update 就正常了。

 

1.3安装vim(系统默认编辑器不方便使用)

sudo apt-get install vim

 安装软件时若需要确认,在提示处输入 Y即可。(大写Y)

 

1.4 查看节点IP(推荐使用静态IP)

静态IP配置:https://www.cnblogs.com/Theext/p/16047275.html

 

 Linux 中查看IP 地址的命令为

ifconfig

本教程将使用三个节点(一主双从)的名称与对应的 IP 关系如下:

192.168.222.130   Master
192.168.222.131   Slave01
192.168.222.132   Slave02

为了便于区分,修改各个节点的主机名(在终端标题、命令行中可以看到主机名)。在 Ubuntu中,我们在 Master 节点上执行如下命令修改主机名(即改为 Master,注意是区分大小写的):

sudo vim /etc/hostname

 然后执行如下命令修改自己所用节点的IP映射:

sudo vim /etc/hosts

 

我们在 /etc/hosts 中将该映射关系填写上去即可(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有  “ 127.0.0.1 Master ”  这样的记录)。

修改完成后需要重启一下,重启后在终端中才会看到机器名的变化。接下来的教程中请注意区分 Master 节点与Slave 节点的操作。

 

需要在所有节点上完成网络配置 

以上是 Master 节点的配置,而在其他的 Slave 节点上,也要对 /etc/hostname(修改为Slave01、Slave02 等) 和 /etc/hosts(跟 Master 的配置一样)这两个文件进行修改!

配置好后需要在各个节点上执行如下命令,测试是否相互 ping 得通,如果 ping 不通,后面就无法顺利配置成功:

ping Master  -c 3          #ping次数为3,否则要按 Ctrl+c 中断
ping Slave01 -c 3
ping Slave02 -c 3

在 Master 节点上 ping Slave01,ping通的话会显示 time

继续下一步配置前,请先完成所有节点的网络配置,修改过主机名的话需重启才能生效

 

1.5 安装SSH,可以登陆本地

集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),每一台机器都需要安装 SSH server:

sudo apt-get install openssh-server

安装后,可以使用如下命令登陆本机:

ssh localhost

(SSH首次登陆提示),输入 yes 。然后按提示输入密码,这样就登陆到本机了。

退出当前登录

exit

 

二、SSH无密码登陆节点(远程登陆)

这个操作是要让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上。

首先生成 Master 节点的公匙,在 Master 节点的终端中执行(如果改过主机名,还需要删掉原有的再重新生成一次):

cd ~/.ssh                                  # 如果没有该目录,先执行一次ssh localhost
rm ./id_rsa*                               # 删除之前生成的公匙(如果有)
ssh-keygen -t rsa                          # 一直按回车就可以生成钥匙

 

 让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行:

cat ./id_rsa.pub >> ./authorized_keys

 

完成后可执行 ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。

ssh Master

 

接着在 Master 节点将公匙传输到 Slave01 、Slave02 节点:

scp ~/.ssh/id_rsa.pub hadoop@Slave01:/home/hadoop/
scp ~/.ssh/id_rsa.pub hadoop@Slave02:/home/hadoop/

 

 scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave01 上 hadoop 用户的密码,输入完成后会提示传输完毕

 接着在 Slave01 节点上,将 ssh 公匙加入授权:

mkdir ~/.ssh                                  # 如果不存在该文件夹需先创建,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub                               # 用完就可以删掉了

 

如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。

这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行如下命令进行检验

ssh Slave01
ssh Slave02

 

三、安装JDK及其同步

3.1安装JDK

需要按照下面步骤来自己安装:三种方法选一种安装即可

3.1.1手动安装JDK1.8(推荐)

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html        (官网)

请把压缩格式的文件jdk-xxxx-linux-x64.tar.gz下载到本地电脑,假设保存在“/home/hadoop/Downloads/”目录下。 (根据实际情况)

cd /usr/lib
sudo mkdir jvm                                               #创建/usr/lib/jvm目录用来存放JDK文件
cd ~/                                                        #进入hadoop用户的主目录
cd Downloads  
sudo tar -zxvf ./jdk-xxxx-linux-x64.tar.gz    -C /usr/lib/jvm             #把JDK文件解压到/usr/lib/jvm目录下

 

JDK文件解压缩以后,可以执行如下命令到/usr/lib/jvm目录查看一下:

cd /usr/lib/jvm
ls

可以看到,在/usr/lib/jvm目录下有个jdk.xxx 目录。

下面继续执行如下命令,设置环境变量:

cd ~
vim ~/.bashrc

添加下列代码: jdk.xxx为上方ls显示的jdk版本文件名

export JAVA_HOME=/usr/lib/jvm/jdk.xxx            
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

查看是否安装成功

java -version

 如果能够在屏幕上返回如下信息(有下面四行代码),则说明安装成功:xxxx为版本号

java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)

 

3.1.2在线安装default-JDK

此安装过程需要连接网络,请保持联网状态。

sudo apt-get install default-jre default-jdk

安装结束以后,需要配置JAVA_HOME环境变量,请在Linux终端中输入下面命令打开当前登录用户的环境变量配置文件.bashrc:

vim ~/.bashrc

在文件最前面添加如下单独一行(注意,等号“=”前后不能有空格),然后保存退出:

export JAVA_HOME=/usr/lib/jvm/default-java

执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

 查看是否安装成功

echo $JAVA_HOME                                       # 检验变量值
java -version
$JAVA_HOME/bin/java -version                          # 与直接执行java -version一样

 安装JDK完成

  

3.1.3在线安装openjdk

在线安装jdk

sudo apt-get install openjdk-7-jre openjdk-7-jdk

安装好 OpenJDK 后,需要找到相应的安装路径,这个路径是用于配置 JAVA_HOME 环境变量的。执行如下命令:

dpkg -L openjdk-7-jdk | grep '/bin/javac'

该命令会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了。如输出路径为 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac,则我们需要的路径为 /usr/lib/jvm/java-7-openjdk-amd64。

安装结束以后,需要配置JAVA_HOME环境变量,请在Linux终端中输入下面命令打开当前登录用户的环境变量配置文件.bashrc:

vim ~/.bashrc

在文件最前面添加如下单独一行(注意,等号“=”前后不能有空格),然后保存退出:

export JAVA_HOME=JDK安装路径

执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

查看是否安装成功

echo $JAVA_HOME                                       # 检验变量值
java -version
$JAVA_HOME/bin/java -version                          # 与直接执行java -version一样

安装JDK完成

 

3.2传输JDK

检查jvm文件夹是否存在,

并赋予jvm写入权限(Slave进行)

sudo chmod 777 /usr/lib/jvm

Master分别传输JDK到每个节点

sudo scp -r /usr/lib/jvm/jdk-xxx  hadoop@Slave01:/usr/lib/jvm            #同步
sudo scp -r /usr/lib/jvm/jdk-xxx  hadoop@Slave02:/usr/lib/jvm            #同步

 

每个节点需要配置JAVA_HOME环境变量,在Linux终端中输入:

vim ~/.bashrc

在文件最前面添加如下单独一行(注意,等号“=”前后不能有空格),然后保存退出:

export JAVA_HOME=JDK安装路径

执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

 

四、安装hadoop及其配置

4.1 hadoop配置

4.1.1 下载官网对应版本的Hadoop

sudo tar -zxf ~/下载/hadoop-xxx.tar.gz -C /usr/local            # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-xxx  ./hadoop                                       # 将文件夹名改为hadoop
sudo chown -R hadoop  ./hadoop                                         # 修改文件权限

 

4.1.2 解压Hadoop

Hadoop解压后即可使用,输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

/usr/local/hadoop/bin/hadoop version

hadoop安装完成后,Master节点进行配置hadoop环境变量

sudo vi ~/.bashrc

添加下列代码

export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

 

4.2配置Hadoop文件

cd /usr/local/hadoop/etc/hadoop

 

4.2.1 编辑hadoop-env.sh文件

vi ./hadoop-env.sh

修改JAVA_HOME配置项为JDK安装目录

export JAVA_HOME=JDK安装目录

 

4.2.2 编辑core-site.xml文件

vi ./core-site.xml

添加以下内容

其中Master为计算机名,/usr/local/hadoop/tmp为手动创建的目录

<configuration>
 <property>  
  <name>fs.defaultFS</name>  
  <value>hdfs://Master:9000</value>  
 </property>  
 <property>  
  <name>io.file.buffer.size</name>  
  <value>131072</value>  
 </property>  
 <property>  
  <name>hadoop.tmp.dir</name>  
  <value>file:/usr/local/hadoop/tmp</value>  
  <description>Abasefor other temporary directories.</description>  
 </property>  
 <property>  
  <name>hadoop.proxyuser.spark.hosts</name>  
  <value>*</value>  
 </property>  
<property>  
  <name>hadoop.proxyuser.spark.groups</name>  
  <value>*</value>  
 </property> 
</configuration>

 创建文件夹:

mkdir /usr/local/hadoop/tmp

 

4.2.3 编辑hdfs-site.xml文件

修改文件内容

vi ./hdfs-site.xml

 其中Master为计算机名,3为有副本数

/usr/local/hadoop/dfs/name 和 /usr/local/hadoop/dfs/data为手动创建目录

<configuration>
<property>  
  <name>dfs.namenode.secondary.http-address</name>  
  <value>Master:9001</value>  
 </property>  
  <property>  
   <name>dfs.namenode.name.dir</name>  
   <value>file:/usr/local/hadoop/dfs/name</value>  
 </property>  
 <property>  
  <name>dfs.datanode.data.dir</name>  
  <value>file:/usr/local/hadoop/dfs/data</value>  
  </property>  
 <property>  
  <name>dfs.replication</name>  
  <value>3</value>  
 </property>  
 <property>  
  <name>dfs.webhdfs.enabled</name>  
  <value>true</value>  
 </property>  
</configuration>

创建文件夹

mkdir /usr/local/hadoop/dfs/data
mkdir /usr/local/hadoop/dfs/name

 

4.2.4 编辑mapred-site.xml文件

 复制mapred-site.xml.template并重命名为mapred-site.xml

cp mapred-site.xml.template mapred-site.xml

修改文件内容

vi mapred-site.xml

添加以下内容

其中Master为计算机名

<configuration>
<property>  
   <name>mapreduce.framework.name</name>  
   <value>yarn</value>  
 </property>  
 <property>  
  <name>mapreduce.jobhistory.address</name>  
  <value>Master:10020</value>  
 </property>  
 <property>  
  <name>mapreduce.jobhistory.webapp.address</name>  
  <value>Master:19888</value>  
 </property>  
</configuration>

 

4.2.5 编辑yarn-site.xml文件

cp yarn-site.xml.template  yarn-site.xml

 修改文件内容 

vi yarn-site.xml

 其中Master为计算机名

<configuration>
<!-- Site specific YARN configuration properties -->
<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>  
  <property>  
   <name>yarn.resourcemanager.address</name>  
   <value>Master:8032</value>  
  </property>  
  <property>  
   <name>yarn.resourcemanager.scheduler.address</name>  
   <value>Master:8030</value>  
  </property>  
  <property>  
   <name>yarn.resourcemanager.resource-tracker.address</name>  
   <value>Master:8035</value>  
  </property>  
  <property>  
   <name>yarn.resourcemanager.admin.address</name>  
   <value>Master:8033</value>  
  </property>  
  <property>  
   <name>yarn.resourcemanager.webapp.address</name>  
   <value>Master:8088</value>  
  </property>  
</configuration>

 

4.2.6编辑workersl文件

修改worker、Slave文件   

cd /usr/local/hadoop/etc/hadoop
ls

修改文件内容

vi ./workers

添加以下内容

Slave01
Slave02

 

五、集群各个节点间配置同步

5.1 方法一:传输后逐一配置

配置好后,将 Master 上的 /usr/local/hadoop 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Master 节点上执行:

cd /usr/local
sudo rm -r ./hadoop/tmp                                                  # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*                                                 # 删除日志文件
tar -zcf ~/hadoop.Master.tar.gz ./hadoop                           # 先压缩再复制
scp ~/hadoop.Master.tar.gz Slave01:/home/hadoop        #同步

在 Slave01 节点上执行:

sudo rm -r /usr/local/hadoop                         # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.Master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

同样,如果有其他 Slave 节点,也要执行将 hadoop.Master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。

 

5.2 方法二:主节点直接同步配置(推荐)

hadoop配置集群,可以将配置文件/usr/local/hadoop下内容同步到其他机器上,既无需再一个个配置。

每个Slave节点执行,赋予写入权限

sudo chmod 777 /usr/local

Master 执行

sudo scp -r usr/local/hadoop hadoop@Slave01:/usr/local
sudo scp -r usr/local/hadoop hadoop@Slave02:/usr/local

 

六、Hadoop启动

6.1首次启动

首次启动需要先在 Master 节点执行 NameNode 的格式化:

hdfs namenode -format                          #首次运行需要执行初始化,之后不需要

 

6.2启动 hadoop 集群

接着可以启动 hadoop 了,启动需要在 Master 节点上进行:

/usr/local/hadoop/sbin/start-dfs.sh           #启动dfs文件系统
/usr/local/hadoop/sbin/start-yarn.sh      #启动yarn集群管理系统

mr-jobhistory-daemon.sh start historyserver

 或者

/usr/local/hadoop/sbin/start-all.sh              #启动两个系统

 

6.3 命令jps

jps可以查看各个节点所启动的进程。

正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程;在 Slave 节点可以看到 DataNode 和 NodeManager 进程。

缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令

hdfs dfsadmin -report

 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。

 

6.4 关闭 Hadoop 集群

关闭 Hadoop 集群也是在 Master 节点上执行的:

/usr/local/hadoop/sbin/stop-yarn.sh          #停止yarn集群管理系统
/usr/local/hadoop/sbin/stop-dfs.sh           #停止dfs文件系统
mr-jobhistory-daemon.sh stop historyserver

或者

/usr/local/hadoop/sbin/stop-all.sh       #停止两个系统

 

此外,也可以不启动 YARN,但要修改 mapred-site.xml 的文件名。

 

posted @ 2021-08-31 14:44  Theext  阅读(501)  评论(0)    收藏  举报