一、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不应该放在同一个服务器上.

hadoop完全分布式克隆 hadoop完全分布式集群_xml

三、集群配置

#### 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