Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建

基本概念:

1. Hadoop是一个分布式文件系统的基础架构,用户可以利用集群进行高速运算和存储

2. Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算

3. Hdfs主要模块:NameNode、DataNode

4. HDFS主要模块及运行原理:
(1)NameNode:
功能:是整个文件系统的管理节点。维护整个文件系统的文件目录树,文件/目录的元数据和每个文件对应的数据块列表。接收用户的请求
(2)DataNode:
功能:是HA(高可用性)的一个解决方案,是备用镜像,但不支持热备

5. Hadoop的三种模式:

(1)单机模式Local或Standalone Mode
默认情况下,Hadoop即处于该模式,用于开发和调试,使用本地文件系统,而不是分布式文件系统,Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程。用于对MapReduce程序的逻辑进行调试,确保程序的正确

(2)伪分布式模式(Pseudo-Distrubuted Mode)

  • 模拟一个小规模的集群,在一台主机模拟多主机。
  • Hadoop启动NameNode、DataNode、JobTracker、TaskTracker这些守护进 程都在同一台机器上运行,是相互独立的Java进程
  • 在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,类似于完全分布式模式

(3)完全分布式模式

  • Hadoop守护进程运行在一个集群上,hadoop的守护进程namenode,datanode,jobTracker,TaskTracker运行在多台主机上,也就是一个集群不同机器上

一、单机分布式

1.创建hadoop用户,将安装包传到hadoop的家目录下

[root@server1 ~]# useradd hadoop
[root@server1 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server1 ~]# ls
hadoop-3.0.3.tar.gz  jdk-8u181-linux-x64.tar.gz
[root@server1 ~]# mv * /home/hadoop/
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk-8u181-linux-x64.tar.gz

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第1张图片
2.解压安装包,创建软连接

(1)jdk

