一、Hadoop集群(完全分布式)
1. 准备工作
- 1.1 拿模板机克隆三台虚拟机(DT100,DT101,dt102),其中DT100作为master,DT101,102作为slaves
- A.在master安装必要工具
yum -y install vim
yum -y install lrzsz
- B.上传jdk和hadoop安装包到/opt/software
- C.创建普通用户dt,修改密码为dt
useradd dt
passwd dt
- D.修改hosts文件,增加主机名与IP映射.
- E.修改windows的hosts映射.
C:\Windows\System32\drivers\etc - F. 修改每个机器的静态IP地址
- G.修改主机名
- H.为xshell工具创建连接
- 1.2 使用rsync 编写分发脚本
cp命令 与scp和rsync
cp -r source dest #从s拷贝到d
cp -r /dt/123 /dt/bcd
scp -r s d # 远程拷贝
scp -r dt100:/opt/module dt101:/opt
rsync -av s d
注意:rsync 只能有一个远程和一个本地,不能同时为远程操作.
总结:
1.scp是内容拷贝,rsync是归档拷贝(权限,文件创建时间相同)
2.scp两端都可以是远程,rsync只能有一个是远程.
3.内容拷贝适合第一次,第N次的时候只想把更改的文件发送过去的话,使用rsync它只拷贝差异部分.
集群中同步文件,使用rsync 更方便.
使用rsync编写一个分发脚本
vi qq
#!/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<103; host++)); do
echo ------------------- hadoop dt$host --------------
rsync -av $pdir/$fname $user@dt$host:$pdir
done
- 1.3 编写jpsall脚本
通过master 查看其它集群节点的jps信息
原理:
ssh 用户名@主机地址 命令
例如 ssh dt@101 mkdir 123
注意:
ssh 登陆之后,不会加载profile文件环境变量.
ssh登陆之后,只会加载/etc/bashrc文件中的配置信息.
两种解决方案:
A.通过代码加载profile
source /etc/prifile
B.使用命令程序的绝对路径
/opt/m/jdk/jps
不建议直接修改bashrc,因为所有集群机器都要修改。
vi jpsall
#!/bin/bash
for((i=100;i<103;i++)) do
echo --------------------------- dt$i ----------------------
ssh dt@dt$i /opt/module/jdk1.8.0_144/bin/jps
done
:wq!
sudo cp jpsall /bin/
- 1.4 设置共享文件夹(可选)
右键虚拟机名称->设置->选项(选项卡)->将共享文件夹设置为"总是启用"->添加需要共享的文件夹->确定
共享之后,在linux系统中的/mnt/hgfs 文件夹中读取内容
2. 集群规则
假设当前要做一个最小规模集群,其中3台机器负责存储文件.
角色如下:
NN(1) DN(3) 2NN(1) RM(1) NM(3)
NN与2NN不应该放在同一个服务器上.
三、集群配置
#### 1. 配置3台服务器的NPPFTP
2. 修改核心配置文件core.site.xml(nn配置)
<property>
<name>fs.defaultFS</name>
<value>hdfs://dt100:9000</value>
</property
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/m/h/data</value>
</property
3.配置HDFS
- A.hadoop.env.sh 配置JAVA_HOME
- B.hdfs.site.xml,默认副本数3
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- 2NN配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>dt101:50090</value>
</property>
####4.Yarn配置
- A.yarn.env.sh 配置JAVA_HOME
- B.yarn.site.xml
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>dt102</value>
</property>
####5.MapReduce配置
- A.mapred.env.sh 配置JAVA_HOME
- B.mapred.site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
####6.分发配置文件
qq etc
7.手工启动
- A.先格式化NN
hdfs namenode -format
- B.在DT100上启动NN
hadoop-daemon.sh start namenode
jps
- C.启动DN(DT100,DT101,DT102)
hadoop-daemon.sh start datanode
- D.在DT101启动2NN
hadoop-daemon.sh start secondarynamenode
- E.http://dt100:50070 查看启动情况
- F.启动RM(102)
yarn-daemon.sh start resourcemanager
- G.启动NM(100,101,102)
yarn-daemon.sh start nodemanager