Day02 Hadoop分布式集群搭建步骤
一、安装jdk和hadoop环境二、配置集群前的准备工作三、Hadoop节点分配四、配置HDFS
core-site.xmlhdfs-site.xml(与core-site.xml在同级目录)mapred-site.xml(同目录)yarn-site.xml(同级目录)配置同步 五、集群启动与关闭六、其他配置
配置免密登录not set 报错解决使用群起、群闭 七、脚本记录
myjpsstart-clustertongshitongbu
一、安装jdk和hadoop环境本文所描述的分布式集群搭建步骤可以使用虚拟机进行同样也可以使用云服务器的方式进行,所以需要有一些准备工作,
虚拟机软件(可以使用VMware Workstation Pro)同一内网的云服务器(相互可以内部ping通)
以上两个二选一即可。
详细步骤:
安装centos7.5系统(实际笔者建议安装server版本,节约些内存)
这个自己选择进行安装,配置好密码。笔者将在文末提供ISO的链接。
使用root权限登录系统,在根目录下的opt目录中创建两个目录,一个soft,另一个module。Soft目录用于存放压缩文件,module目录用于存放解压后的文件。
mkdir /opt/soft /opt/module
上传JDK以及Hadoop的压缩包到/opt/soft(注意:现目前用户是否是root用户)
如果使用虚拟机并centos为桌面版的话可以直接从windows拖入虚拟机内linux中,如果是云服务器或server版本centos的话可以使用MobaXterm进行ssh连接,该软件自带Sftp功能,可以直接拖入文件到linux中。
将JDK以及Hadoop解压到module中。
tar -zxvf /opt/soft/jdk-8u121-linux-x64.tar.gz -C /opt/module tar -zxvf /opt/soft/hadoop-3.1.3.tar.gz -C /opt/module
配置环境变量,在/etc/profile最后添加以下内容:
vim /etc/profile
按字母i
箭头调整光标到最后输入
JAVA_HOME=/opt/module/jdk1.8.0_121 HADOOP_HOME=/opt/module/hadoop-3.1.3 PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export JAVA_HOME HADOOP_HOME PATH
按ESC后输入wq!保存退出
source /etc/profile
创建一个新用户(如果已经存在新用户,该步骤可以省略)
useradd tgmmmmmmmm(你想要的用户名) passwd tgmmmmmmmm(为你的用户创建密码)
给该用户root权限
vim /etc/sudoers
关闭防火墙
systemctl stop firewalld 停止防火墙 systemctl disable firewalld 永久禁止防火墙开机自启
把opt目录下soft目录以及module目录交给普通用户*(我的是tgmmmmmmmm)*
chown -R tgmmmmmmmm:tgmmmmmmmm /opt/soft /opt/module
克隆虚拟机,保证至少有三台机器运行
保证3台机器能够相互通信,也就是需要配置/etc/hosts,在此之前,需要把主机名更改为不同名字,如hadoop101,hadoop102,hadoop103。
(1)最好配置为静态分配IP,避免因为虚拟机被分配IP改变重新配置,见文章**linux下设置静态ip**。
(2)更改主机名的文件在/etc/hostname,将原有名字全部删除,并写入新的名字,保存并退出,再重启。
(3)将每台机器的ip地址复制,粘贴到/etc/hosts文件中,并在后方写入对应的主机名,如下图:
- 集群的三大框架:
- 如何避免单点故障:只需要咱们合理的分配节点在集群的机器中(均衡搭配)。
Hadoop101: namenode datanode nodemanager
Hadoop102: resourcemanager datanode nodemanager
Hadoop103: secondarynamenode datanode nodemanager
也就是说,namenode作为hdfs的关键,放置在了hadoop101,而resourcemanager作为yarn的关键,放置在了hadoop102.
四、配置HDFS core-site.xml- 要启动HDFS,首先需要配置core-site.xml文件
(该文件位于/opt/module/hadoop-3.1.3/etc/hadoop/)
在文件中的标签中添加以下配置
fs.defaultFS hdfs://hadoop101:8020 hadoop.tmp.dir /opt/module/hadoop-3.1.3/data hadoop.http.staticuser.user tedu hadoop.proxyuser.tedu.hosts * hadoop.proxyuser.tedu.groups *
**格式化namenode(**自动创建hadoop临时目录)
hadoop namenode -format
启动namenode和datanode节点(启动hdfs)
hadoop-daemon.sh start namenode hadoop-daemon.sh start datanode
mapred-site.xml(同目录)dfs.namenode.http-address hadoop101:9870 dfs.namenode.secondary.http-address hadoop103:9868
yarn-site.xml(同级目录)mapreduce.framework.name yarn mapreduce.jobhistory.address hadoop102:10020 mapreduce.jobhistory.webapp.address hadoop102:19888
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop102
yarn.nodemanager.env-whitelist
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
yarn.scheduler.minimum-allocation-mb
1024
yarn.scheduler.maximum-allocation-mb
4096
yarn.nodemanager.resource.memory-mb
4096
yarn.nodemanager.pmem-check-enabled
false
yarn.nodemanager.vmem-check-enabled
false
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop102:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
配置同步
将三台电脑配置同步一下
rsync -av /opt/module/…/core-site.xml tgm@hadoop102:/opt/module/.../五、集群启动与关闭
a) 启动:
i. Hadoop101命令:
1. hadoop-daemon.sh start namenode
2. hadoop-daemon.sh start datanode
3. yarn-daemon.sh start nodemanager
ii. Hadoop102命令:
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
yarn-daemon.sh start resourcemanager
iii. Hadoop103命令:
hadoop-daemon.sh start secondarynamenode
yarn-daemon.sh start nodemanager
hadoop-daemon.sh start datanode
b)停止:
就是把启动命令中的start替换成stop
六、其他配置 配置免密登录使用ssh算法
ssh-keygen -t rsa
本机免密登录其他主机
ssh-copy-id tgm@hadoop102
如果配置了java_home还是显示not set的话 就在hadoop/etc/hadoop/下的hadoop.env.sh配置中重新配置一下java_home的路径。
使用群起、群闭hadoop中本身具有群起群闭的命令可以用,首先配置workers同样在hadoop的etc中,加入三台主机即可
后续使用start-dfs.sh即可
虽然有hadoop的群起群闭命令,但是我们还想查看一下整个系统的运行状态,我们可以自己编写脚本进行命令封装,同时也可以把文件同步,和三机同时执行命令一起封装了。
myjps可以用该命令看三台机器的运行状况
#!/bin/bash
echo "jps is run..."
for i in hadoop101 hadoop102 hadoop103
do
echo "-----------$i-----------"
ssh $i "source /etc/profile;jps"
done
start-cluster
该命令可以启动集群
#!/bin/bash echo -e "n--------------------TgM@Copyright-------------------" echo -e "n--------------------start cluster-------------------" echo -e "n-------------------- start hdfs -------------------" echo -e "n-------------------start hadoop101 namenode---------" hadoop-daemon.sh start namenode echo -e "n-------------------start hadoop101 datanode---------" hadoop-daemon.sh start datanode echo -e "n-------------------start hadoop102 datanode---------" ssh tgm@hadoop102 "source /etc/profile;hadoop-daemon.sh start datanode" echo -e "n-------------------start hadoop103 datanode---------" ssh tgm@hadoop103 "source /etc/profile;hadoop-daemon.sh start datanode" echo -e "n-------------------start hadoop103 secondarynamenode---------" ssh tgm@hadoop103 "source /etc/profile;hadoop-daemon.sh start secondarynamenode" echo -e "n--------------------finish hdfs --------------------" echo -e "n-------------------- start yarn --------------------" echo -e "n-------------------start hadoop101 nodemanager---------" yarn-daemon.sh start nodemanager echo -e "n-------------------start hadoop102 resourcemanager---------" ssh tgm@hadoop102 "source /etc/profile;yarn-daemon.sh start resourcemanager" echo -e "n-------------------start hadoop102 nodemanager---------" ssh tgm@hadoop102 "source /etc/profile;yarn-daemon.sh start nodemanager" echo -e "n-------------------start hadoop103 nodemanager---------" ssh tgm@hadoop103 "source /etc/profile;yarn-daemon.sh start nodemanager" echo -e "n--------------------finish yarn --------------------" echo -e "n--------------------finish cluster------------------" myjps
最后这个myjps是使用了上述自己编写的命令,如果想要不输入路径直接使用的话,需要将命令写在一个配置到环境变量中的文件夹中。
tongshi该脚本会在三台机器中执行任意同一条命令。
#!/bin/bash
if (($#==0)); then
echo "nothing to do";
exit
fi
echo --------------------$*----------------------
for i in hadoop101 hadoop102 hadoop103
do
echo ---------------------$i-------------------
ssh $i "$@"
tongbu
该脚本位于101机器,实现效果:就算我们输入的路径是相对路径,该脚本也能识别为绝对路径,并且发放到102以及103机器中的同一目录下。
#!/bin/bash pcount=$# if((pcount==0));then echo "nothing to do"; exit; fi p1=$1 fname=`basename $p1` echo fname=$fname pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir user=`whoami` for i in hadoop101 hadoop102 hadoop103; do echo --------------- $i ---------------- rsync -av $pdir/$fname $user@$i:$pdir done
于101机器,实现效果:就算我们输入的路径是相对路径,该脚本也能识别为绝对路径,并且发放到102以及103机器中的同一目录下。
#!/bin/bash pcount=$# if((pcount==0));then echo "nothing to do"; exit; fi p1=$1 fname=`basename $p1` echo fname=$fname pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir user=`whoami` for i in hadoop101 hadoop102 hadoop103; do echo --------------- $i ---------------- rsync -av $pdir/$fname $user@$i:$pdir done



