一、特点
多个节点一起运行。
二、分析
1)准备3台客户机(关闭防火墙、静态ip、主机名称)
2)安装jdk
3)配置环境变量
4)安装hadoop
5)配置环境变量
6)安装ssh
7)配置集群
8)启动测试集群
三、虚拟机准备
克隆三个虚拟机,修改IP,主机名和IP映射即可
四、scp命令
说明:scp可以实现服务器与服务器之间的数据拷贝。
实操:
将zhiyou101中/usr/local/java和/usr/local/hadoop文件拷贝到zhiyou102、zhiyou103上。
[root@zhiyou101 /]# scp -r /usr/local/java/ root@zhiyou102:/usr/local
[root@zhiyou101 /]# scp -r /usr/local/hadoop/ root@zhiyou102:/usr/local
[root@zhiyou101 /]# scp -r /usr/local/java/ root@zhiyou103:/usr/local
[root@zhiyou101 /]# scp -r /usr/local/hadoop/ root@zhiyou103:/usr/local
五、rsync命令
说明:
rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
基本语法:
rsync -rvl $pdir/$fname $user@test$host:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
案例实操:
把本机/var/tmp目录同步到test222服务器的root用户下的/var/tmp目录
rsync –rvl /var/tmp/* root@test222:/var/tmp
六、编写xsync脚本命令
1)需求分析
循环复制文件到所有节点的相同目录下。
2) 案例实操
1.在/usr/local/bin目录下创建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=101; host<104; host++)); do #echo $pdir/$fname $user@zhiyou$host:$pdir echo --------------- zhiyou$host ---------------- rsync -rvl $pdir/$fname $user@zhiyou$host:$pdir done |
2.修改脚本 xsync 具有执行权限
[root@test221bin]# chmod a+x xsync
3.调用脚本形式:xsync 文件名称
七、ssh免密登陆
1)进入到我的家目录
cd ~/.ssh
2)生成公钥和私钥
ssh-keygen -t rsa
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
3)将公钥拷贝到要免密登录的目标机器上
ssh-copy-id 192.168.241.202
八、部署完全分布式
1)集群部署规划
2)配置文件
(1)core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://zhiyou101:9000</value> </property>
<!-- 指定hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/var/hadoop-2.7.3/data/tmp</value> </property> |
(2)Hdfs
1.hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8
|
2.hdfs-site.xml
<configuration> <!-- 指定HDFS副本的数量 --> <!-- <property> <name>dfs.replication</name> <value>3</value> </property> --> <property> <name>dfs.namenode.secondary.http-address</name> <value>zhiyou102:50090</value> </property> </configuration> |
3.slaves
zhiyou101 zhiyou102 zhiyou103 |
(3)yarn
1.yarn-env.sh
export JAVA_HOME=/usr/local/jdk1.8 |
2.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>zhiyou103</value> </property> |
(4)mapreduce
1.mapred-env.sh
export JAVA_HOME=/usr/local/jdk1.8 |
2.mapred-site.xml
<!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> |
3)在集群上分发以上所有文件
[root@zhiyou101 etc]# xsync hadoop/
九、集群启动及测试
(0)如果集群是第一次启动,需要格式化namenode
(1)启动HDFS
[root@zhiyou101 ~]# start-dfs.sh
[root@zhiyou101 var]# jps
2306 QuorumPeerMain
8194 Jps
7864 NameNode
7966 DataNode
[root@zhiyou102 var]# jps
2322 QuorumPeerMain
4034 Jps
3962 DataNode
[root@zhiyou103 var]# jps
4470 Jps
2312 QuorumPeerMain
4330 DataNode
4429 SecondaryNameNode
(2)启动yarn
[root@zhiyou102 var]# start-yarn.sh
注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在
ResouceManager所在的机器上启动yarn
(3)上传文件等操作
这里不再演示
十、Hadoop启动停止方式
1)各个服务组件逐一启动
(1)分别启动hdfs组件
(2)启动yarn
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
十一、配置集群常见问题
1)防火墙没关闭、或者没有启动yarn
2)主机名称配置错误
/etc/hosts
3)ip地址配置错误
4)ssh没有配置好
5)配置文件修改不细心
6)未编译源码
7)datanode不被namenode识别问题
Namenode在format初始化的时候会形成两个标识,blockPoolId和clusterId。新的datanode加入时,会获取这两
个标识作为自己工作目录中的标识。
一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不会被
namenode识别。
解决办法,删除datanode节点中的数据后,再次重新格式化namenode。
8)不识别主机名称
问题:
解决办法:
(1)在/etc/hosts文件中添加192.168.1.102 hadoop102
(2)主机名称不要起hadoop hadoop000等特殊名称
9)datanode和namenode进程同时只能工作一个。