【分布式】Hadoop完全分布式的搭建(零基础)

海哥  金牌会员 | 2024-12-18 10:33:22 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 826|帖子 826|积分 2478

Hadoop完全分布式的搭建
环境预备:
(1)VMware Workstation Pro17(其他也可)
(2)Centos7
(3)FinalShell
(一)模型机设置

0)安装模板虚拟机,IP地址192.168.10.100、主机名称node1、内存4G、硬盘40G
网络环境及基础环境预备:
1)修改VMware的网络虚拟器:将子网ip设置在统一的字段,我统一设置为10

图片1


图片2



图片3

点击确定
(2)修改电脑的VMent8:也统一在10这个字段
在搜索栏搜索查看网络连接

图片4


找到VMnet8

图片5


右击,选择属性


图片6

单击Internet协议版本4(TCP/IPv4)

图片7

修改相应的IP地址,默认网关,和刚才虚拟机中的保持统一字段,在本文中统一为10.
添加DNS服务器如图所示

图片8


修改Centos 里的ip,将动态地址改为静态
进入到centos7,用root用户登录,修改ifcfg-ens33文件,将此中BOOTPROTO的参数从动态改为静态,并添加对应的IP,依然与刚才前两步保持统一字段

图片9

  1. vim /etc/sysconfig/network-scripts/ifcfg-ens33
复制代码

图片10

ping一下百度表示网络可用,若失败则需查抄相应的问题。网络要通才可进行后续操作。

图片11

修改主机名称为Master01
  1. vim /etc/hostname
复制代码

图片12

将文件内容改成Master01
将接下来预计要进行连接的虚拟机ip都入到场到hosts文件,根据自己必要搭建的集群数量决定,本文的Master01用于伪分布式搭建,node1,node2及node3用于完全分布式的搭建,要记录对应的ip地址,以便进行后续操作。
  1. vim /etc/hosts
复制代码

图片13

(4)连接finallshell
打开预备好的远程连接软件,我们后续将都在此进行操作,由于可直接粘贴复制和传送文件(用xshell也可),此处可用root登录也可用普通用户,后续由于yarn的使用,必要用普通用户连接。根据自己的主机ip和密码连接。

图片14


连接乐成

图片15


(5)更换阿里云镜像:执行以下下令
a.备份官方的原yum源的设置
  1. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
复制代码
b.下载Centos-7.repo文件
  1. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
复制代码
c.脚本设置本地源
找个目录,创建脚本文件:
本人以/root/目录为例
  1. vi /root/auto_aliyun.sh
复制代码
编写如下内容:
  1. #!/bin/bash
  2. # 备份官方的原yum源的配置
  3. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  4. # 下载Centos-7.repo文件,或者curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo,取决于你是否有wget的命令
  5. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  6. # 清除yum缓存
  7. yum clean all
  8. # 缓存本地yum源
  9. yum makecache
复制代码
按ESC。输入:wq生存,完成镜像阿里云源的脚本文件的编写
d.赋予脚本可执行的权限
  1. chmod +x /root/auto_aliyun.sh
复制代码
e.执行脚本文件,即可
  1. /root/auto_aliyun.sh
复制代码

图片16


图片17


f.安装epel-release
  1. yum install -y epel-release
复制代码

图片18

(6)关闭防火墙
  1. systemctl stop firewalld
  2. systemctl disable firewalld.service
复制代码

图片19

(7)将hduser用户(你自己的普通用户)赋予root权限
创建hduser用户,并修改hduser用户的密码
  1. useradd hduser(创建的用户名)
  2. passwd 123456(创建的用户密码)
复制代码
设置hduser用户具有root权限,方便后期加sudo执行root权限的下令
  1. vim /etc/sudoers
复制代码
找到图中位置添加:

图片20


生存并退出
在/opt目录下创建module、software文件夹
  1. mkdir /opt/module
复制代码
  1. mkdir /opt/software
复制代码
修改module、software文件夹的所有者和所属组均为hduser用户 
  1. chown hduser:hduser /opt/module
复制代码
  1. chown hduser:hduser /opt/software
复制代码
查看module、software文件夹的所有者和所属组

图片21

测试hduser已拥有root权限

图片22

