Hadoop集群搭建(超级超级详细)
1、集群规划
安装VMware,使用三台 Ubuntu18.04 虚拟机进行集群搭建,下面是每台虚拟机的规划:
| 主机名 | IP | 用户 | HDFS | YARN |
|---|---|---|---|---|
| hadoopWyc | 待定 | wyc | NameNode、DataNode | NodeManager、ResourceManager |
| hadoopWyc2 | 待定 | wyc | DataNode、SecondaryNameNode | NodeManager |
| hadoopWyc3 | 待定 | wyc | DataNode | NodeManager |
2、网络配置
先登入root用户,后面都在root用户下操作。
su root #登入root用户
还没设置root用户密码的参考 Ubuntu18.04设置root密码(初始密码)
2.1 修改主机名
vim /etc/hostname #修改文件
2.2 查看虚拟机网络信息
2.2.1 点击VMware的编辑里的虚拟网络编辑器

2.2.2 选择VMnet8网络,点击NAT设置


记录上面图中子网掩码、网关,加上前面的IP地址三个属性,这些在后面的步骤有用,不同的电脑会有不同。
2.2.3 获取Ubuntu虚拟机的网卡编号
ifconfig

2.2.4 设置静态网络
vim /etc/network/interfaces
在原有的内容上添加
auto ens33 # 网卡编号,我这里是ens33 iface ens33 inet static # 设置为静态IP address 192.168.153.136 # 该机器的IP,就是我们登录后显示的那个IP 地址 netmask 255.255.255.0 # 子网掩码,刚才获取VMware的子网掩码 gateway 192.168.153.2 # 网关,也是刚才获取的网关 dns-nameserver 192.168.153.2 # DNS,和网关一样即可

上面的内容根据各自的电脑进行设置,一定要和VMware中的子网IP、子网掩码、网关保持一致,不然会上不了网。保存退出vim编辑器,重启Ubuntu即可生效。
3、安装 ssh 服务端
apt-get install openssh-server
ssh localhost
补充:ssh localhost = ssh
<当前用户>
@localhost -p 22 -i ~/.ssh/id_rsa
当前用户>
exit # 退出ssh localhost cd ~/.ssh/ ssh-keygen -t rsa # 会有提示,都按回车就行 cat ./id_rsa.pub >> ./authorized_keys # 加入授权

现在再使用”ssh localhost”,就可以不用输入密码登录ssh

4、安装Java环境
Hadoop3.1.3需要JDK版本在1.8及以上,点击右边链接可以下载符合版本的JDK:jdk-8u162-linux-x64.tar.gz(提取码:ik9p)。
- Xshall用root登录,再打开Xftp(这样Xftp也是root用户打开,拥有所有权限),可是Xshall用root登录虚拟机会连接不上,参考:Xshell用root用户连接Linux 可以解决
- 参考:Xftp 传文件到虚拟机一直显示状态错误,传不进去
将文件放在随便一个目录中后,执行下面命令:
cd /usr/lib mkdir jvm # 创建目录来存放JDK文件
然后再进入 jdk-8u162-linux-x64.tar.gz 所在的文件夹解压JDK到刚才创建的 jvm 文件夹
tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm #解压JDK到刚才创建的jvm文件夹
将JDK文件解压之后,进入/usr/lib/jvm目录下会有个jdk1.8.0_162文件,下面我们开始设置环境变量
vim ~/.bashrc
在打开的文件首部添加下面内容
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162 export JRE_HOME=${
JAVA_HOME}/jre export CLASSPATH=.:${
JAVA_HOME}/lib:${
JRE_HOME}/lib export PATH=${
JAVA_HOME}/bin:$PATH
保存退出vim编辑器,执行下面命令让.bashrc文件的配置生效:
source ~/.bashrc
接下来使用下面命令查看是否安装成功:
java -version
5、安装Hadoop3.1.3
hadoop-3.1.3.tar.gz (提取码: x2vu)可以在这点击下载,将其下载并上传到相应的位置上,使用下面命令安装,也要和安装Java一样给文件夹权限:
tar -zxvf hadoop-3.1.3.tar.gz -C /usr/local # 解压到/usr/local中 cd mv ./hadoop-3.1.3/ ./hadoop # 将文件名改为hadoop sudo chown -R rmc0924 ./hadoop # 修改权限,当前是什么用户登录,就给他赋予用户的权限
解压后使用下面命令看是否安装成功,安装成功会显示Hadoop的版本信息。
cd /usr/local/hadoop ./bin/hadoop version
6、克隆虚拟机
| 主机名 | IP | 用户 | HDFS | YARN |
|---|---|---|---|---|
| hadoopWyc | 192.168.153.136 | wyc | NameNode、DataNode | NodeManager、ResourceManager |
| hadoopWyc2 | 192.168.153.137 | wyc | DataNode、SecondaryNameNode | NodeManager |
| hadoopWyc3 | 192.168.153.138 | wyc | DataNode | NodeManager |
7、三台虚拟机都加上主机IP映射
打开hosts文件,新增三条IP与主机的映射关系:
vim /etc/hosts
8、集群搭建
现在正式搭建Hadoop集群。首先我们还是需要打开VMware中的三台虚拟机,然后用Xshall连接好三台虚拟机就行了。
8.1 SSH无密码登录节点
必须要让hadoopWyc节点可以SSH无密码登录到各个hadoopWyc2和hadoopWyc3节点上。首先生成hadoopWyc节点公钥,如果之前已经生成,必须删除,重新生成一次。在hadoopWyc上进行下面操作:
cd ~/.ssh rm ./id_rsa* # 删除之前生成的公钥 ssh-keygen -t rsa # 遇到信息,一直回车就行

