完全分布式的安装

先准备三台虚拟机,依次分别命名Hadoop01,Hadoop02,Hadoop03.

IP地址依次为192.168.10.101;192.168.10.102;192.168.10.103;

完全分布式搭建环境准备

1. 总纲

 1. 三台机器的防⽕墙必须是关闭的 .
 2. 确保三台机器的⽹络配置畅通 (NAT 模式,静态 IP ,主机名的配置 )
 3. 确保 /etc/hosts ⽂件配置了 ip hostname 的映射关系
 4. 确保配置了三台机器的免密登陆认证(克隆会更加⽅便)
 5. 确保所有机器时间同步

 6. jdk和hadoop的环境变量配置

2. 关闭防⽕墙

[root@Hadoop01 ~] # systemctl stop firewalld
[root@Hadoop01 ~] # systemctl disable firewalld
[root@Hadoop01 ~] # systemctl stop NetworkManager
[root@Hadoop01 ~] # systemctl disable NetworkManager
# 最好也把 selinux 关闭掉,这是 linux 系统的⼀个安全机制,进⼊⽂件中将
SELINUX 设置为 disabled
[root@Hadoop01 ~] # vi /etc/selinux/config
.........
SELINUX = disabled
  注意:三台机子都要关闭防火墙

3. 静态IP和主机名配置

--1. 配置静态IP(确保NAT模式)
[root@Hadoop01 ~]# vi /etc/sysconfig/network
scripts/ifcfg-ens33
............
BOOTPROTO=static # 将dhcp改为static
............
ONBOOT=yes # 将no改为yes
IPADDR=192.168.10.101 # 添加IPADDR属性和ip地址
PREFIX=24 # 添加
NETMASK=255.255.255.0或者PREFIX=24
GATEWAY=192.168.10.2 # 添加⽹关GATEWAY
DNS1=114.114.114.114 # 添加DNS1和备份DNS
DNS2=8.8.8.8
--2. 重启⽹络服务
[root@Hadoop01 ~]# systemctl restart network
或者
[root@Hadoop01 ~]# service network restart
--3. 修改主机名(如果修改过,请略过这⼀步)
[root@localhost ~]# hostnamectl set-hostname Hadoop01
或者
[root@localhost ~]# vi /etc/hostname
Hadoop01

4. 配置/etc/hosts⽂件

[root@Hadoop01~]# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4
localhost4.localdomain4
::1 localhost localhost.localdomain localhost6
localhost6.localdomain6
192.168.10.101 Hadoop01#添加本机的静态IP和本机的主机名之间的映
射关系
192.168.10.102 Hadoop02
192.168.10.103 Hadoop03

5. 免密登陆认证

-1. 使⽤rsa加密技术,⽣成公钥和私钥。⼀路回⻋即可
[root@Hadoop01~]# cd ~
[root@Hadoop01~]# ssh-keygen -t rsa
-2. 进⼊~/.ssh⽬录下,使⽤ssh-copy-id命令
[root@Hadoop01 ~]# cd ~/.ssh
[root@Hadoop01 .ssh]# ssh-copy-id root@Hadoop01
-3. 进⾏验证
[hadoop@Hadoop01 .ssh]# ssh Hadoop01
#下⾯的第⼀次执⾏时输⼊yes后,不提示输⼊密码就对了
[hadoop@Hadoop01.ssh]# ssh localhost
[hadoop@Hadoop01 .ssh]# ssh 0.0.0.0
注意:三台机器提前安装好的情况下,需要同步公钥⽂件。如果使⽤克隆技术。那
么使⽤同⼀套密钥对就⽅便多了。

6. 时间同步

   6.1要先安装 ntp 服务和 ntpdate 工具: yum -y install ntp ntpdate 即使是作为服务端的主机,在必要时刻也是需要向公用的ntp 服务器进行时间同步的 ( 一般不用 )
        [root@ Hadoop01 ~]# vim /etc/ntp.conf
        #授权下述网段上所有的机器允许从 ntp 服务器上查询和同步时间 restrict 192.168.10.0 mask         255.255.255.0 nomodify notrap