(8)卸载环境自带jdk
查询jdk
  1. jdk rpm -qa | grep -i java
复制代码

图片23

卸载jdk
  1. rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
复制代码
注意:假如你的虚拟机是最小化安装不必要执行这一步。


  • rpm -qa:查询所安装的所有rpm软件包
  • grep -i:忽略巨细写
  • xargs -n1:表示每次只通报一个参数
  • rpm -e –nodeps:强制卸载软件
查询

图片24

重启虚拟机
  1. [root@Master01 ~]# reboot
复制代码
模型机设置完成
(二)完全分布式搭建

(1)三台虚拟机node1,node2,node3的预备
克隆三台虚拟node1,node2,node3(名称要与前文hosts中一致,注意是完全克隆)

图片25

分别修改三台机器的ip和主机名并重启,查抄是否修改完成,并查抄网络是否可用
Node1

图片26



图片27

Node2

图片28


图片29

Node3

图片30


图片31

将三台主机均按前面方法连接finalshell

图片32



图片33



图片34

(2)给node1安装jdk
将下好的jdk和hadoop使用finallshell传到node1中,在finallshell的文件中找到之前建立的software文件夹,直接拖入。

图片35

进入到software文件夹,查看tar包已经存在。

图片36

解压缩:
  1. tar -zxvf jdk-8u202-linux-x64.tar.gz -C /opt/module/
复制代码

图片37

进入到module目录,已经存在jdk。

图片38

(3)设置JAVA_HOME
在/etc/profile.d/中创建my_env.sh,填写以下内容:
  1. vim /etc/profile.d/my_env.sh
复制代码

图片39

生存后运行,java设置乐成。
  1. source /etc/profile
复制代码
执行java语句出现以下内容

图片40

(4)安装hadoop:
解压hadoop至/etc/module
  1. tar -zxvf hadoop-3.2.4.tar.gz -C /opt/module/
复制代码

图片41

进入到hadoop中设置环境变量

图片42

在之前创建的my_env.sh中添加以下内容
  1. vim /etc/profile.d/my_env.sh
复制代码

图片43

  1. source /etc/profile 
复制代码
运行
下令行输入hadoop,出现以下内容设置完成

图片44

(5)将node1中的jdk和hadoop复制到node2和node3上

图片45



图片46

集群分配脚本的编写:
创建一个脚本xsync,并将其设置在环境变量中,内容如下

注意是在hduser用户的bin目录下:


图片47


建立一个xsync文件,输入以下内容生存

  1. #!/bin/bash
  2. #1. 判断参数个数
  3. if [ $# -lt 1 ]
  4. then
  5.     echo Not Enough Arguement!
  6.     exit;
  7. fi
  8. #2. 遍历集群所有机器
  9. for host in node1 node2 node3
  10. do
  11.     echo ====================  $host  ====================
  12.     #3. 遍历所有目录,挨个发送
  13.     for file in $@
  14.     do
  15.         #4. 判断文件是否存在
  16.         if [ -e $file ]
  17.             then
  18.                 #5. 获取父目录
  19.                 pdir=$(cd -P $(dirname $file); pwd)
  20.                 #6. 获取当前文件的名称
  21.                 fname=$(basename $file)
  22.                 ssh $host "mkdir -p $pdir"
  23.                 rsync -av $pdir/$fname $host:$pdir
  24.             else
  25.                 echo $file does not exists!
  26.         fi
  27.     done
  28. done
复制代码
注意以下内容修改成自己对应的主机名字


图片48


进入到相应的目录,找到相应的bin目录,查询刚才建立的xsync文件,注意是hduser下的bin目录。


图片49

  1. vim xsync
复制代码

图片50

赋予xsync相应权限
  1. chomd 777 xsync
复制代码
发现文件变绿

图片51

使用xsync脚本将环境变量分发到node2和node3中
  1. sudo ./bin/xsync /etc/profile.d/my_env.sh
复制代码

图片52

让环境变量见效
  1. [hduser@node2 bin]$ source /etc/profile
  2. [hduser@node2 opt]$ source /etc/profile
复制代码

  • ssh免密登录设置
  1. cd .ssh/
  2. cat known_hosts
复制代码

图片53

  1. [hduser@node1 .ssh]$ssh-keygen -t rsa 
复制代码
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)


