• 一、linux基础环境配置。
  • 1、增加hosts主机映射(内网)
  • sudo vim /etc/hosts
  • 内网地址     hadoop-master01
    
    内网地址     hadoop-master02
    
    内网地址     hadoop-master03
    
    内网地址    hadoop-core01
    
    内网地址    hadoop-core02
    
    内网地址    hadoop-core03
    
    内网地址   hadoop-core04
  • 2、创建系统用户。     

    useradd -m -s /bin/bash ec2-user
    passwd ec2-user

    -m:自动创建主目录 /home/ec2-user

    -s /bin/bash:指定 shell 为 bash

  • 给用户赋予root权限(vim /etc/sudoers在文件最后增加)

  • ec2-user    ALL=(ALL)       NOPASSWD:ALL
  • 3、配置ssh免密登录

     首先要ping通和开端口22:

	ping hadoop-master02
	sudo yum install -y telnet
	telnet hadoop-master02 22

(1)在各机器上执行生成公钥和私钥命令:

ssh-keygen -t rsa

(2)把本地的ssh公钥文件安装到远程主机对应的账户下:

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

 ssh-copy-id hadoop-master01 
 ssh-copy-id hadoop-master02
 ssh-copy-id hadoop-master03
 ssh-copy-id hadoop-core01
 ssh-copy-id hadoop-core02
 ssh-copy-id hadoop-core03
 ssh-copy-id hadoop-core04

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

ssh-copy-id hadoop-master01 
ssh-copy-id hadoop-master02
ssh-copy-id hadoop-master03 
ssh-copy-id hadoop-core01
ssh-copy-id hadoop-core02
ssh-copy-id hadoop-core03
ssh-copy-id hadoop-core04

。。。

4、集群分发脚本编写(vim /home/bigdata/bin/xsync)

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


#2. 遍历集群所有机器
for host in hadoop-master01 hadoop-master02 hadoop-master03 hadoop-core01 hadoop-core02 hadoop-core03 hadoop-core04
do
    echo ====================    $host    ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4 判断文件是否存在
        if [ -e $file ]
        then
            #5. 获取父目录
            pdir=$(cd -P $(dirname $file); pwd)
            echo pdir=$pdir

            #6. 获取当前文件的名称
            fname=$(basename $file)
            echo fname=$fname

            #7. 通过ssh执行命令:在$host主机上递归创建文件夹(如果存在该文件夹)
            ssh $host "mkdir -p $pdir"

                        #8. 远程同步文件至$host主机的$USER用户的$pdir文件夹下
            rsync -av $pdir/$fname $USER@$host:$pdir
        else
            echo $file does not exists!
        fi
    done
done

5、集群执行命令脚本(vim /home/bigdata/bin/xcall)

#! /bin/bash

for i in hadoop-master01 hadoop-master02 hadoop-master03 hadoop-core01 hadoop-core02 hadoop-core03 hadoop-core04
do
    echo --------- $i ----------
    ssh $i "$*"
done

6、JDK安装

(1)解压jdk 。

        tar -zxvf /data/software/jdk-8u212-linux-x64.tar.gz -C /data/module

(2)新建/etc/profile.d/my_env.sh设置环境变量。(系统会加载/etc/profile.d下的.sh文件

#JAVA HOME

export JAVA_HOME=/opt/module/jdk-1.8

export PATH=$PATH:$JAVA_HOME/bin

(3)分发moudle/jdk和环境变量文件并source /etc/profile.d/my_env.sh

二、出现的问题。

1、echo $PATH发现未包含 /home/ec2-user/bin,导致ec2用户不能直接使用xcall等脚本:

选择编辑当前用户(ec2-user)的配置文件(仅对 ec2-user 生效,无需 root 权限):

vi ~/.bashrc  # 编辑用户级环境变量配置文件在文件末尾添加以下内容:

export PATH=$PATH:/home/ec2-user/bin

执行以下命令加载新的环境变量配置

source ~/.bashrc

2、在用sudo命令时找不到jps命令,但用root登录可以:

root 直接登录时:因为 JAVA_HOME 配置在 root 的 .bashrc 或系统级文件中,root 登录时会加载这些配置,因此能找到 java 命令。

sudo 执行时:sudo 强制使用 secure_path 中定义的路径(默认只有 /sbin:/bin:/usr/sbin:/usr/bin),而 java 命令实际安装在 /data/module/jdk1.8.0_212/bin(不在 secure_path 中),因此 sudo 找不到 java 命令。

解决方案:将 java 所在目录添加到 sudo 的 secure_path

先确认 java 命令的安装目录(在任意能执行 java -version 的环境中执行):

which java   # 查看 java 命令的路径

修改 sudo 的 secure_path命令:sudo visudo。找到 Defaults secure_path 行,在末尾添加 java 所在目录(用冒号分隔)

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/home/ec2-user/bin:/data/module/jdk1.8.0_212/bin:/data/module/hadoop-3.3.4/bin:/data/module/hadoop-3.3.4/sbin

3、用root用户发现没有免密登录:

在各节点都需执行:

# 复制 ec2-user 的私钥和公钥到 root 的 .ssh 目录

cp -r /home/ec2-user/.ssh /root/

# 修复权限(SSH 对密钥权限要求严格,必须为 600)

chmod 600 /root/.ssh/id_rsa

chmod 644 /root/.ssh/id_rsa.pub

chmod 644 /root/.ssh/known_hosts  # 若文件存在

#将 master01 root 的公钥添加到所有节点的 root 授权列表authorized_keys 文件中

ssh-copy-id -i /root/.ssh/id_rsa.pub root@hadoop-master02

ssh-copy-id -i /root/.ssh/id_rsa.pub root@hadoop-master03

ssh-copy-id -i /root/.ssh/id_rsa.pub root@hadoop-core01

。。。

更多推荐