一、过程分析

  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. 多个页面引用公共的头部 header.html 和尾部 footer.html

    方法:通过load()函数,引入公共头部和尾部文件; js代码预览: $(".headerPage").load("header.html"); $(" ...

  2. JDK丨WIN10配置JDK1.8 (解决javac不是内部或外部命令,也不是可运行的程序或批处理文件)

    1.下载JDK,安装. 2.配置JDK. (右键我的电脑 - 属性 - 高级系统设置 - 环境变量.) 2.1 添加系统变量JAVA_HOME 变量名:JAVA_HOME 变量值:C:\Program ...

  3. SpringMVC和Struts2的区别及优势

    1.SpringMVC和Struts2的区别比较 1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方 ...

  4. 北京大学Cousera学习笔记--6-计算导论与C语言基础--计算机的基本原理-认识程序设计语言 如何学习

    1.是一门高级程序语言 低级语言-机器语言(二进制) 汇编语言-load add save mult 高级语言:有利于人们编写理解 2.C语言的规范定义非常的宽泛 1.long型数据长度不短于int型 ...

  5. 北京大学Cousera学习笔记--3-计算导论与C语言基础-第一讲.计算机的基本原理-计算机怎么计算-数的二进制

    思考问题 1.“数”在计算机中是如何表示的? 2.逻辑上“数”是怎么运算的? 3.物理上“数”的计算是怎么实现的? 从图灵机计算问题得出: 1.字母表中的符号越多(几进制),读入移动次数减少,但程序数 ...

  6. 【转】OJ提交时G++与C++的区别

    关于G++ 首先更正一个概念,C++是一门计算机编程语言,G++不是语言,是一款编译器中编译C++程序的命令而已.那么他们之间的区别是什么? 在提交题目中的语言选项里,G++和C++都代表编译的方式. ...

  7. redis 有序集合(zset)函数

    redis 有序集合(zset)函数 zAdd 命令/方法/函数 Adds the specified member with a given score to the sorted set stor ...

  8. parse

    import Parse from 'parse'; import { AsyncStorage } from 'react-native'; // 创建新的子类 var GameScore = Pa ...

  9. [ABP] ASP.NET Zero 5.6.0 之 ASP.NET Zero Power Tools 上手日志

    之前破解了这个工具后,却没有使用它. 现在使用这个小工具,帮我完成创建Entity类,Dto类,AppService类,View视图等DDD相关工作以及Entity Framework Migrati ...

  10. 并查集 P3367 【模板】并查集

    P3367 [模板]并查集 #include<iostream> #include<algorithm> #include<cstdio> #include< ...