一. 分析
- 准备3台客户机(全部都要关闭防火墙,设置静态IP,设置主机名称)
- 安装jdk
- 配置环境变量
- 安装hadoop
- 配置环境变量
- 安装ssh
- 配置集群
- 启动测试集群
1, 2, 3,4步骤不再重复,详情请参考之前的博客
(一) scp
- scp可以实现服务器与服务器之间的数据拷贝
- 案例实操
(1). 将hadoop101中的/opt/module和/opt/spftware文件拷贝到hadoop102, hadoop103和hadoop104上去。
[root@hadoop101 /]# scp -r /opt/module root@hadoop102:/opt
[root@hadoop101 /]# scp -r /opt/module root@hadoop102:/opt
[root@hadoop101 /]# scp -r /opt/module root@hadoop103:/opt
[root@hadoop101 /]# scp -r /opt/module root@hadoop103:/opt
[root@hadoop101 /]# scp -r /opt/module root@hadoop104:/opt
[root@hadoop101 /]# scp -r /opt/module root@hadoop104:/opt
(2)将hadoop102服务器上的文件拷贝到当前用户下
[root@hadoop101 opt]# scp root@hadoop102:/etc/profile /opt/tmp
(3)实现两台远程机器之间的文件传输(hadoop103主机文件拷贝到hadoop104主机上
[starfish@hadoop102 test]$ scp starfish@hadoop103:/opt/test/haha starfish@hadoop104:/opt/test
SSH无密码登录
(1)配置ssh
a. 进入到我的home目录的.ssh目录 cd ~/.ssh
b. 生成公钥和私钥:
ssh-keygen -t rsa
然后敲三次回车键,就会生成两个文件id_rsa(私钥),id_rsa.pub(公钥)
c. 将公钥拷贝到要免密登录的目标机器上去
ssh-copy-id 192.168.10.102
.
(2) .ssh文件夹下的文件功能解释
a. ~/.ssh/known_hosts :记录ssh访问过的计算机的公钥
b. id_rsa: 生成的私钥
c. id_rsa.pub:生成的公钥
d. authorized_keys: 存放授权过的免密登录服务器的公钥
(3)基本语法: ssh 另一台电脑的ip地址
rsync
rsync 远程同步工具,主要用于备份和镜像,具有速度快,避免复制重复相同内容和支持符号链接的优点。
(1) 查看rsync使用说明
man rsync | more
(2) 基本语法
rsync -rvl
p
d
i
r
/
pdir/
pdir/fname
u
s
e
r
@
h
a
d
o
o
p
user@hadoop
user@hadoophost:$pdir
命令 命令参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
选项:
-r: 递归
-v 显示复制的过程
-l 拷贝符号连接
(3) 案例实操
把本机/opt/tmp目录同步到hadoop103服务器的root用户下的/opt/tmp目
rsync -rvl /opt/tmp/* root@hadoop103:/opt/tmp
编写集群分发脚本xsync
(1) 需求分析:循环复制文件到所有节点的相同目录下。
a. 原始拷贝:
rsync -rvl /opt/module root@hadoop103:/opt/
b. 期望脚本:
xsync 要同步的文件名称
c. 在/usr/local/bin这个目录下存放的脚本,可以是在系统任何地方直接执行,需要制定路径
(2) 案例实操
a. 在/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=103; host<105; host++); do
#echo $pdir/$fname $user@hadoop$host:$pdir
echo ------------------hadoop$host--------------------------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done
(3) 修改脚本xsync具有执行权限
[root@hadoop102 bin]# chmod a+x xsync
(4)调用脚本形式: xsync 文件名称
编写分发脚本xcall
(1)需求分析: 在所有主机上同时执行相同的命令
xcall + 命令
(2) 具体实现
a. 在/usr/local/bin 目录下创建xcall文件,文件内容如下:
#!/bin/bash
pcount=$#
if(pcount==0);then
echo no args;
exit;
fi
echo ----------------------localhost----------------
$@
for(host=101; host<=108; host++); do
echo ---------hadoop$host-------------------
ssh hadoop$host $@
done
(3)修改脚本xcall的执行权限
[root@hadoop102 bin]# chmod a+x xcall
(4)调用脚本形式:xcall操作命令
[root@hadoop102~]# xcall rm -rf /opt/tmp/profile
配置集群
(1) 集群部署规划
(2) 配置文件
a. core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>
hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79**加粗样式**
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
</configuration>
slaves:
hadoop102 hadoop103 hadoop104
yarn.env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
yarn-site.xml
<configuration><!-- Site specific YARN configuration properties --><!-- reducer获取数据的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
</configuration>
mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.7.0_79
mapred-site.xml
<configuration><!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(3) 在集群上分发以上所有的文件
cd /opt/module/hadoop-2.7.2/etc/hadoop
xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves
集群启动及测试
(1) 启动集群
A. 如果集群是第一次启动,需要格式化namenode
[root@hadoop102 hadoop-2.7.2]# bin/hdfs namenode -format
B.启动HDFS:
[root@hadoop102 hadoop-2.7.2]# sbin/start-dfs.sh
[root@hadoop102 hadoop-2.7.2]# jps
[root@hadoop103 hadoop-2.7.2]#
[root@hadoop104 hadoop-2.7.2]#
C. 启动yarn
sbin/start-yarn.sh
注意:namenode和resourcemanager如果不是在同一台机器,不能在namenode上启动yarn.