下述文档直接赋值粘贴,替换原文档
driftfile /var/lib/ntp/drift
# 默认情况下 ,NTP 服务器的日志保存在 /var/log/messages. 当然我们也可以自己指定
# 自己指定日志目录
# 我们要确保他的属性和 SELinux 环境 ( 这两项一般不用改 )
# chown ntp:ntp /var/log/ntpd.log
# chcon -t ntpd_log_t /var/log/ntpd.log
logfile /var/log/ntpd.log
restrict default nomodify notrap nopeer noquery
# 给与本机所有权限
restrict 127.0.0.1
restrict ::1
# 授权下述网段上所有的机器允许从 ntp 服务器上查询和同步时间
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
# 增加下述几个时间服务器列表 , 除了 0.asia.pool.ntp.org 还会有很多时间服务器 . 比如 0.cn.pool.ntp.org 或者
time.nist.gov 或者
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
# 这两行内容表示当外部时间不可用时,使用本地时间
server 127.127.1.0 iburst
fudge 127.127.1.0 stratum 10
# 下述四行表示允许上层服务器修改本机时间
restrict 0.asia.pool.ntp.org nomodify notrap noquery
restrict 1.asia.pool.ntp.org nomodify notrap noquery
restrict 2.asia.pool.ntp.org nomodify notrap noquery
restrict 3.asia.pool.ntp.org nomodify notrap noquery
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
   6.2设置开机自启动服务 (初始化)
        使服务端服务ntp 的守护进程 ntpd 生效
        [root@ Hadoop01 ~]# systemctl enable ntpd
        Created symlink from /etc/systemd/system/multi-user.target.wants/ntpd.service to
/usr/lib/systemd/system/ntpd.service.
        使客户端工具ntpdate 工具生效 ( 选做 )
        [root@ Hadoop01 ~]# systemctl enable ntpdate
        Created symlink from /etc/systemd/system/multi-user.target.wants/ntpdate.service to
        /usr/lib/systemd/system/ntpdate.service.
        检查
        [root@ Hadoop01 ~]# systemctl is-enabled ntpd
        显示: enabled
6.3 启用ntp服务
        [root@ Hadoop01 ~]# systemctl start ntpd
        查看ntpd 进程
        [root@ Hadoop01 ~]# ps -ef | grep ntpd
  ntp 1185 1 0 03:50 ? 00:00:00 /usr/sbin/ntpd -u ntp:ntp -g root 1663 1136 0 04:35 pts/2 00:00:00 grep -- color=auto ntp
        进程存在, 说明服务已经正常启动
6.4设置硬件时间
   6.4.1  查看 ntp 的情况
   [root@ Hadoop01 ~]# ntpq -p
   6.4.2  执行同步
       root@ Hadoop01 ~]# hwclock -w
   6.4.3  测试
  [root@ Hadoop01  conf]# ntpstat
synchronised to NTP server (78.46.102.180) at stratum 3 time      correct to within 189 ms polling server every 64 s
  出现上述语句,说明本地已经与时间服务器实现了同步
6.5 客户端同步
    6.5.1安装工具
[root@Hadoop02~]# yum -y install ntp ntpdate
方法一:
[root@Hadoop02~]# hwclock -w
下述IP地址与Hadoop01一直
[root@Hadoop02~]# echo "server 192.168.10.101" >/etc/ntp.conf
[root@Hadoop02~]# systemctl enable ntpd
[root@Hadoop02~]# systemctl restart ntpd
2 重启服务以使配置生效 , 之后 大概要等10分钟左右,才会同步成功
方法二:
1 进行客户端与服务器端的时间同步
[root@Hadoop02~]# systemctl enable ntpdate
[root@Hadoop02~]# /usr/sbin/ntpdate -u 192.168.10.101
2 让系统时间和硬件时间同步
[root@Hadoop02~]# hwclock -w
3 可以设置定时器 , 定时执行 , 因为 ntpdate 每次执行完就失效了 .
[root@slaHadoop02ve1 ~]# crontab -e
每天和主机同步一次
10 23 * * * (/usr/sbin/ntpdate -u 192.168.10.101  &&  /sbin/hwclock -w) &> /var/log/ntpdate.log
注:Hadoop03配置与Hadoop02一样

7. 安装JdkHadoop,配置相关环境变量

