准备
- 环境: Linux(CentOS 7)
- jdk8
- 安装包
- 这里使用hadoop-2.9.2-64.tar.gz
安装
-
创建用户
groupadd hadoop #创建用户组 useradd -g hadoop hadoop #创建用户并添加用户组 passwd hadoop #修改用户密码
-
修改用户权限
vim /etc/sudoers
添加hadoop用户的权限如图
-
修改所有节点的host
vim /etc/hosts
vim /etc/sysconfig/network
reboot #重启 使用hadoop用户登录 hostname #检测本地hostname是否修改成功
-
创建包下载目录和安装目录
mkdir /etc/modules /etc/softwares #创建目录 chown -g hadoop:hadoop /etc/modules /etc/softwares 修改目录用户组
-
安装jdk(略)
-
解压安装包到modules
tar -zxvf hadoop-2.9.2-linux-64.tar.gz -C /opt/modules/
-
配置hadoop环境变量
vim /etc/profile export HADOOP_HOME=/opt/modules/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile hadoop #验证是否配置成功
-
编写远程执行脚本和远程同步脚本
-
所有节点安装rsync 工具
sudo yum install -y rsync
#!/bin/bash #远程执行脚本 pcount = $# if(($pcount==0)); then echo no args; exit; fi echo --------------localhost---------------- $@ for((host=221; host<224; host++)); do echo --------------hadoop$host $@----------------------- ssh hadoop$host $@ done
#!/bin/bash #远程同步脚本 pcount=$# if((pcount == 0)); then echo no args; exit; fi p1=$1 fname='basename' $p1 echo fname=$fname pdir='cd -P $(dirname $p1); pwd' echo pdir=$pdir user='whoami' for((host=222; host<224; host++)); do echo --------------hadoop$host-------------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
#授权可执行 sudo chmod 777 xcall xsync
-
-
在各节点生成rsa证书, 节点间设置免密登录
ssh-keygen -t rsa #生成rsa证书 ssh-copy-id host #将公钥分别拷贝到当前节点以及其它节点
-
在解压xsync 节点 同步hadoop安装包, 并在各节点配置hadoop 和jdk的环境变量
cd /opt/modules xsync hadoop
-
配置hadoop配置文件
节点角色分配
- 配置集群节点 slaves
```shell
vim slaves
#添加节点
hadoop221
hadoop222
hadoop223
```
- 配置core-site-xml
```xml
<configuration>
<!--nameNode 节点和hdfs端口-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop221:8020</value>
</property>
<!--临时文件目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop/data/tmp</value>
</property>
</configuration>
```
- 配置hdfs-site.xml
```xml
<configuration>
<!--文件备份数 默认3-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!--secondNameNode节点配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop222:50090</value>
</property>
</configuration>
```
- 配置mapred-site.xml
```xml
<!--配置以yarn方式运行map-reduce-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
```
- 配置yarn-site.xml
```xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--resourcemanager节点配置-->
<property>
<name>yarn-resourcemanager.hostname</name>
<value>hadoop223</value>
</property>
</configuration>
```
- 以上配置完成后同步各节点配置文件
```shell
pwd
#路径 /opt/modules/hadoop/etc
xsync hadoop
```
-
关闭所有节点防火墙
sudo systemctl stop firewalld sudo systemctl disable firewalld
-
格式化nameNode节点 启动集群
hdfs namenode -format #在nameNode节点格式化nameNode sbin/start-dfs.sh #在nameNode节点启动hdfs各节点
sbin/start-yarn.sh #在resourceManager节点启动执行, 启动所有yarn节点
-
hadoop 集群安装完成
其它配置
回收站
修改core-site.xml,配置垃圾回收时间为1分钟。
<property>
<name>fs.trash.interval</name>
<value>1</value>
<description>设置回收站存储数据时间长度 分钟, 超过时间删除数据;默认 0 禁用回收站; </description>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>10</value>
<description>设置检查回收站数据是否过期, 检查的时间间隔秒 </description>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>hadoop</value>
<description>设置回收站目录权限用户, 默认 dr.who</description>
</property>
程序删除的文件不进入回收站, 需要使用 moveToTrash()
Trash trash = New Trash(conf);
trash.moveToTrash(path);
恢复回收站数据
hadoop fs -mv /user/zcz/.Trash/Current/user/hadoop/input /user/zcz/input
清空回收站
hadoop fs -expunge
集群时间同步
时间服务器配置
-
检查ntp 是否安装
rpm -qa | grep ntp
-
修改ntp配置文件
vim /etc/ntp.conf
修改1: 授权192.168.1.0 -192.168.1.255 网段上的所有汲取可以从这台机器上查询和同步时间 restrict 192.168.1.0 mask 255.255.255.255 nomodify notrap 修改2: 集群在局域网中, 不使用其它互联网上的时间 #server 0.centos.pool.ntp.org iburst #server 1.centos.pool.ntp.org iburst #server 2.centos.pool.ntp.org iburst #server 3.centos.pool.ntp.org iburst 添加3: 当该节点丢失网络连接, 依然可以采用本地时间作为时间服务器为集群中的其它节点提供时间同步 server 127.127.1.0 fudge 127.127.1.0 stratum 10
-
修改 /etc/sysconfig/ntpd文件
让硬件时间与系统时间一起同步
vim /etc/sysconf/ntpd SYNC_HWCLOCK=yes
-
重新启动ntpd服务
service ntpd restart
-
设置ntpd服务开机启动
systemctl enable ntpd #chkconfig ntpd on
其它服务器配置
-
在其它机器配置10分钟与时间服务器同步一次
crontab -e 编写定时任务如下 */10 * * * * ntpdate ip
-
修改任意机器时间
date -s "2018-11-11 11:11:11"
-
十分钟后查看是否时间同步