图片54

将公钥拷贝到要免密登录的目标机器上


图片55

ssh node2后免密登录乐成

图片56

第三台机器同理

图片57

(三)设置集群

(1)焦点设置文件
  1. cd $HADOOP_HOME/etc/hadoop
  2. vim core-site.xml
复制代码

图片58

core-site.xml文件内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定 NameNode 的地址 -->
  5. <property>
  6. <name>fs.defaultFS</name>
  7. <value>hdfs://node1:8020</value>
  8. </property>
  9. <!-- 指定 hadoop 数据的存储目录 -->
  10. <property>
  11. <name>hadoop.tmp.dir</name>
  12. <value>/opt/module/hadoop-3.2.4/data</value>
  13. </property>
  14. <!-- 配置 HDFS 网页登录使用的静态用户为 atguigu -->
  15. <property>
  16. <name>hadoop.http.staticuser.user</name>
  17. <value>hduser</value>
  18. </property>
  19. </configuration>
复制代码

图片59

(2)HDFS 设置文件 

设置 hdfs-site.xml

  1. vim hdfs-site.xml
复制代码
文件内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- nn web 端访问地址-->
  5. <property>
  6. <name>dfs.namenode.http-address</name>
  7. <value>node1:9870</value>
  8. </property>
  9. <!-- 2nn web 端访问地址-->
  10. <property>
  11. <name>dfs.namenode.secondary.http-address</name>
  12. <value>node3:9868</value>
  13. </property>
  14. </configuration>
复制代码

图片60

(3)YARN 设置文件 

设置 yarn-site.xml

  1. vim yarn-site.xml
复制代码
文件内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定 MR 走 shuffle -->
  5. <property>
  6. <name>yarn.nodemanager.aux-services</name>
  7. <value>mapreduce_shuffle</value>
  8. </property>
  9. <!-- 指定 ResourceManager 的地址-->
  10. <property>
  11. <name>yarn.resourcemanager.hostname</name>
  12. <value>node2</value>
  13. </property>
  14. <!-- 环境变量的继承 -->
  15. <property>
  16. <name>yarn.nodemanager.env-whitelist</name>
  17. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
  18. NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
  19. RED_HOME</value>
  20. </property>
  21. </configuration>
复制代码

图片61

(4)MapReduce 设置文件 

设置 mapred-site.xml

  1. vim mapred-site.xml
复制代码
文件内容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- 指定 MapReduce 程序运行在 Yarn 上 -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. </configuration>
复制代码

图片62

5)在集群上分发设置好的 Hadoop 设置文件

  1. xsync /opt/module/hadoop- 3.2.4/etc/hadoop/
复制代码

图片63

6)去 node2 和 node3 上查看文件分发情况

  1. cat /opt/module/hadoop-3.2.4/etc/hadoop/core-site.xml
复制代码
编辑workers文件
  1. vim /opt/module/hadoop-3.2.4/etc/hadoop/workers
复制代码
在该文件中增加如下内容:

图片64

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。
同步所有节点设置文件
  1. xsync /opt/module/hadoop-3.2.4/etc
复制代码
启动集群
(1)假如集群是第一次启动,必要在node1节点格式化NameNode(注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。假如集群在运行过程中报错,必要重新格式化NameNode的话,肯定要先停止namenode和datanode进程,而且要删除所有机器的data和logs目录,然后再进行格式化。)
  1. [hduser@node1 hadoop-3.2.4]$ hdfs namenode -format
复制代码

图片65

(2)启动HDFS
  1. [hduser@node1 hadoop-3.2.4]$ sbin/start-dfs.sh
复制代码

图片66

(3)在设置了ResourceManager的节点(node2启动YARN
  1. [hduser@node1 hadoop-3.2.4]$ sbin/start-yarn.sh
复制代码
Web端查看HDFS的NameNode
浏览器中输入:http://node1:9870
(4)查看HDFS上存储的数据信息
Web端查看YARN的ResourceManager
浏览器中输入:http://node2:8088
(b)查看YARN上运行的Job信息
验证HDFS是否乐成启动,可以使用jps下令查看Java进程,确认NameNode和DataNode等进程是否运行。

图片67


图片68


图片69

完全分布式搭建完成。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表