实现hadoop完全分布式的部署:
准备工作:
1)准备至少3台客户机(关闭防火墙、修改静态ip、修改主机名称、修改主机名和ip映射)
2)安装jdk
3)配置环境变量
4)安装hadoop
5)配置环境变量
6)安装ssh
7)配置集群
8)启动测试集群
1、SSH无密码登录
1)配置ssh
(1)基本语法,ssh 另一台电脑的ip地址
[victor@node1 ~]$ ssh node2
Last login: Wed Feb 28 09:39:13 2018
[victor@node2 ~]$ exit
logout
Connection to node2 closed.
[victor@node1 ~]$
(2)ssh server服务(默认有)
[root@node1 ~]# rpm -qa | grep ssh
[root@node1 ~]# yum install -y openssh-server
[root@node1 ~]# service sshd restart
[root@node1 ~]# ssh node2
2)无密钥配置
(1)进入到我的home目录
[victor@node1 ~]$ cd ~/.ssh
(2)生成公钥和私钥
[victor@node1 .ssh]$ ssh-keygen -t rsa
注:敲三个回车,生成id_rsa(私钥)、id_rsa.pub(公钥)两个文件
(3)将公钥拷贝到要免密登录的目标机器上
[victor@node1 .ssh]$ ssh-copy-id node1
[victor@node1 .ssh]$ ssh-copy-id node2
[victor@node1 .ssh]$ ssh-copy-id node3
(4)免密登录原理
rsync我的配置:
#!/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=103; host<=104; host++)); do
#echo $pdir/$fname $user@hadoop$host:$pdir
echo -e "\n --------------- hadoop$host ----------------"
xjps的配置:
#!/bin/bash
user=`whoami`
for((host=102; host<=104; host++)); do
echo -e "\n================ $user@hadoop$host ================"
ssh $user@hadoop$host 'jps'
done
hadoop的基本配置文件:
core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.8.2/data/tmp</value>
</property>
HDFS模块如下
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
export HADOOP_LOG_DIR=/opt/module/hadoop/logs
hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 指定secondarynamenode位置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node3:50090</value>
</property>
<!-- 关闭HDFS 检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
slaves配置文件:(这里配置你自己的三台机器hostname)
node1
node2
node3
尖叫提示: 必须手写保证没有空格,首次编辑用vim编辑器防止出现乱码
Yarn 模块如下
yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
export YARN_LOG_DIR=/opt/module/hadoop/logs
yarn-site.xml
<!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定YARN的ResourceManager的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node2</value>
</property>
Mapreduce 模块如下
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置文件完成后,可以启动集群:
集群启动
1)如果集群是第一次启动,需要格式化namenode
[victor@node1 hadoop-2.8.2]$ bin/hdfs namenode -format
2)启动HDFS
[victor@node1 hadoop-2.8.2]$ sbin/start-dfs.sh
如要查看则:直接输入xjps命令:我的是
[root@hadoop102 hadoop-2.7.2]# xjps
================ root@hadoop102 ================
9078 Jps
7690 NodeManager
7227 NameNode
7340 DataNode
================ root@hadoop103 ================
7360 ResourceManager
8675 Jps
7125 DataNode
7480 NodeManager
================ root@hadoop104 ================
8569 Jps
7084 DataNode
7356 NodeManager
7165 SecondaryNameNode
3)启动yarn
[victor@node2 hadoop-2.8.2]$ sbin/start-yarn.sh
注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode所在机器上启动 yarn,应该在ResouceManager所在的机器上启动yarn。
启动起来集群,则可以进行一些测试,比如上传文件等。