[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz 
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ ln -s jdk1.8.0_181/ java
[hadoop@server1 ~]$ ls
hadoop-3.0.3.tar.gz  java  jdk1.8.0_181  jdk-8u181-linux-x64.tar.gz

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第2张图片
(2)hadoop

[hadoop@server1 ~]$ tar zxf hadoop-3.0.3.tar.gz 
[hadoop@server1 ~]$ ls
hadoop-3.0.3         java          jdk-8u181-linux-x64.tar.gz
hadoop-3.0.3.tar.gz  jdk1.8.0_181
[hadoop@server1 ~]$ ln -s hadoop-3.0.3 hadoop
[hadoop@server1 ~]$ ls
hadoop        hadoop-3.0.3.tar.gz  jdk1.8.0_181
hadoop-3.0.3  java                 jdk-8u181-linux-x64.tar.gz

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第3张图片
3.配置java环境变量

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ vim hadoop-env.sh

54 export JAVA_HOME=/home/hadoop/java

在这里插入图片描述
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第4张图片

4.添加系统环境变量

[hadoop@server1 hadoop]$ cd
[hadoop@server1 ~]$ vim .bash_profile 
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HOME/java/bin
[hadoop@server1 ~]$ source .bash_profile 

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第5张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第6张图片配置完后可以执行jps命令

[hadoop@server1 ~]$ jps
11515 Jps

在这里插入图片描述
5.创建input目录

[hadoop@server1 ~]$ ls
hadoop        hadoop-3.0.3.tar.gz  jdk1.8.0_181
hadoop-3.0.3  java                 jdk-8u181-linux-x64.tar.gz
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ ls
bin  include  libexec      NOTICE.txt  sbin
etc  lib      LICENSE.txt  README.txt  share
[hadoop@server1 hadoop]$ mkdir input
[hadoop@server1 hadoop]$ cd input
[hadoop@server1 input]$ ls
[hadoop@server1 input]$ 
[hadoop@server1 input]$ cd ..
[hadoop@server1 hadoop]$ 
[hadoop@server1 hadoop]$ cp etc/hadoop/*.xml input
[hadoop@server1 hadoop]$ ls input/

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第7张图片
在这里插入图片描述
6.执行完之后会生成一个output目录

[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
[hadoop@server1 hadoop]$ ls
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000  _SUCCESS
[hadoop@server1 output]$ cat *
1	dfsadmin

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第8张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第9张图片

二、伪分布式

存和取都是在分布式文件系统中和本地文件系统没有任何关系

1.切换到hadoop/etc/hadoop目录下编辑文件,写入的内容如下

[hadoop@server1 ~]$ ls
[hadoop@server1 ~]$ cd hadoop/etc/hadoop
[hadoop@server1 hadoop]$ ls
[hadoop@server1 hadoop]$ vim core-site.xml  

        
                fs.defaultFS
                hdfs://localhost:9000
        

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第10张图片Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第11张图片

[hadoop@server1 hadoop]$ vim hdfs-site.xml

        
                dfs.replication
                1
        

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第12张图片
2.生成密钥,做ssh免密,方便部署

[hadoop@server1 ~]$ ssh-keygen
[hadoop@server1 ~]$ logout
[root@server1 ~]# passwd hadoop
[root@server1 ~]# su - hadoop
[hadoop@server1 ~]$ ssh-copy-id 172.25.19.1   ##这三步的目的只是刷掉yes
[hadoop@server1 ~]$ ssh-copy-id localhost
[hadoop@server1 ~]$ ssh-copy-id server1

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第13张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第14张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第15张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第16张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第17张图片
3.节点初始化

[hadoop@server1 ~]$ ls
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第18张图片
4.开启服务,开启服务的脚本在sbin目录下

[hadoop@server1 hadoop]$ cd sbin
[hadoop@server1 sbin]$ ls
[hadoop@server1 sbin]$ ./start-dfs.sh 
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [server1]

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第19张图片
在这里插入图片描述
开启之后可以执行jps看到如下信息(查看到的是进程号)

[hadoop@server1 sbin]$ jps
12241 DataNode
12579 Jps
12423 SecondaryNameNode
12142 NameNode

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第20张图片
5.浏览器访问172.25.19.1:9870可以看到web界面

这里hdfs使用的端口是9870,但是各版本之间存在差异

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第21张图片

6.测试:

(1)创建目录

[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第22张图片
(2)浏览器中utiltles—>browes the file system 查看文件,现在/user/hadoop下什么都没有
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第23张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第24张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第25张图片
(3)上传文件

[hadoop@server1 hadoop]$ bin/hdfs dfs -put input
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2019-05-19 13:28 input

在这里插入图片描述
(4)浏览器中刷新,可以看到input 目录,点击可以看到具体有那些文件

注意:现在的input文件不是/home/hadoop/hadoop下的input
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第26张图片
可以点击input查看目录中的文件
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第27张图片
(5)删除input和output目录,再次生成(证明浏览器中的input目录不是hadoop目录下的同名目录)

[hadoop@server1 hadoop]$ ls
[hadoop@server1 hadoop]$ rm -fr input/ output/
[hadoop@server1 hadoop]$ ls

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第28张图片

在当前目录中没有input和output目录,但是浏览器中依然存在input目录
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第29张图片
(6)再次生成output目录,将这个包的内容统计为单词个数输出到output

  [hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar wordcount input output
  [hadoop@server1 hadoop]$ ls

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第30张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第31张图片
(7)浏览器中刷新,查看output,有两个文件 ,点一第一个出来的是他的大小
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第32张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第33张图片
三、完全分布式

首先将dfs文件系统中的内容清除

1.关闭服务,清楚原来的数据

因为这一步是要做集群,需要保证每一个节点上的数据是一致的,但是新加的两个节点是全新的虚拟机,所以要将server1上的数据清除

[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [server1]
[hadoop@server1 hadoop]$ cd /tmp/
[hadoop@server1 tmp]$ ls
hadoop  hadoop-hadoop  hsperfdata_hadoop
[hadoop@server1 tmp]$ ll
[hadoop@server1 tmp]$ rm -fr *
[hadoop@server1 tmp]$ ls
[hadoop@server1 tmp]$ cd
[hadoop@server1 ~]$ ls

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第34张图片
退出hadoop用户

[hadoop@server1 ~]$ logout

2.server2和server3创建hadoop用户,三个节点都安装nfs

server1:

[root@server1 ~]# yum install -y nfs-utils

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第35张图片
server2:

[root@server2 ~]# useradd -u 1000 hadoop
[root@server2 ~]# yum install -y nfs-utils

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第36张图片
server3:

[root@server3 ~]# useradd -u 1000 hadoop
[root@server3 ~]# yum install -y nfs-utils

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第37张图片
3.三个节点都开启rpcbind服务(这个服务默认是开机自启动的)

[root@server1 ~]# systemctl start rpcbind
[root@server1 ~]# systemctl enable rpcbind
[root@server2 ~]# systemctl start rpcbind
[root@server3 ~]# systemctl start rpcbind

在这里插入图片描述
4.server1编辑配置文件,配置NFS文件系统

[root@server1 ~]# ls
[root@server1 ~]# vim /etc/exports
/home/hadoop    *(rw,anonuid=1000,anongid=1000)
[root@server1 ~]# systemctl start nfs

在这里插入图片描述
文件内容如下:
在这里插入图片描述
扫描

[root@server1 ~]# exportfs -v
/home/hadoop  	(rw,wdelay,root_squash,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,no_all_squash)
[root@server1 ~]# showmount -e
Export list for server1:
/home/hadoop *

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第38张图片
5.server2和server3挂载
(这两步实际上是在配置NFS文件系统,这样的话后面的操作只需要在一server1上做便可以达到整个集群都部署的效果)

server2:

[root@server2 ~]# showmount -e server1
Export list for server1:
/home/hadoop *
[root@server2 ~]# mount 172.25.19.1:/home/hadoop/ /home/hadoop/
[root@server2 ~]# df

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第39张图片
server3:

[root@server3 ~]# systemctl start rpcbind
[root@server3 ~]# showmount -e server1
Export list for server1:
/home/hadoop *
[root@server3 ~]# mount 172.25.19.1:/home/hadoop/ /home/hadoop/
[root@server3 ~]# df

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第40张图片

6.三个节点都切换到hadoop用户,server2和server3同步了server1的hadoop家目录下的内容

[root@server1 ~]# su - hadoop
Last login: Sun May 19 13:11:42 CST 2019 on pts/0
[hadoop@server1 ~]$ ls

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第41张图片

[root@server2 ~]# su - hadoop
[hadoop@server2 ~]$ ls

在这里插入图片描述

[root@server3 ~]# su - hadoop
[hadoop@server3 ~]$ ls

在这里插入图片描述
7.server1将密钥传给server2和server3
这一步的目的是刷掉yes
因为做好了nfs文件系统,这三个结点的数据现在是同步的,server1之前创了密钥,所以现在每个节点中都是有密钥的

[hadoop@server1 ~]$ ssh-copy-id 172.25.19.2
[hadoop@server1 ~]$ ssh-copy-id 172.25.19.3

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第42张图片
8.编辑配置文件

(1)编辑 core-site.xml配置文件

[hadoop@server1 ~]$ ls
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ cd etc/hadoop/
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ 
[hadoop@server1 hadoop]$ vim core-site.xml 


        
                fs.defaultFS
                hdfs://172.25.19.1:9000   ##这里指向的是master的9000端口
        

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第43张图片
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第44张图片
(2)编辑hdfs-site.xml文件

[hadoop@server1 hadoop]$ vim hdfs-site.xml 

        
                dfs.replication
                2     ##改为两个节点,集群中存储数据的只有2个节点
        

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第45张图片
9.编辑worker文件,文件中的内容是datanode的ip

[hadoop@server1 hadoop]$ vim workers 
[hadoop@server1 hadoop]$ cat workers
172.25.19.2
172.25.19.3

在这里插入图片描述
10.初始化并开启服务

(1)初始化集群

[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ cd ../..
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第46张图片
(2)开启服务

[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [server1]
Starting datanodes
Starting secondary namenodes [server1]

jps查看server1只有namenode,server2和server3都是datanode

[hadoop@server1 hadoop]$ jps
14902 SecondaryNameNode
15035 Jps
14716 NameNode

server2和server3只有datanode
[hadoop@server2 ~]$ jps
11895 Jps
11834 DataNode

[hadoop@server3 ~]$ jps
11888 Jps
11826 DataNode

在这里插入图片描述
在这里插入图片描述
注意:datanode是真正存储的节点 相当于mfs中的chunkserver

11.测试

(1)浏览器中查看,没有任何文件
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第47张图片

(2)创建目录,上传文件

[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/ input
[hadoop@server1 hadoop]$ ls

在这里插入图片描述
在这里插入图片描述
(3)浏览器中查看到input目录,并且有内容
Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第48张图片

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第49张图片
(4)假如上传错了文件,可以删除

[hadoop@server1 hadoop]$ bin/hdfs dfs -rm -r input
Deleted input![在这里插入图片描述](https://img-blog.csdnimg.cn/2019071314504519.png)

(5)浏览器中查看,会报错

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第50张图片退回到上一级目录不会报错,但是没有数据

Hadoop的三种模式(单机模式,伪分布式,完全分布式)以及集群的搭建_第51张图片
补充:
1.hadoop集群要做到做到全网一致(时间同步 数据一致 )
2.主机名要求解析
3.output自动生成 不能手动建立否则会报错
4.在做hadoop的时候不建议用超级用户,因为是分布式文件系统,超级用户的权限太大,不安全
5.单机版分布式中本机既是namenode又是datanode
在完全分布式中只有一台namenode,可以有多台datanode
6.NameNode 可以控制所有文件操作

你可能感兴趣的:(企业部分)