-1 . 上传和解压两个软件包
[root@ Hadoop01  ~] # tar -zxvf jdk-8u221-linux-x64.tar.gz  -C   /usr/local/
[root@ Hadoop01  ~] # tar -zxvf hadoop-2.7.6.tar.gz   -C   /usr/local/
-2 . 进⼊ local ⾥,给两个软件更名
[root@ Hadoop01  ~] # cd /usr/local/
[root@ Hadoop01  local] # mv 1.8.0_221/ jdk
[root@ Hadoop01  local] # mv hadoop-2.7.6/ hadoop
-3 . 配置环境变量
[hadoop@ Hadoop01  local] # vi /etc/profile
..... 省略 ...........
#java environment
export JAVA_HOME = /usr/local/jdk
export PATH = $JAVA_HOME /bin: $JAVA_HOME /jre/bin: $PATH
#hadoop environment
export HADOOP_HOME = /usr/local/hadoop
export PATH = $HADOOP_HOME /bin: $HADOOP_HOME /sbin: $PATH

8.配置Hadoop配置文件

  8.1   在完全分布式集群的配置中,需要配置的是 4 个配置⽂件
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
   8.2配置core-site.xml
[root@ Hadoop01  ~]# cd $HADOOP_HOME/etc/hadoop/
[root@ Hadoop01  hadoop]# vi core-site.xml
<configuration>
        <!-- hdfs的地址名称: schame,ip,port-->
        <property>
                <name> fs.defaultFS </name>
                <value> hdfs:// Hadoop01  :8020 </value>
        </property>
        <!-- hdfs的基础路径,被其他属性所依赖的⼀个基础路径 -->
        <property>
                <name> hadoop.tmp.dir </name>
                <value> /usr/local/hadoop/tmp </value>
        </property>
</configuration>
   8.3配置 hdfs-site.xml
[root@ Hadoop01    hadoop]# vi hdfs-site.xml
<configuration>
        <!-- namenode守护进程管理的元数据⽂件 fsimage 存储的位置 -->
        <property>
                <name> dfs.namenode.name.dir </name>
                <value> file://${hadoop.tmp.dir}/dfs/name </value>
        </property>
        <!-- 确定 DFS 数据节点应该将其块存储在本地⽂件系统的何处 -->
        <property>
                <name> dfs.datanode.data.dir </name>
                <value> file://${hadoop.tmp.dir}/dfs/data </value>
        </property>
        <!-- 块的副本数 -->
        <property>
                <name> dfs.replication </name>
                <value> 3 </value>
        </property>
        <!-- 块的⼤⼩ (128M), 下⾯的单位是字节 -->
        <property>
                <name> dfs.blocksize </name>
                <value> 134217728 </value>
        </property>
        <!-- secondarynamenode守护进程的 http 地址:主机名和端⼝号。-->
        <property>
                <name> dfs.namenode.secondary.http-address </name>
               <value> Hadoop02 :50090 </value>
        </property>
        <!-- namenode守护进程的 http 地址:主机名和端⼝号。-->
        <property>
                <name> dfs.namenode.http-address </name>
                <value> Hadoop01 :50070 </value>
        </property>
</configuration>
   8.4配置mapred-site.xml
[root@ Hadoop01 hadoop]# cp    mapred-site.xml.template    mapred-site.xml
[root@ Hadoop01  hadoop]# vi mapred-site.xml
<configuration>
        <!-- 指定 mapreduce 使⽤ yarn 资源管理器 -->
        <property>
                <name> mapreduce.framework.name </name>
                <value> yarn </value>
        </property>
        <!-- 配置作业历史服务器的地址 -->
        <property>
                <name> mapreduce.jobhistory.address </name>
                <value> Hadoop01 :10020 </value>
        </property>
        <!-- 配置作业历史服务器的 http 地址 -->
        <property>
                <name> mapreduce.jobhistory.webapp.address </name>
                <value> Hadoop01 :19888 </value>
        </property>
</configuration>
     8.5配置yarn-site.xml