再让hadoopWyc节点能够无密码SSH登录本机,在hadoopWyc节点上执行下面命令:
cat ./id_rsa.pub >> ./authorized_keys
使用下面命令进行测试:
ssh hadoopWyc
接下来将hadoopWyc上的公钥传给各个hadoopWyc2&3节点:
scp ~/.ssh/id_rsa.pub hadoopWyc2:/home/wyc scp ~/.ssh/id_rsa.pub hadoopWyc3:/home/wyc
mkdir ~/.ssh # 如果不存在该文件夹,先创建 cat /home/wyc/id_rsa.pub >> ~/.ssh/authorized_keys rm /home/wyc/id_rsa.pub # 加完就删除
在hadoopWyc3节点中也执行以上的命令。执行完了之后,在hadoopWyc节点上就可以无密码登录hadoopWyc2&3节点,在hadoopWyc节点上执行下面命令:
ssh hadoopWyc2
8.2 配置集群环境
配置集群模式时,需要修改“/usr/local/hadoop/etc/hadoop”目录下的配置文件,包括workers、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。
8.2.1 修改workers文件
vim workers
该文件内容可以指定某几个节点作为数据节点,默认为localhost,我们将其删除并修改为hadoopWyc2和hadoopWyc。当然也可以将hadoopWyc加进去,让hadoopWyc节点既做名称节点,也做数据节点,本文将hadoopWyc一起加进去作为数据节点。
hadoopWyc hadoopWyc2 hadoopWyc3
8.2.2 修改core-site.xml文件
vim core-site.xml
fs.defaultFS
hdfs://hadoopWyc:9000
hadoop.tmp.dir
file:/usr/local/hadoop/tmp
8.2.3 修改hdfs-site.xml文件
vim hdfs-site.xml
dfs.namenode.secondary.http-address
hadoopWyc2:50090
dfs.replication
3
dfs.namenode.name.dir
file:/usr/local/hadoop/tmp/dfs/name
dfs.datanode.data.dir
file:/usr/local/hadoop/tmp/dfs/data
8.2.4 修改mapred-site.xml文件
vim mapred-site.xml
mapreduce.framework.name
yarn
mapreduce.jobhistory.address
hadoopWyc:10020
mapreduce.jobhistory.webapp.address
hadoopWyc:19888
yarn.app.mapreduce.am.env
HADOOP_MAPRED_HOME=/usr/local/hadoop
mapreduce.map.env
HADOOP_MAPRED_HOME=/usr/local/hadoop
mapreduce.reduce.env
HADOOP_MAPRED_HOME=/usr/local/hadoop
8.2.5 修改yarn-site.xml文件
vim yarn-site.xml
yarn.resourcemanager.hostname
hadoopWyc
yarn.nodemanager.aux-services
mapreduce_shuffle
8.3 分发文件
修改完上面五个文件后,将hadoopWyc节点上的hadoop文件复制到各个结点上。在hadoopWyc节点上执行下面命令:
cd /usr/local sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件 sudo rm -r ./hadoop/logs/* # 删除日志文件 tar -zcf ~/hadoop.master.tar.gz hadoop # 先压缩再复制 cd ~ scp hadoop.master.tar.gz hadoopWyc2:/home/ scp hadoop.master.tar.gz hadoopWyc3:/home/

在其他hadoopWyc2&3节点将接收的压缩文件解压出来,并授予权限,命令如下:
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在) sudo tar -zxf /home/hadoop.master.tar.gz -C /usr/local sudo chown -R wyc /usr/local/hadoop

8.4 Hadoop初始化
HDFS初始化只能在主节点上进行
cd /usr/local/hadoop ./bin/hdfs namenode -format

在初始化过程中,只要看到上面红框里面的信息,有个successfully formatted说明初始化成功。
8.5 Hadoop集群启动
在hadoopWyc节点上执行下面命令:
cd /usr/local/hadoop ./sbin/start-dfs.sh ./sbin/start-yarn.sh ./sbin/mr-jobhistory-daemon.sh start historyserver #这样我们就可以在相应机器的19888端口上打开历史服务器的WEB UI界面。可以查看已经运行完的作业情况

通过jps可以查看各个节点所启动的进程,如果按照本文的设置,正确启动的话,在hadoopWyc节点上会看到以下进程:

hadoopWyc2节点的进程:

hadoopWyc3节点的进程:
hadoop-3.1.0启动hadoop集群时还有可能会报如下错误:
root@hadoopWyc3:/usr/local/hadoop# ./sbin/start-dfs.sh Starting namenodes on [hadoopWyc] ERROR: Attempting to operate on hdfs namenode as root ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes ERROR: Attempting to operate on hdfs datanode as root ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation. Starting secondary namenodes [hadoopWyc2] ERROR: Attempting to operate on hdfs secondarynamenode as root ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
参考:解决 Hadoop 启动 ERROR: Attempting to operate on hdfs namenode as root 的方法 解决
至此,Hadoop的完全分布式部署已经完成。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219835.html原文链接:https://javaforall.net
