前期准备
准备三台服务器,内存4G,硬盘50G
安装好Linux,笔者使用Centos 6.8 操作系统
1
2
3/boot 200M
/swap 2g
/ 剩余安装VMTools(针对VM虚拟机,若直接使用云主机便不需要这个)
关闭防火墙
1
2sudo service iptables stop
sudo chkconfig iptables off设置静态IP,改主机名
1
vim /etc/sysconfig/network-scripts/ifcfg-eth0
1
2
3
4
5
6
7
8
9
10
11
12
13
改成
```shell
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="eth0"
IPADDR=192.168.5.101
PREFIX=24
GATEWAY=192.168.5.2
DNS1=192.168.5.21
2
3vim /etc/sysconfig/network
HOSTNAME=hadoop101配置/etc/hosts
1 | 1. vim /etc/hosts |
创建一个一般用户corp,给他配置密码
1
2useradd corp
passwd corp配置这个用户为sudoers
1
2
3vim /etc/sudoers
root ALL=(ALL) ALL
corp ALL=(ALL) NOPASSWD:ALL保存时wq!强制保存
在/opt目录下创建两个文件夹module和software,并把所有权赋给corp
1
2mkdir /opt/module /opt/software
chown corp:corp /opt/module /opt/software关机,快照,克隆
从这里开始要以一般用户登陆
克隆的虚拟机改IP
搞一个分发脚本
1
2cd ~
vim xsync1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
```shell
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if ((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=101; host<104; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
donechmod +x xsync
sudo cp xsync /bin
sudo xsync /bin/xsync
配置免密登陆
1. 生成密钥对 ssh-keygen -t rsa 三次回车 2. 发送公钥到本机 ssh-copy-id hadoop102 输入一次密码 3. 分别ssh登陆一下所有虚拟机 ssh hadoop103 exit ssh hadoop104 exit 4. 把/home/corp/.ssh 文件夹发送到集群所有服务器 xsync /home/corp/.ssh
开始安装Hadoop集群环境
在一台机器上安装Java和Hadoop,并配置环境变量,并分发到集群其他机器
1. 拷贝文件到`/opt/software`,两个tar包 2. ```tar -zxf h"+tab" -C /opt/module``` 3. ```tar -zxf j"+tab" -C /opt/module ``` 4. ```sudo vim /etc/profile``` 在文件末尾添加
1
2
3
4
5
6JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin保存
source /etc/profile
sudo xsync /etc/profile
- 在其他机器上分别执行
source /etc/profile
所有配置文件都在$HADOOP_HOME/etc/hadoop
首先配置hadoop-env.sh,yarn-env.sh,mapred-env.sh文件,配置Java_HOME
在每个文件第二行添加 export JAVA_HOME=/opt/module/jdk1.8.0_144配置Core-site.xml
1
2
3
4
5
6
7
8
9
10
11<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>配置hdfs-site.xml
1
2
3
4
5
6
7
8
9
10<!-- 数据的副本数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>配置yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23<!-- Site specific YARN configuration properties -->
<!-- Reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>配置mapred-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop104:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop104:19888</value>
</property>1
2
3
4
5
启动历史服务器:
```shell
mr-jobhistory-daemon.sh start historyserver配置Slaves
1
2
3hadoop102
hadoop103
hadoop104分发配置文件
1
xsync /opt/module/hadoop-2.7.2/etc
- 格式化Namenode 在hadoop102
1 | hdfs namenode -format |
- 启动hdfs
1 | start-dfs.sh |
在配置了Resourcemanager机器上执行
在Hadoop103上启动start-yarn.sh测试一下
1
2
3
4
5mkdir input
vim input/input
abc
def efg
asdhadoop fs -put input /
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
25 关毕集群
1 | stop-dfs.sh |
- 单个关闭
1 | hadoop-daemon.sh start namenode或datanode |
如果集群出了问题
1 | stop-dfs.sh |
回到 21