一、过程分析

  1、准备3台客户机(关闭防火墙、修改静态ip、主机名称)

  2、安装JDK

  3、配置环境变量

  4、安装Hadoop

  5、配置集群

  6、单点启动

  7、配置ssh免密登录

  8、群起并测试集群

二、编写集群分发脚本 xsync

1、scp(secure copy)安全拷贝

  1)scp定义

    scp可以实现服务器与服务器之间的数据拷贝。

  2)基本语法

    scp -r 文件  用户名@主机:目标路径/名称

  3)案例

    a、在hadoop101上,将hadoop101中 /opt/module 目录下的软件拷贝到 hadoop102上。

[hadoop@hadoop /]$ scp -r /opt/module  root@hadoop102:/opt/module

    b、在hadoop103上,将hadoop101服务器上的/opt/module 目录下的软件拷贝到 hadoop103上。

[hadoop@hadoop opt]$sudo scp -r hadoop@hadoop101:/opt/module root@hadoop103:/opt/module

    c、在hadoop103上操作hadoop101 中/opt/module 目录下的软件 拷贝到 hadoop104上。

[hadoop@hadoop103 opt]$ scp -r hadoop@hadoop101:/opt/module root@hadoop104:/opt/module

   注意:拷贝过来的/opt/module目录,别忘了在hadoop102、hadoop103、hadoop104上修改所有文件的所有者和所有者组。

      sudo chown hadoop:hadoop -R /opt/module

    d、分别将hadoop101 中/etc/profile 文件拷贝到hadoop102、103、104、的/etc/profile上。

[hadoop@hadoop101 ~]$ sudo scp /etc/profile root@hadoop102:/etc/profile
[hadoop@hadoop101 ~]$ sudo scp /etc/profile root@hadoop103:/etc/profile
[hadoop@hadoop101 ~]$ sudo scp /etc/profile root@hadoop104:/etc/profile

    注意:拷贝完成后,需要source一下

2、rsync 远程同步工具

  rsync主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接的优点。

  rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp是把所有文件都复制过去。

  1)语法

    rsync  -rvl  要拷贝的文件路径/名称   目的用户@主机:目的路径/名称

   选项参数说明:

  

选项 功能
-r 递归
-v 显示复制过程
-l 拷贝符号连接

  2)案例

    a、把hadoop101 机器上的 /opt/software 目录同步到 hadoop102 服务器的 root用户下的 /opt目录

[hadoop@hadoop101 opt]$ rsync -rvl /opt/software/ root@hadoop102:/opt/software

3、xsync集群分发脚本

  1)需求:循环复制文件到所有节点的相同目录下

  2)分析

    a、rsync命令原始拷贝:

      rsync -rvl /opt/module root@hadoop103:/opt/

    b、期望脚本:

      xsync 要同步的文件名称

    c、说明:在/home/hadoop/bin 这个目录下存放的脚本,hadoop用户可以在系统任何地方直接执行。

  3)脚本实现
    a、在/home/hadoop 目录下创建bin 目录,并在 bin目录下创建xsync文件,文件内容如下:

[hadoop@hadoop102 ~]$ mkdir bin
[hadoop@hadoop102 ~]$ cd bin/
[hadoop@hadoop102 bin]$ touch xsync
[hadoop@hadoop102 bin]$ vi xsync

    在该文件中编写如下代码:

#!/bin/bash
# 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==)); then
echo no args;
exit;
fi # 获取文件名称
p1=$
fname=`basename $p1`
echo fname=$fname # 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir # 获取当前用户名称
user=`whoami` # 循环
for((host=; host<; host++)); do
echo ------------------- hadoop$host --------------
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

    b、修改脚本 xsync 具有执行权限   

[hadoop@hadoop102 bin]$ chmod  xsync

    c、调用脚本形式:xsync 文件名称

[hadoop@hadoop102 bin]$ xsync /home/hadoop/bin

    注意:如果将xsync 放到/home/hadoop/bin 目录下仍然不能实现全局使用,可以将xsync 移动到/usr/local/bin 目录下。

三、集群配置

1、集群部署规划

  hadoop102 hadoop103 hadoop104
HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

YARN

NodeManager

ResourceManager

NodeManager

NodeManager

2、配置集群

  1)核心配置文件

  配置core-site.xml

[hadoop@hadoop102 hadoop]$ vi core-site.xml 

  在该文件中编写如下配置:

<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property> <!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

  2)HDFS 配置文件

  配置 hadoop-env.sh