[root@ Hadoop01 hadoop]# vi yarn-site.xml
<configuration>
        <!-- 指定 yarn shuffle 技术 -->
        <property>
                <name> yarn.nodemanager.aux-services </name>
                <value> mapreduce_shuffle </value>
        </property>
        <!-- 指定 resourcemanager 的主机名 -->
        <property>
                <name> yarn.resourcemanager.hostname </name>
                <value> Hadoop01 </value>
        </property>
        <!--下⾯的可选 -->
        <!--指定 shuffle 对应的类 -->
         <property>
                <name> yarn.nodemanager.aux-services.mapreduce_shuffle.class </name>
                <value> org.apache.hadoop.mapred.ShuffleHandler </value>
        </property>
        <!--配置 resourcemanager 的内部通讯地址 -->
        <property>
                <name> yarn.resourcemanager.address </name>
                <value> Hadoop01 :8032 </value>
        </property>
        <!--配置 resourcemanager scheduler 的内部通讯地址 -->
        <property>
                <name> yarn.resourcemanager.scheduler.address </name>
                <value> Hadoop01 :8030 </value>
        </property>
        <!--配置 resoucemanager 的资源调度的内部通讯地址 -->
        <property>
                <name> yarn.resourcemanager.resource-tracker.address </name>
                <value> Hadoop01 :8031 </value>
        </property>
        <!--配置 resourcemanager 的管理员的内部通讯地址 -->
        <property>
                <name> yarn.resourcemanager.admin.address </name>
                <value> Hadoop01 :8033 </value>
        </property>
        <!--配置 resourcemanager web ui 的监控⻚⾯ -->
        <property>
                <name> yarn.resourcemanager.webapp.address </name>
                <value> Hadoop01 :8088 </value>
        </property>
</configuration>
        8.6配置hadoop-env.sh
[root@ Hadoop01   hadoop] # vi hadoop-env.sh
.........
# The java implementation to use.
export JAVA_HOME = /usr/local/jdk
.........
       8.7配置slaves⽂件
# 此⽂件⽤于指定 datanode 守护进程所在的机器节点主机名
[root@ Hadoop01   hadoop] # vi slaves
Hadoop01
Hadoop02
Hadoop03
        8.8配置yarn-env.sh⽂件
# 此⽂件可以不配置,不过,最好还是修改⼀下 yarn jdk 环境⽐较好
[root@ Hadoop01    hadoop] # vi yarn-env.sh
.........
# some Java parameters
export JAVA_HOME = /usr/local/jdk
if [ " $JAVA_HOME " ! = "" ]; then
#echo "run java in $JAVA_HOME"
JAVA_HOME = $JAVA_HOME
fi
.........

9.配置另外两台机器

 提示:本⽅法适⽤于多台虚拟机已经提前搭建出来的场景。
--1. 同步hadoop到slave节点上
[root@Hadoop01~]# cd /usr/local
[root@Hadoop01   local]# scp -r ./hadoop Hadoop02:/usr/local/
[root@Hadoop01   local]# scp -r ./hadoop Hadoop03:/usr/local/
--2. 同步/etc/profile到slave节点上
[root@Hadoop01   local]# scp /etc/profile Hadoop02:/etc/
[root@Hadoop01   local]# scp /etc/profile Hadoop03:/etc/
--3. 如果slave节点上的jdk也没有安装,别忘记同步jdk。
--4. 检查是否同步了/etc/hosts⽂件

10.格式化NameNode

     10.1  注意事项(针对搭建过伪分布式的
格式化完成 NameNode 后,会在 core-site.xml 中的配置 hadoop.tmp.dir 的路
径下⽣成集群相关的⽂件。如果之前在伪分布式的时候已经格式化完成,并且这个路
径已经⽣成了,需要先将这个⽬录⼿动删除掉,然后再格式化集群,否则会导致集群
启动失败, NameNode DataNode ⽆法建⽴连接。
        10.2Hadoop01机器上运⾏命令
[root@Hadoop01 ~] # hdfs namenode -format

11.启动集群

1. 启动脚本
-- start-dfs.sh                          : ⽤于启动 hdfs 集群的脚本
-- start-yarn.sh                        : ⽤于启动 yarn 守护进程
-- start-all.sh                            : ⽤于启动 hdfs yarn
2. 关闭脚本
-- stop-dfs.sh                            : ⽤于关闭 hdfs 集群的脚本
-- stop-yarn.sh                         : ⽤于关闭 yarn 守护进程
-- stop-all.sh                              : ⽤于关闭 hdfs yarn
3. 单个守护进程脚本
-- hadoop-daemons.sh               : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本
-- hadoop-daemon.sh                  : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本
reg:
hadoop-daemon.sh [start|stop]
[namenode|datanode|secondarynamenode]
-- yarn-daemons.sh                              : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本
-- yarn-daemon.sh                                  : ⽤于单独启动或关闭 hdfs 的某⼀个守护进程的脚本
reg:
yarn-daemon.sh [start|stop]
[resourcemanager|nodemanager]
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值