大数据 | Hadoop集群搭建(完全分布式)
Posted 初心%
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据 | Hadoop集群搭建(完全分布式)相关的知识,希望对你有一定的参考价值。
知识目录
一、前言
大家好,我是初心,这篇文章是我历时三天,推翻重做两小时进行搭建的Hadoop集群(完全分布式)个人笔记和感想,收录于初心的《大数据》专栏。
🏠 个人主页:初心%个人主页
🧑 个人简介:大家好,我是初心,一名正在努力的双非二本院校计算机专业学生
💕 座右铭:理想主义的花,终究会盛开在浪漫主义的土壤里!🍺🍺🍺
💕欢迎大家:这里是CSDN,我记录知识的地方,喜欢的话请三连,有问题请私信😘
在集群搭建期间我经历了各种各样的错误,困难和BUG,不过都被我收割了。成功搭建之后,为了加深对Hadoop集群环境搭建的理解,我决定推翻重做,这次重做的过程就顺利多了!终于,历时两小时,我再次搭建好了Hadoop环境,而这篇文章就是我两次搭建总结出来的方法,分享出来希望能帮助到大家。
二、配置三台虚拟机
2.1 克隆三台虚拟机
先从一台虚拟机克隆出三台虚拟机,作为搭建Hadoop完全分布式的三个节点。这里我的三个节点分别叫 hadoop102 hadoop103 hadoop104,克隆这里需要注意的地方:
虚拟机要是关机状态才可以克隆
从虚拟机当前状态克隆
创建完整克隆,之后填写虚拟机名称和存放位置就好
2.2 配置克隆的虚拟机
- 修改网络配置文件
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 修改主机名
sudo vim /etc/hostname
- 修改客户机内容
sudo vim /etc/hosts
- 重启reboot,在另外两台虚拟机并上将步骤再重复两次
sudo reboot
- Windows配置IP和主机名对应
进入到这个文件夹下,修改hosts文件
C:\\Windows\\System32\\drivers\\etc
将这个文件拖动到桌面,使用记事本打开,进行编辑后放回覆盖原文件。
2.3 使用Xshell连接虚拟机
在xshell中新建一个连接,重复三次,分别用xshell连接上三台虚拟机
至此,创建三个虚拟机节点,以及使用Xshell连接虚拟机工作我们就做好了。这是搭建Hadoop集群前的准备工作,这里我的 hadoop102 hadoop103 hadoopp104 分别对应的ip为 192.168.10.102/103/104.
2.4 配置SSH免密登录
在搭建Hadoop集群之前,我们还要为三台虚拟机搭建免密登录,这是基础,否则后面会不断提示输入密码。这是一个繁琐的操作,因此配置了免密之后我们就可以省略这些步骤,节省时间。
- 使用hadoop102登录hadoop102
ssh localhost
接下来会提示问题,输入yes就好,之后输入本机的密码,就可以连接上本机。我们登录本机的目的是在 home 目录下生成 .ssh 隐藏文件夹,以便进行下一步操作,下面退出刚才的登录。
exit
进入到ssh文件夹(centos-1是我的普通用户名,如果虚拟机只有root用户,一定要创建一个普通用户,否则找不到这个文件夹)。
cd /home/centos-1/.ssh/
- 在ssh文件夹下生成私钥
执行下面的命令生成本机的私钥
ssh-keygen -t rsa
执行完这个命令之后,查看当前文件夹的文件,可以看到多出这两个文件
- 公私钥对拷
执行下面的命令,将Hadoop102的私钥拷贝到Hadoop102 Hadoop103 Hadoop104上
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
最后,在Hadoop103,Hadoop104上重复上面的步骤,这样就能实现三台机器之前的相互免密登录。
思考:root用户进行免密登录需不需要输入密码?
答案是要。因为root用户下的.ssh文件夹和普通用户是不一样的,如果想要在 root 用户下还能免密登录,也要重复上面的步骤,个人认为hadoop102的root用户配置了免密就可以了,其他的两台也可以配置
三、Hadoop集群准备
3.1 安装 rsync
安装同步工具rsync,这是安装xsync脚本的基础
sudo yum install -y rsync
3.2 安装xsync分发脚本
- 查看环境变量
echo $PATH
- 进入到在PATH中的一个目录
cd /usr/local/bin
- 复制下面的分发脚本 xsync.sh ,再使用下面的命令创建xsync文件并粘贴,保存退出
sudo vim xsync
- 分发脚本xsync.sh
#! /bin/bash
# 1.判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Argument!
exit;
fi
# 2.遍历所有集群机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ===================
# 3.遍历所有目录,挨个发送
for file in $@
do
# 4.判断文件是否存在
if [ -e $file ]
then
# 5.获取父目录
pdir=$(cd -P $(dirname $file); pwd)
# 6.获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
- 授予可执行权限
sudo chmod 777 xsync
至此,虚拟机的任意目录就可以使用xsync命令。如果不可以使用,则证明安装失败,请仔细检查。
3.3 安装JDK和安装Hadoop
- 进入centos操作目录
cd /opt
- 创建JDK和Hadoop的压缩包存放目录和文件存放目录
sudo mkdir module
sudo mkdir software
在Xshell中通过Xftp文件上传工具(或者lrzsz、finalShell等),上传JDK和Hadoop的压缩包到software目录
- 解压JDK和Hadoop到module目录
tar -xzvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
tar -xzvf hadoop-3.1.3.tar.gz -C /opt/module/
3.4 配置环境变量
- 进入到/etc/profile.d文件夹
cd /etc/profile.d
- my_env.sh文件
# JAVA_HOME
# 只需修改java_home 因人而异 是自己的jdk安装目录
export JAVA_HOME=/opt/module/jdk1.8.0_202
export PATH=$PATH:$JAVA_HOME/bin
# HADOOP_HOME
# 同理 这里只需修改Hadoop_home,是Hadoop安装目录
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
# 这里是centos-1是用户名 因人而异 改为自己的虚拟机的普通用户名或root
export HDFS_NAMENODE_USER=centos-1
export HDFS_DATANODE_USER=centos-1
export HDFS_SECONDARYNAMENODE_USER=centos-1
export YARN_RESOURCEMANAGER_USER=centos-1
export YARN_NODEMANAGER_USER=centos-1
- 新建文件my_env.sh,将my_env.sh文件内容复制进来
sudo vim my_env.sh
- 刷新环境变量
source /etc/profile
- 测试环境变量是否配置成功
java
hadoop
如果输出一大片信息说明配置好了
3.5 分发
使用xsync将hadoop102的jdk、Hadoop以及环境变量分发到另外两台虚拟机上。
- 分发JDK和Hadoop
xsync /opt/module/
- 分发环境变量
xsync /etc/profile.d/my_env.sh
四、Hadoop集群搭建
4.1 修改配置文件
首次搭建Hadoop完全分布式,要分别修改下面四个文件,这里仅展示configuration标签内的内容。
首先进入到Hadoop的etc目录的hadoop目录
cd /opt/module/hadoop-3.1.3/etc/hadoop/
vim core-site.xml
core-site.xml
<configuration>
<!--指定NameNode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
<description>version of this configuration file</description>
</property>
<!-- 指定Hadoop数据的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
vim mapred-site.xml
mapred-site.xml
<configuration>
<!-- 指定MapReduce程序运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3</value>
</property>
</configuration>
vim hdfs-site.xml
hdfs-site.xml
<configuration>
<!-- nn Web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
<description>
The address and the base port where the dfs namenode web ui will listen on.
</description>
</property>
<!-- 2nn Web端访问地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
</configuration>
vim yarn-site.xml
yarn-site.xml
<configuration>
<!--指定MR走shuffle-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!--环境变量的继承-->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
修改完成之后,退出到hadoop目录
cd /opt/module/hadoop-3.1.3/etc
执行分发,将etc下的hadoop目录的四个配置文件同步
xsync hadoop
4.2 配置workers
进入到配置文件目录
cd /opt/module/hadoop-3.1.3/etc/hadoop/
修改workers文件,将文件内容改成三台主机名即可,之后再次分发,将修改同步。
vim workers
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
4.3 格式化集群
在hadoop102上进行格式化
hdfs namenode -format
至此,Hadoop完全分布式(集群)就搭建好了。
4.4 启动集群
下面这张图就是我们搭建的Hadoop集群的集群规划。首先进入到hadoop目录
cd /opt/module/hadoop-3.1.3/
在Hadoop102启动HDFS(Hadoop分布式文件系统)
sbin/start-dfs.sh
在Hadoop103启动YARN(Hadoop资源调度管理)
sbin/start-yarn.sh
使用jps命令来查看进程,验证是否和集群规划一致。
如果按照教程来,执行jps命令得到的结果和上图不一致,请仔细检查是否哪一步出现了问题,再进行下一步。
4.5 关闭集群
首先关闭YARN,再关闭HDFS,至此,Hadoop集群搭建(完全分布式搭建)成功。
sbin/stop-yarn.sh
sbin/stop-dfs.sh
五、结语
学习是一个漫长且持续渐进的过程,其中不免遇到很多困难,有时候让你头痛,让你心慌。有人选择逃避,有人选择全力以赴,希望大家的每一天都变得充实。
✨ 这就是今天要分享给大家的全部内容了,我们下期再见!
✨ 本文由初心原创,首发于CSDN博客, 博客主页:blog.csdn.net/qq_62592360
🍻 理想主义的花,终究会盛开在浪漫主义的土壤里!
🍻 如果你喜欢的话,记得点赞收藏关注,我在CSDN等你!
hadoop完全分布式集群搭建(超详细)-大数据集群搭建
hadoop完全分布式集群搭建
本次搭建完全分布式集群用到的环境有:
jdk1.8.0
hadoop-2.7.7
本次搭建集群所需环境也给大家准备了,下载链接地址:https://share.weiyun.com/dk7WgaVk
密码:553ubk
本次完全分布式集群搭建需要提前建立好三台虚拟机,我分别把它们的主机名命名为:master,slave1,slave2
一.配置免密登陆
首先我们要实现三台虚拟机之间相互的ssh免密登陆
在master虚拟机上进行操作:
1. 创建ssh秘钥,输入如下命令,生成公私密钥,下方三个红框内都按回车键
ssh-keygen -t rsa
2.将公钥拷贝到本机实现免密登录,第一个红框位置输入yes,第二个红输位置输入自己虚拟机的登陆密码
ssh-copy-id master
跟上面的操作一样,我们在master中实现master对slave1,slave2的免密登录
ssh-copy-id slave1
ssh-copy-id slave2
同理,我们分别进入到slave1,slave2虚拟机中,进行以上同样的操作
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
三台虚拟机一共要执行3*3=9次的免密登录操作
然后我们对master虚拟机上的/etc/hosts文件进行更改,设置IP映射
vi /etc/hosts
我们将三台虚拟机的ip地址,主机名如图所示进行添加,并键入:wq 保存并退出】
同理,我们切换到slave1,slave2虚拟机中对/etc/hosts文件进行同样的修改,保存并退出
二.配置java环境
1.我们在master主机上进行java环境的配置
首先,先把虚拟机环境中的jdk压缩文件解压到/opt目录下
tar -zxvf ~/ruanjian/jdk1.8.0_221.tar.gz -C /opt
进入/opt目录,将解压文件改名为java
cd /opt
mv jdk1.8.0_221 java
接下来修改环境变量
vi /etc/profile
进入文件按下GG进入配置文件最后一行,添加如下信息:
export JAVA_HOME=/opt/java #你java路径是啥这里就填啥
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
:wq保存配置信息
然后我们生效配置信息
source /etc/profile
最后验证一下java环境是否配置成功
java -version
如图所示,正确地显示了java的版本号,就配置成功啦~
然后我们通过命令将java环境分发给slave1,slave2虚拟机中
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile
分别在slave1,slave2虚拟机中进行生效配置
ssh slave1
source /etc/profile
exit
ssh slave2
source /etc/profile
exit
三.hadoop的安装
1. 将/root/runajian下的hadoop-2.7.7.tar.gz压缩包解压到/opt目录下,并将解压文件改名为hadoop
tar -zvxf /root/ruanjian/hadoop-2.7.7.tar.gz -C /opt
mv hadoop-2.7.7 hadoop
2.修改环境变量
vim /etc/profile
3.按键Shift+g键定位到最后一行,按键 i 切换到输入模式下,添加如下代码:
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
4.按键ESC,按键:wq 保存并退出
5.生效刚刚的配置
source /etc/profile
6.同理将master的配置文件分发到slave1,slave2中
ssh slave1
source /etc/profile
exit
ssh slave2
source /etc/profile
exit
四.hadoop的配置
在/opt/hadoop/etc/hadoop里面,有六个需要配置的文件,分别为:
hadoop-env.sh
core-site.xml
yarn-site.xml
hdfs-site.xml
mapred-site.xml
slaves
1.首先在master虚拟机中,对hadoop-env.sh文件进行操作
vi /opt/hadoop/etc/hadoop/hadoop-env.sh
在配置文件中,输入25gg定位到25行,修改java环境为自己配置的java环境路径,键入:wq保存并退出
2.修改core-site.xml文件
vi /opt/hadoop/etc/hadoop/core-site.xml
进入配置文件,键入G定位到最后一行,在configuration标签内输入i命令添加以下代码:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>
3.修改hdfs-site.xml文件
vi /opt/hadoop/etc/hadoop/hdfs-site.xml
进入配置文件,键入G定位到最后一行,在configuration标签内输入i命令添加以下代码:
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/tmp/dfs/data</value>
</property>
</configuration>
4.修改yarn-site.xml文件
vi /opt/hadoop/etc/hadoop/yarn-site.xml
进入配置文件,键入G定位到最后一行,在configuration标签内输入i命令添加以下代码:
<configuration>
<property>
<name>yarn.resourcemanager.hostsname</name>
<value>master</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<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.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/user/container/logs</value>
</property>
</configuration>
5.在配置文件夹中,将模板文件mapred-site.xml.template复制一份为mapred-site.xml
cp /opt/haoop/etc/hadoop/mapred-site.xml.template /opt/haoop/etc/hadoop/mapred-site.xml
修改mapred-site.xml文件
vi /opt/hadoop/etc/hadoop/mapred-site.xml
进入配置文件,键入G定位到最后一行,在configuration标签内输入i命令添加以下代码:
<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>
6.修改slaves文件
vi /opt/hadoop/etc/hadoop/slaves
进入配置文件后按dd删除第一行内容,再键入i进入输入模式,输入slave1,sleve2
7.将配置好的hadoop文件分发至slave1,slave2虚拟机中的/opt文件夹下
scp /opt/hadoop root@slave1:/opt/
scp /opt/hadoop root@slave2:/opt/
8.格式化namenode,在master虚拟机中进行
hdfs namenode -format
9.格式化后开启集群
start-all.sh
我们分别在master,slave1,slave2虚拟机中,通过jps命令查询集群是否开启成功
jps
master界面:
slave1界面:
slave2界面:
集群开启成功后,节点会如图显示:
Master: NameNode、ResourceManager、SecondaryNameNode
slave1: DataNode、NodeManager
slave2: DataNode、NodeManager
hadoop完全分布式集群搭建到此就完毕了,如果此篇文章对你有帮助或者喜欢,记得点赞关注收藏哦~
以上是关于大数据 | Hadoop集群搭建(完全分布式)的主要内容,如果未能解决你的问题,请参考以下文章
2021年大数据Hadoop:全网最详细的Hadoop集群搭建
大数据开发基础入门与项目实战Hadoop核心及生态圈技术栈之1.Hadoop简介及Apache Hadoop完全分布式集群搭建