Hadoop集群搭建(完全分布式)
Hadoop集群搭建(完全分布式)
一,Hadoop运行环境搭建
1.1 虚拟机网络模式设置为NAT
重新启动电脑:
reboot
**
1.2 克隆一台新建的虚拟机
**
命名为Hadoop101
启动虚拟机
1.3修改静态IP
1…3.1修改虚拟机的MAC地址
在终端中输入:
#vim /etc/udev/rules.d/70-persistent-net.rules
进入这个界面,将eth0行删除;将eth1改为eth0,同时复制物理IP地址
1.3.2修改IP地址
#vim /etc/sysconfig/network-scripts/ifcfg-eth0
1.3.3 重启网卡
#vim service network restart
如果报错重启虚拟机
#reboot
1.4 修改主机名
1.4.1 修改Linux的hosts文件
1.查看主机名
#hostname
2.修改主机名
#vim /etc/sysconfig/network
修改文件中主机名称
HOSTNAME=hadoop101
注意:主机名称不要有“_”下划线
3.保存退出
4.打开 /etc/hosts添加如下内容:
192.168.60.101 hadoop101
192.168.60.102 hadoop102
192.168.60.103 hadoop103
5.重启设备
1.4.2修改windows的hosts文件
1.进入 C:\Windows\System32\drivers\etc 路径 打开hosts文件添加如下内容:
注意:网址使用的是当前电脑的网址
192.168.60.101 hadoop101
192.168.60.102 hadoop102
192.168.60.103 hadoop103
1.5关闭防火墙
1.查看防火墙状态
#chkconfig iptables --list
2.关闭防火墙
#chkconfig iptables off
1.6 在opt目录下创建文件夹
1.创建hadoop用户
#adduser hadoop
#passwd hadoop
2.设置hadoop用户具有root权限
#vim /etc/sudoers
强制保存:
:wq!
3.在/opt目录下创建文件夹
#cd /opt
#mkdir module software
修改所有者
#chown hadoop:hadoop module software
#ls -al
1.7 安装JDK
1.如果jdk版本低于1.7,卸载该jdk:
#java -version 查看jdk版本
2.将jdk,hadoop导入到opt目录下的software文件夹下面
3.查看导入是否成功
4.解压jdk到/opt/module目录下
#tar -zxvf jdk1.8.0_162.tar.gz -C /opt/module
5.配置jdk环境变量
(1)先获取 jdk 路径:
#cd /opt/module/jdk1.8.0_162
#pwd 复制jdk路径
(2)打开/etc/profile 文件:
#vi /etc/profile
在 profie 文 件 末 尾 添 加 jdk 路 径 :
export JAVA_HOME=/opt/module/jdk1.8.0_162
export PATH=JAVA_HOME/bin
(3)保存后退出
(4)让修改后的文件生效:
#source /etc/profile
(5)测试 jdk 安装成功
#java -version
1.8 创建另外两台虚拟机
1.将hadoop101关机并克隆两台虚拟机hadoop102,hadoop103
2.将克隆出来的两台虚拟机执行如下操作:
修改mac地址
修改IP地址
重启网卡
修改主机名
1.9安装Hadoop
注:在hadoop101主机上完成以下操作
1.进入到1.Hadoop 安装包路径下:
#cd /opt/software/
2.解压安装文件到/opt/module 下面
#tar -zxf hadoop-2.7.6.tar.gz -C /opt/module/
3.查看是否解压成功
#ls /opt/module/ hadoop-2.7.6
4.在/opt/module/hadoop-2.7.6/etc/hadoop 路径下配置hadoop-env.sh
(1)Linux 系统中获取 jdk 的安装路径:
#echo $JAVA_HOME
(2)修改 hadoop-env.sh 文件中 JAVA_HOME 路径:
#vi hadoop-env.sh
修改JAVA_HOME 如下
export JAVA_HOME=/opt/module/jdk1.8.0_162
5.将 hadoop 添加到环境变量
(1)获取 hadoop 安装路径:
#cd /opt/module/hadoop-2.7.6
#pwd 复制hadoop路径
(2)打开/etc/profile 文件:
#vi /etc/profile
在 profie 文件末尾添加 hadoop 路径:
export HADOOP_HOME=/opt/module/hadoop-2.7.6
export PATH=HADOOP_HOME/bin:$HADOOP_HOME/sbin
(3)保存后退出:
:wq
(4)让修改后的文件生效:
#source /etc/profile
6.修改/opt 目录下的所有文件所有者为hadoop
#chown hadoop:hadoop -R /opt/
7.通过scp命令将hadoop101上的文件拷到hadoop102和hadoop103上
7.1拷贝module文件夹
在hadoop101上执行:
#scp -r /opt/module/ aaa@qq.com:/opt
#scp -r /opt/module/ aaa@qq.com:/opt
7.2拷贝hadoop101服务器上的/etc/profile
在Hadoop102和hadoop103上分别执行:
#scp aaa@qq.com:/etc/profile /etc/profile
8.ssh免密码登录
1.无**配置
1.1进入到我的 home 目录
#cd ~
1.2生成公钥和私钥:
#ssh-****** -t rsa
然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)
1.3将公钥拷贝到要免密登录的目标机器上
#ssh-copy-id hadoop101
#ssh-copy-id hadoop102
#ssh-copy-id hadoop103
注:需要分别在三台服务器上执行免密操作
9.切换到hadoop 用户
#su hadoop
10.编写集群分发脚本
注:以下操作均在hadoop用户下执行
1.需求分析:循环复制文件到所有节点的相同目录下。
2.案例实操:
(1)在/usr/local/bin 目录下创建 xsync 文件,文件内容如下:
# touch xsync
#vim xsync
#!/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=3; host<5; host++));
do
#echo $pdir/$fname aaa@qq.com$host:$pdir
echo --------------- hadoop0$host ----------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(2)修改脚本 xsync 具有执行权限
# chmod 777 xsync
#chown hadoop:hadoop -R xsync
11.编写集群操作脚本
1.需求分析:在所有主机上同时执行相同的命令xcall +命令
2.具体实现
(1)在/usr/local/bin 目录下创建 xcall 文件,文件内容如下:
# touch xcall
#vi xcall
#!/bin/bash
pcount=$#
if((pcount==0));
then
echo no args;
exit;
fi
echo -------------localhost----------
aaa@qq.com
for((host=101; host<=104; host++));
do
echo ----------hadoop$host---------
ssh hadoop$host aaa@qq.com
done
(2)修改脚本 xcall 具有执行权限
#chmod 777 xcall
#chown hadoop:hadoop xcall
12.配置集群
1.集群部署规划
hadoop101 hadoop102 hadoop103
HDFS NameNode DataNode SecondaryNameNode
DataNode DataNode
YARN NodeManager ResourceManager,NodeManger NodeManager
2.配置文件
(1)core-site.xml
#vim core-site.xml
<!-- 指定HDFS 中 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop101:9000</value>
</property>
<!-- 指定 hadoop 运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.6/data/tmp</value>
</property>
(2)hdfs
hadoop-env.sh
#vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_162
hdfs-site.xml
#vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop103:50090</value>
</property>
slaves
#vim slaves
hadoop101
hadoop102
hadoop103
(3)yarn
yarn-env.sh
#vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_162
yarn-site.xml
#vi yarn-site.xml
<configuration>
<!-- reducer 获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 YARN 的 ResourceManager 的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop102</value>
</property>
</configuration>
(4)mapreduce
mapred-env.sh
#vim mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_162
mapred-site.xml
#vim mapred-site
<configuration>
<!-- 指定 mr 运行在 yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.在集群上分发以上所有文件
$ xsync/opt/module/hadoop-2.7.6/etc/hadoop/core-site.xml
$ xsync /opt/module/hadoop-2.7.6/etc/hadoop/yarn-site.xml
$ xsync /opt/module/hadoop-2.7.6/etc/hadoop/slaves
...
注:以上配置文件需要修改成相应的服务器名称
13.集群启动及测试
1.启动集群
(1)如果集群是第一次启动,需要格式化 namenode
hadoop101上执行:
#bin/hdfs namenode -format
(2)启动HDFS:
hadoop101上执行
#sbin/start-dfs.sh
通过xcall脚本查看三台服务器进程
#xcall /opt/module/jdk路径/bin/jps
(3)启动yarn
hadoop102上执行:
$ sbin/start-yarn.sh
注:Namenode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 yarn,应该在 ResouceManager 所在的机器上启动yarn。
14.集群停止方式
1.各个服务组件逐一启动
(1)分别启动 hdfs 组件
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
(2)启动 yarn
yarn-daemon.sh start|stop resourcemanager|nodemanager
2.各个模块分开启动(配置 ssh 是前提)常用
(1)整体启动/停止 hdfs start-dfs.sh
stop-dfs.sh
(2)整体启动/停止 yarn start-yarn.sh
stop-yarn.sh
3.全部启动(不建议使用)
start-all.sh
stop-all.sh