[hadoop@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_131

  配置 hdfs-site.xml

[hadoop@hadoop102 hadoop]$ vi hdfs-site.xml

  在该文件中编写如下配置:

<property>
<name>dfs.replication</name>
<value>3</value>
</property> <!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property> 

  3)YARN 配置文件

  配置 yarn-env.sh

[hadoop@hadoop102 hadoop]$ vi yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_131

  配置 yarn-site.xml

[hadoop@hadoop102 hadoop]$ vi 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>hadoop103</value>
</property>

  4)MapReduce 配置文件

  配置 mapred-env.sh  

[hadoop@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_131

  配置 mapred-site.xml

[hadoop@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml

[hadoop@hadoop102 hadoop]$ vi mapred-site.xml

  在该文件中增加如下配置

<!-- 指定MR运行在Yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

3、在集群上分发配置好的 Hadoop 配置文件

[hadoop@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7./

4、查看文件分发情况

[hadoop@hadoop103 hadoop]$ cat /opt/module/hadoop-2.7./etc/hadoop/core-site.xml

四、集群单点启动

1、如果集群是第一次启动,需要格式化 NameNode

[hadoop@hadoop102 hadoop-2.7.]$ hadoop namenode -format

  注意:格式化完后,需要将生成的保存文件的目录(data)同步到其他机器上。

2、在 hadoop102 上启动 NameNode

[hadoop@hadoop102 hadoop-2.7.]$ hadoop-daemon.sh start namenode
[hadoop@hadoop102 hadoop-2.7.]$ jps
NameNode

3、在 hadoop102、hadoop103 以及 hadoop 104上分别启动 DataNode

[hadoop@hadoop102 hadoop-2.7.]$ hadoop-daemon.sh start datanode
[hadoop@hadoop102 hadoop-2.7.]$ jps
NameNode
Jps
DataNode
[hadoop@hadoop103 hadoop-2.7.]$ hadoop-daemon.sh start datanode
[hadoop@hadoop103 hadoop-2.7.]$ jps
DataNode
Jps
[hadoop@hadoop104 hadoop-2.7.]$ hadoop-daemon.sh start datanode
[hadoop@hadoop104 hadoop-2.7.]$ jps
Jps
DataNode

4、思考:每次都一个一个节点启动,如果节点数目增加到1000个 怎么办?

五、SSH 无密登录配置

1、无密钥配置

  1)免登录原理

  2)生成公钥和私钥

[hadoop@hadoop102 .ssh]$ ssh-keygen -t rsa

  然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

  3)将公钥拷贝到要免密登录的目标机器上  

[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop102
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop103
[hadoop@hadoop102 .ssh]$ ssh-copy-id hadoop104

  注意:还需要在hadoop102 上采用 root账号,配置一下无密登录到 hadoop102、hadoop103、hadoop104。

       还需要在hadoop103 上采用 hadoop账号,配置一下无密登录到hadoop102、hadoop103、hadoop104 服务器上。

2、.ssh 文件夹下(~/.ssh)的文件功能解释

known_hosts 记录ssh访问过计算机的公钥(public key)
id_rsa 生成的私钥
id_rsa.pub 生成的公钥
authorized_keys 存放授权过的无密登录服务器公钥

 六、群起集群

1、配置 slaves

/opt/module/hadoop-2.7./etc/hadoop/slaves
[hadoop@hadoop102 hadoop]$ vi slaves

在该文件中增加如下内容:

hadoop102
hadoop103
hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

同步所有节点配置文件:

[hadoop@hadoop102 hadoop]$ xsync slaves

 2、启动集群

  1)如果集群是第一次启动,需要格式化 NameNode(注意格式化之前,一定要先停止上次启动的所有 namenode 和 datanode 进程,然后再删除 data 和 log 数据)

[hadoop@hadoop102 hadoop-2.7.]$ bin/hdfs namenode -format

  2)启动 HDFS

[hadoop@hadoop102 hadoop-2.7.]$ sbin/start-dfs.sh
[hadoop@hadoop102 hadoop-2.7.]$ jps
NameNode
Jps
DataNode
[hadoop@hadoop103 hadoop-2.7.]$ jps
DataNode
Jps [hadoop@hadoop104 hadoop-2.7.]$ jps
DataNode
SecondaryNameNode
Jps

  3)启动 YARN

