hadoop基础环境搭建
关于博客
由于平常在做java开发及ETL,对大数据方向有了写兴趣,所以想学习学习,将学习过程笔记及心得写在博客中,用来共享,希望有所帮助
基础环境搭建步骤
1.配置阿里云yum源
2.安装常用软件
3.关闭防火墙
4.关闭selinux
5.安装JDK
6.创建hadoop用户并配置hadoop用户密码
7.给hadoop用户配置ssh秘钥
8.创建whell用户组,禁止非whell组用户切换到root,配置免密切换root
9.配置hosts文件
10.克隆4台机器
10.1.虚拟机克隆
10.1.1.配置静态IP
10.1.2 配置、etc/resolv.conf 的 nameserver
10.1.3 停掉NetworkManager服务
11.修改每个机器的 主机名
12.scp命令和ssh命令说明及使用
13.批量脚本说明及使用
集群部署规划
5台服务器
一个主节点:nn1.hadoop
一个从节点:nn2.hadoop
三个工作节点:s1.hadoop
s2.hadoop
s3.hadoop
1.安装rz用来上传文件
yum install -y lrzsz
安装阿里云源:
地址:http://mirrors.aliyun.com/repo/Centos-7.repo
上传这个repo
备份并替换系统的repo文件
#拷贝
cp Cntos-7.repo /etc/yum.repos.d/
cd /etc/yum.repos.d/
#备份
mv CentOS-Base.repo CentOS-Base.repo.bak
#替换
mv Centos-7.repo Centos-Base.repo
执行yum源更新命令
yum clean all
yum makecache
yum update -y
配置完毕
2.安装常用软件
yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel lzo-devel curl wget openssh-clients zlib-devel autoconf autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd
3.关闭防火墙
centos6:
#查看防火墙状态:
service iptables status
#关闭防火墙:
service iptables stop
#永久关闭防火墙:
chkconfig iptables off
centos7:
#查看防火墙状态:
firewall-cmd --state
#关闭防火墙:
systemctl stop firewalld.service
#禁止防火墙开机启动:
systemctl disable firewalld.service
#查看服务是否开机启动:
systemctl is-enabled firewalld.service
4.关闭selinux
#查看状态:
/usr/sbin/sestatus -v
#关闭:
vim /etc/selinux/config
把文件中的selinux=disabled
#重启服务器
reboot
启动之后
#查看状态
/usr/sbin/sestatus -v
5.安装JDK
我的jdk版本为1.8 安装步骤略,度娘很多,这里偷个懒
修改主机名
centos 6:
vi /etc/sysconfig/network
HOSTNAME=nn1.hadoop #修改localhost.localdomain为nn1.hadoop
vi /etc/hosts
127.0.0.1 nn1.hadoop localhost #修改localhost.localdomain为nn1.hadoop
ps:可以不改127.0.0.1后面的默认主机名。改了的话可能会有某些网络应用误把主机master解析到127.0.0.1上去,导致运行失败,当然可能性比较低。可以在对本机设置IP后,在/etc/hosts的最后加一行: “IP 主机名”,这样也可以实现。
shutdown -r now #重启服务器
centos 7:
#修改
hostnamectl set-hostname nn1.hadoop
#修改之后查看
hostname
6.创建hadoop用户,设置用户密码
创建用户
useradd hadoop
设置密码
passwd hadoop
7.给hadoop用户创建秘钥
配置ssh秘钥目的:使得多台机器之间可以免密登录
实现原理:使用ssh-keygen 在linux1上生成公钥和私钥,将公钥复制到另一台linux2上,则可以实现使用ssh命令无需密码登录到另一台服务器上,如果需要互相免密登录,需要将公钥私钥都拷贝到linux2上。
#切换到hadoop用户
su - hadoop
#创建.ssh目录
mkdir ~/.ssh
#生成ssh公钥私钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
#输出公钥文件内容并且重新输入到~/ssh/authorized_keys文件中
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
#给~/.ssh文件加上700权限
chmod 700 ~/.ssh
#给~/.ssh/authorized_keys加上 600权限
chmod 600 ~/.ssh/authorized_keys
8.创建whell用户组,禁止非whell组用户切换到root,配置免密切换root(非必须)
1)修改 /etc/pam.d/su 配置
su时 要求用户加入到wheel组
将此行 井号’#’ 去掉
或者执行
命令说明:
- 修改/etc/login.defs
在文件尾部添加
SU_WHEEL_ONLY yes
- 添加用户到管理员,禁止普通用户su 到root
#把hadoop用户添加到wheel组中
usermod -G wheel hadoop
#查看wheel组中是否有hadoop用户
id hadoop 或者 cat /etc/group | grep wheel
- 使用普通用户验证一下,由于普通用户没有在wheel组中,所以没有su root 权限
- 修改/etc/pam.d/su 下的文件 将下图中井号去掉
完成之后即不许要密码也可su 到root
9 配置hosts文件
修改/etc/hosts 文件
追加:
192.168.199.160 nn1.hadoop
192.168.199.161 nn2.hadoop
192.168.199.162 s1.hadoop
192.168.199.163 s2.hadoop
192.168.199.164 s3.hadoop
10 克隆4台机器
右键虚拟机 >管理>克隆
下一步之后选择完整克隆
10.1 配置静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启network.service
systemctl restart network.service
最后别忘记更改hostname
#更改hostname
hostnamectl set-hostname nn2.hadoop
#查看hostname
hostname
剩下几台操作都和这个一致
10.2 配置、etc/resolv.conf 的 nameserver
这个是修改DNS 的 使用命令 vim etc/resolv.conf 修改nameserver
我的是
10.3 停掉NetworkManager服务
#停止NetworkManager服务
systemctl stop NetworkManager.service
#设置开机不启动
systemctl disable NetworkManager.service
#重启网络服务
systemctl restart NetworkManager.service
11 scp命令和ssh命令说明及使用
因为会用到远程拷贝等命令,所以了解一下相关命令及批量处理
scp:
scp 文件名 登录用户名@目标机器IP或主机名:目标目录
示例:
scp /home/hadoop/a1 hadoop@s1.hadoop:/home/hadoop/
ssh:
指定用户登录其他机器
ssh 登录用户名@目标ip或主机名
示例:
ssh hadoop@s1.hadoop
批量脚本
下面是我的批量处理脚本
ips:
ssh_all.sh:
#!/bin/bash
RUN_HOME=$(cd "$(dirname "$0")"; echo "${pwd}")
NOW_LIST=(`cat ${RUN_HOME}/ips`)
SSH_USER="hadoop"
for i in ${NOW_LIST[@]}; do
f_cmd="ssh $SSH_USER@$i \"$*\""
echo $f_cmd
if eval $f_cmd; then
echo "OK"
else
echo "FAIL"
fi
done
解读:循环遍历ips 登录hadoop用户
测试:
~/hadoop_op/ssh_all.sh ls
结果:
scp_all.sh:
#!/bin/bash
RUN_HOME=$(cd "$(dirname "$0")"; echo "${PWD}")
NOW_LIST=(`cat ${RUN_HOME}/ips`)
SSH_USER="hadoop"
for i in ${NOW_LIST[@]}; do
f_cmd="scp $1 $SSH_USER@$i:$2"
echo $f_cmd
if eval $f_cmd; then
echo "OK"
else
echo "FAIL"
fi
done
解读:循环遍历ips 将$1(参数) 文件 拷贝 到其他机器的$2下
测试:
#将home目录下的exe.sh 拷贝到ips的那些机器的home目录下
~/hadoop_op/scp_all.sh ~/exe.sh ~/
cmd=$*
su - <<EOF
$cmd
EOF
ssh_root.sh:
#!/bin/bash
RUN_HOME=$(cd "$(dirname "$0")"; echo "${PWD}")
NOW_LIST=(`cat ${RUN_HOME}/ips`)
SSH_USER="hadoop"
for i in ${NOW_LIST[@]}; do
f_cmd="ssh $SSH_USER@$i ~/exe.sh \"$*\""
echo $f_cmd
if eval $f_cmd; then
echo "OK"
else
echo "FAIL"
fi
done
解读:使用hadoop用户登录之后 在执行命令
测试:
#看各机器home目录下是否有exe.sh
./ssh_root.sh "ls ~/|grep exe.sh"
基础环境准备及相关脚本以及测试结果都在上面了,有问题可以留言.