一、安装VMware
二、centos的安装
最好安装centos x7的
centos的安装
三、根据hadoop伪分布式的搭建,完全分布式使用hadoop104克隆出来的hadoop101,hadoop102,hadoop103来设置集群。
(一)、同时启动hadoop101,102,103。
(二)、对主机进行改动
1.将其ip地址改动为
ip addr # 查看IP地址
vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 修改ip地址
将其修改为:
192.168.30.101 # 对应的hadoop的名字
修改IP地址后需要重启网卡
systemctl resert network
2.对主机名进行修改
vi /etc/hostname # 修改为对应的hadoop名称
vi /etc/hosts
在其后面添加
192.168.30.101 hadoop101
192.168.30.102 hadoop102
192.168.30.103 hadoop103 ###方便启动集群
显示主机名称需要重启
3.连接Xshell
主机名写入IP地址,名称写为自己想弄的名称
(三)、使用Xshell
本实验着重使用hadoop101
1.时间同步
进入/opt/module/hadoop2.7.2目录下进行操作
1)检查ntp的安装
rpm -qa|grep ntp
其版本如下
如果没有或者不全的需要重新安装,否则不能配置文件
安装命令如下:
yum install ntp
2)修改ntp配置文件
vi /etc/ntp.conf
修改一(授权192.168.30.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间):
将第二行restrict前面的#符号删除,并将192.168.30.1.0改为192.168.30.0
修改二(集群在局域网中,不使用其他互联网上的时间):
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
将其前面全部添加#。
修改三(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步):
在修改二的基础上,在其下边添加:
server 127.127.1.0
fudge 127.127.1.0 stratum 10
3)修改/etc/sysconfig/ntpd文件
在其下面添加代码(使硬件时间与系统时间同步):
SYNC_HWCLOCK=yes
4)重启ntp服务
systemctl enable ntpd
systemctl disable chronyd ## 设置ntpd服务开机关闭
5)其他配置
crontab -e
编写定时任务:
在其他机器配置10分钟与时间服务器同步一次
(10分钟可能时间太长,可以自定义,不能是0)
*/10 * * * * /usr/sbin/ntpdate hadoop102
*/10 * * * * /usr/sbin/ntpdate hadoop103
6)修改机器任意时间date -s "2022-4-9"
输入date查看时间
如果想一劳永逸,就对hadoop102和hadoop103做同样的配置,只有编写定时任务需要改写
2.免密登录
1)进入.ssh目录下cd .ssh
如果报错,则需要输入ssh root@192.168.30.101
2)生成公匙和私匙ssh-keygen -t rsa
执行上述命令后,敲击回车,直到输出密匙为止(可能是三次,也可能是四次)
3)公匙的拷贝cat id_rsa.pub >>authorized_keys
拷贝到authorized_keys文件中,这样实现了自身的免密登录。想测试的话输入:ssh hadoop101
,再执行命令exit
退出。如果不能成功需要修改authorized_keys文件的权限。
4)修改authorized_keys文件的权限
chmod 600 authorized_keys
5)使用hadoop101对hadoop102和hadoop103进行免密登录
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop102
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop103
执行命令后需要输入密码。
同样的配置在hadoop102和hadoop103中实行,就能实现三个主机之间的两两进行免密登录。
【注】:在进行免密登录后一定要进行退出命令。
(三)、对jdk和hadoop的安装
1.安装jdk
1)对系统自带的jdk版本进行删除
.noarch结尾的文件可以不用删除。
rpm -qa|grep java # 查找系统自带的jdk
执行命令
rpm -e --nodeps 要删除的jdk文件
删除后可以使用命令java -version
进行查询,是否删除完全
2)在网上下载的jdk压缩包使用rz工具进行上传,还是上传到/opt/source文件夹下
tar -zxvf jdkTAB键 # 对压缩包进行解压
mv jdk1.8.131/ jdk1.8 #修改名称
mv jdk1.8 ../module # 将jdk移动到module目录下,
3)安装hadoop也同安装jdk一样
4)配置文件vi /etc/profile
在最后进行添加
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
##HADOOP_HOME (HADOOP后面安装用到)
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
5)修改 vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
文件
export JAVA_HOME=${JAVA_HOME}
修改为
export JAVA_HOME=/opt/module/jdk1.8
使用命令source /etc/profile
命令使配置的环境生效
6)检查hadoop是否配置成功
mkdir input
cp etc/hadoop/*.xml input
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
输出代码
cat output/*
输出结果为
1 dfsadmin
(四)编写集群脚本
1.编写脚本
cd /usr/local/bin
touch xsync.sh
vi xsync.sh
执行上述命令后,输入以下代码
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=102; host<104; host++)); do
#echo $pdir/$fname $user@hadoop$host:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
2.修改xsync权限chmod 777 xsync.sh
(五)、集群部署
配置的文件都在/opt/module/hadoop-2.7.2/etc/hadoop目录下
配置的文件都写在之间。
1.配置core-site.xml文件
vi core-site.xml
添加以下代码
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
2.配置hadoop-env.sh文件export JAVA_HOME=/opt/module/jdk1.8
3.配置hdfs-site.xml文件
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
4.配置slaves文件
源文件中的内容删除之后,在其后面添加
hadoop101
hadoop102
hadoop103
5.配置vi yarn-env.sh文件
去掉export JAVA_HOME前面的#,修改为export JAVA_HOME=/opt/module/jdk1.8
6.配置yarn-site.xml文件
添加如下代码
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
7.修改vi mapred-env.sh文件
去掉前面的#符号,并修改为export JAVA_HOME=/opt/module/jdk1.8
8.修改mapred-site.xml文件
目录下没有mapred-site.xml文件,要将mapred-site.xml.template文件拷贝一份,并命名修改为mapred-site.xml文件
编辑mapred-site.xml文件,添加代码如下:
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
至此,文件和主机配置已成功设置
现在需要对文件进行分发
退出目录至/opt/文件夹下,将module文件夹下的配置一并分发
如果已经配置好了的免密登录,可以简化:
scp -r module hadoop102:/opt #分发文件至hadoop102
scp -r module hadoop103:/opt #分发文件至hadoop103
如果没有配置免密登录可能会用的代码:
scp -r module root@192.168.30.102:/opt
scp -r module root@192.168.30.103:/opt
三、启动集群
1.格式化namenode
进入/opt/module/hadoop2.7.2目录下,
bin/hdfs namenode -format # 格式化namenode
2.启动集群hadoop101和hadoop103启动命令是一样的
启动hadoop101和103
sbin/start-dfs.sh
启动hadoop102
sbin/start-yarn.sh
启动集群后,输入命令jps
hadoop101启动的结果是:
hadoop102的启动结果是
hadoop103启动的结果是:
八、在集群上测试一个jar包,单词统计功能
进入hadoop101中的/opt/module/hadoop2.7.2目录下
touch word.txt
vi word.txt
输入
小明 小张 小李 小明
张三 王五 张三 小李
在根hadoop2.7.2目录下创建一个创建一个文件夹
bin/hdfs dfs -mkdir /input
把word.txt文件上传到服务器中的input文件夹中
bin/hdfs dfs -put ./word.txt /input
查看是否上传成功
bin/hdfs dfs -ls /input
执行统计功能
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
执行命令后就在根目录下hadoop2.7.2创建了一个output文件夹,里面有两个内容。
bin/hdfs dfs -ls /output
输出output文件夹下文件的内容
bin/hdfs dfs -cat /output/*
至此,已经完全配置成功了!!!
非常感谢您的观看!!!