Hadoop——第一部份 Hadoop入门——三、生产集群搭建

三、生产集群搭建

3.1 拷贝文件

在/opt目录下建立software和module文件夹并修改所有权:

sudo mkdir /opt/software /opt/module
sudo chown centos7:centos7 /opt/software /opt/module

上传“hadoop-3.3.1.tar.gz”和“jdk-8u301-linux-x64.tar.gz”到software并解压到module

tar -zxvf /opt/software/jdk-8u301-linux-x64.tar.gz -C /opt/module
tar -zxvf /opt/software/hadoop-3.3.1.tar.gz -C /opt/module
3.2 声明环境变量

CentOS中的环境变量一般在“/etc/profile”中定义
由于该文件中的代码规定会遍历“/etc/profile.d/*.sh”
因此可以直接新建sh文件声明变量

sudo vi /etc/profile.d/my_env.sh

文件内容如下

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_301
export PATH=$PATH:$JAVA_HOME/bin
#export声明全局变量,冒号拼接新变量

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

#期间可以通过双击Xshell的选项卡新开一个终端查找路径

重新加载环境变量文件

source /etc/profile

检验安装情况

java -version
hadoop version
3.3 hadoop文件目录

bin 可执行命令文件
etc 配置文件
sbin启动服务的命令
share/doc 说明文档
share/hadoop/mapreduce 案例

3.4 hadoop三种运行模式
  • 本地模式
    数据存储在本地(测试偶尔用)
  • 伪分布式
    数据存储在HDFS(公司没钱)
  • 完全分布式
    数据存储在HDFS/多台服务器
3.5 ssh免密

A生成密钥对,保留私钥,分发公钥给B。SSH访问时,A使用私钥加密数据,传输给B,B使用公钥解密,再使用公钥加密新的数据传回A,A用私钥解密。
ssh相关的文件一般在~/.ssh文件夹中
在所有节点执行以下操作

ssh-keygen -t rsa
#生成一个私钥id_rsa和一个公钥id_rsa.pub
ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104
#分发公钥
#授权的用户会生成authorized_keys文件
#进行ssh访问后会生成known_hosts文件
3.6 集群同步分发synchronize
  1. scp(secure copy)安全拷贝
scp -r $user@$host:$pdir/$fname $user@$host:$pdir/$fname
#将第一个地址的文件复制到第二个地址
#-r递归文件夹
#本地省略用户名和主机名
#其它主机用户名相同可省略用户名只用主机名
#主机名需配hosts,也可直接使用IP
  1. rsync远程同步
rsync -av $user@$host:$pdir/$fname $user@$host:$pdir
#将第一个地址同步到第二个地址
#-a递归文件夹-v显示过程
#本地省略用户名和主机名
#其它主机用户名相同可省略用户名只用主机名
#主机名需配hosts,也可直接使用IP
  1. synchronize集群同步分发脚本
    查看当前环境变量
echo $PATH

在存在的路径下创建脚本

mkdir ~/bin
vi ~/bin/synchronize

脚本内容如下:

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器
for host in hadoop101 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
  • 赋予执行权限
chmod 751 ~/bin/synchronize
3.7 同步文件
synchronize ~/bin
sudo ~/bin/synchronize /opt
sudo ~/bin/synchronize /etc/profile.d/my_env.sh
#需要注意的是当同步需要root权限时,ssh免密只限配置了的用户,因此还需要输入root用户密码。另外当本地使用sudo时,或要输完整路径。

然后在每个节点source或重启

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值