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 的文件名。