[hadoop@hadoop103 hadoop-2.7.]$ sbin/start-yarn.sh

  注意:NameNode 和 ResourceManager 如果不是同一台机器,不能在NameNode上启动 YARN,应该在 ResourceManager 所在的机器上启动 YARN。

  4)web 端查看 SecondaryNameNode

    a、浏览器输入:http://hadoop104:50090/status.html

    b、查看SecondaryNameNode,如图

  5)web端查看 HDFS

    a、浏览器输入:http://hadoop102:50070/

    b、进入首页,如图:

3、集群基本测试

  1)上传文件到集群

  上传小文件  

[hadoop@hadoop102 hadoop-2.7.]$ hdfs dfs -mkdir -p /user/atguigu/input
[hadoop@hadoop102 hadoop-2.7.]$ hdfs dfs -put wcinput/wc.input /user/atguigu/input

  上传大文件

[hadoop@hadoop102 hadoop-2.7.]$ bin/hadoop fs -put
/opt/software/hadoop-2.7..tar.gz /user/atguigu/input

  2)上传文件后查看文件存放在什么位置

    a、查看HDFS文件存储路径

[hadoop@hadoop102 subdir0]$ pwd

/opt/module/hadoop-2.7./data/tmp/dfs/data/current/BP--192.168.10.107-/current/finalized/subdir0/subdir0

    b、查看HDFS在磁盘存储文件内容

[hadoop@hadoop102 subdir0]$ cat blk_1073741825
hadoop yarn
hadoop mapreduce
jiangchun
jiangchun

  3)拼接

-rw-rw-r--.  hadoop hadoop  5月   : blk_1073741836
-rw-rw-r--. hadoop hadoop 5月 : blk_1073741836_1012.meta
-rw-rw-r--. hadoop hadoop 5月 : blk_1073741837
-rw-rw-r--. hadoop hadoop 5月 : blk_1073741837_1013.meta [hadoop@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[hadoop@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file
[hadoop@hadoop102 subdir0]$ tar -zxvf tmp.file

  4)下载

[hadoop@hadoop102 hadoop-2.7.]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7..tar.gz ./

七、集群启动/停止方式总结

1、各个服务组件逐一启动/停止

  1)分别启动/停止 HDFS 组件  

hadoop-daemon.sh  start / stop  namenode / datanode / secondarynamenode

  2)启动/停止 YARN

yarn-daemon.sh  start / stop  resourcemanager / nodemanager

2、各个模块分开启动/停止 (前提是配置ssh)

  1)整体启动/停止 HDFS

start-dfs.sh   /  stop-dfs.sh

  2)整体启动/停止 YARN

start-yarn.sh  /  stop-yarn.sh

 八、集群时间同步

  时间同步的方式:找一个机器作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如:每隔十分钟,同步一次时间。

  

  具体步骤:

  1、时间服务器配置(必须root用户)

  1)检查 ntp 是否安装

[root@hadoop102 桌面]# rpm -qa|grep ntp
ntp-4.2.6p5-.el6.centos.x86_64
fontpackages-filesystem-1.41-1.1.el6.noarch
ntpdate-4.2.6p5-.el6.centos.x86_64

  2)修改 ntp 配置文件

[root@hadoop102 桌面]# vi /etc/ntp.conf

  修改内容如下:

  a、修改1(授权 192.168.1.0-192.168.1.255 网段上的所有机器可以从这台机器上查询和同步时间)

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

  b、修改2(集群在局域网中,不使用其他互联网上的时间)

server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst
server .centos.pool.ntp.org iburst 为
#server .centos.pool.ntp.org iburst
#server .centos.pool.ntp.org iburst
#server .centos.pool.ntp.org iburst
#server .centos.pool.ntp.org iburst

  c、添加3(当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)

server 127.127.1.0
fudge 127.127.1.0 stratum

  3)修改 /etc/sysconfig/ntpd 文件

[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd

  增加如下内容(让硬件时间与系统时间一起同步)

SYNC_HWCLOCK=yes

  4)重启 ntpd 服务

[root@hadoop102 桌面]# service ntpd status
ntpd 已停
[root@hadoop102 桌面]# service ntpd start
正在启动 ntpd: [确定]

  5)设置 ntpd 服务开机启动

[root@hadoop102 桌面]# chkconfig ntpd on

  2、其他机器配置(必须root用户)

  1)在其他机器配置 10 分钟与时间服务器同步一次

[root@hadoop103桌面]# crontab -e

  编写定时任务如下:

*/10 * * * * /usr/sbin/ntpdate hadoop102

  2)修改任意机器时间

