1、hadoop3.3.4集群搭建记录-linux环境准备
- 一、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
。。。
更多推荐
所有评论(0)