[root@hadoop103桌面]# date -s "2017-9-11 11:11:11"

  3)十分钟后查看机器是否与时间服务器同步

[root@hadoop103桌面]# date

说明:测试的时候可以将10分钟调整为1分钟,节省时间

Hadoop之搭建完全分布式运行模式的更多相关文章

  1. java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式

    目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问我的gitee pages 目录 Hadoop完全分布式运行模式 步骤分析: 编写集群分发脚本xsync 集群配置 集群部署规划 配置集群 集群单 ...

  2. Hadoop入门 完全分布式运行模式-准备

    目录 Hadoop运行环境 完全分布式运行模式(重点) scp secure copy 安全拷贝 1 hadoop102上的JDK文件推给103 2 hadoop103从102上拉取Hadoop文件 ...

  3. hadoop环境搭建之关于NAT模式静态IP的设置 ---VMware12+CentOs7

    很久没有更新了,主要是没有时间,今天挤出时间验证了一下,果然还是有些问题的,不过已经解决了,就发上来吧. PS:小豆腐看仔细了哦~ 关于hadoop环境搭建,从单机模式,到伪分布式,再到完全分布式,我 ...

  4. Spark On Yarn搭建及各运行模式说明

    之前记录Yarn:Hadoop2.0之YARN组件,这次使用Docker搭建Spark On  Yarn 一.各运行模式 1.单机模式 该模式被称为Local[N]模式,是用单机的多个线程来模拟Spa ...

  5. Hadoop入门 完全分布式运行模式-集群配置

    目录 集群配置 集群部署规划 配置文件说明 配置集群 群起集群 1 配置workers 2 启动集群 总结 3 集群基本测试 上传文件到集群 查看数据真实存储路径 下载 执行wordcount程序 配 ...

  6. 【Hadoop】搭建完全分布式的hadoop

    博客已转移,请借一步说话! http://www.weixuehao.com/archives/577 下面博文已更新,请移步 ↑ 用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机. ...

  7. 【Hadoop】搭建完全分布式的hadoop【转】

    转自:http://www.cnblogs.com/laov/p/3421479.html 下面博文已更新,请移步 ↑ 用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统 ...

  8. hadoop环境搭建-完全分布式

    用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统,一个win7系统.每台电脑装两个虚拟机,要不然内存就满了. 1.安装虚拟机环境 Vmware,收费产品,占内存较大. ...

  9. Hadoop之运行模式

    Hadoop运行模式包括:本地模式.伪分布式以及完全分布式模式. 一.本地运行模式 1.官方Grep案例 1)在hadoop-2.7.2目录下创建一个 input 文件夹 [hadoop@hadoop ...

随机推荐

  1. LeetCode 5 最长对称串

    LeetCode 5 最长对称串 最早时候做这道题的时候还是用Java写的,用的是字符串匹配的思路,一直Time Limit Exceeded.甚至还想过用KMP开优化子串查找. public cla ...

  2. JDBC事务的相关知识

    事务的定义 事务(Transaction):是并发控制的单元,是用户定义的一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位.通过事务,sql server 能将逻辑相关的一组操作绑 ...

  3. redis 无序集合(set)函数

    sAdd 命令/方法/函数 Adds a value to the set value stored at key. If this value is already in the set, FALS ...

  4. x509证书相关内容

    什么是证书 X.509证书,其核心是根据RFC 5280编码或数字签名的数字文档.    实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件,即如RFC ...

  5. mysql授权grant

    本文实例,运行于 MySQL 5.0 及以上版本. MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删 ...

  6. Linux can双机通信(2440+MCP2515 && 51+SJA1000)

    2012-01-12 22:43:24 上图: 自收发成功完成后,那么双机通信就比较容易了.关键就是CAN波特率.ID标识.滤波设置正确即可双机通信了.

  7. Problem 2285 迷宫寻宝 (BFS)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323    Submit: 1247Time Li ...

  8. spring aop 切面编程

    import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Ha ...

  9. nginx运用

    1.nginx的 命令 start nginx 这样,nginx 服务就启动了.打开任务管理器,查看 nginx.exe 进程,有二个进程会显示,占用系统资源,那是相当的少.然后再打开浏览器,输入 h ...

  10. 火狐开发----Web开发者工具

    作为开发Web相关人员,有必要了解这个开发工具,会提供给你不少的帮助,进入正题.经典的F12启动,这个大家都知道. 一 控制台可以很好的帮我们掌控错误,包括文件的加载.JS语法.CSS语法.安全问题. ...