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

在這裏插入圖片描述
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

在這裏插入圖片描述
(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

在這裏插入圖片描述
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

在這裏插入圖片描述
在這裏插入圖片描述

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 

在這裏插入圖片描述
在這裏插入圖片描述配置完後可以執行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/

在這裏插入圖片描述
在這裏插入圖片描述
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

在這裏插入圖片描述
在這裏插入圖片描述

二、僞分佈式

存和取都是在分佈式文件系統中和本地文件系統沒有任何關係

1.切換到hadoop/etc/hadoop目錄下編輯文件,寫入的內容如下

[hadoop@server1 ~]$ ls
[hadoop@server1 ~]$ cd hadoop/etc/hadoop
[hadoop@server1 hadoop]$ ls
[hadoop@server1 hadoop]$ vim core-site.xml  
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://localhost:9000</value>
        </property>
</configuration>

在這裏插入圖片描述在這裏插入圖片描述

[hadoop@server1 hadoop]$ vim hdfs-site.xml
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>1</value>
        </property>
</configuration>

在這裏插入圖片描述
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

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
3.節點初始化

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

在這裏插入圖片描述
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]

在這裏插入圖片描述
在這裏插入圖片描述
開啓之後可以執行jps看到如下信息(查看到的是進程號)

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

在這裏插入圖片描述
5.瀏覽器訪問172.25.19.1:9870可以看到web界面

這裏hdfs使用的端口是9870,但是各版本之間存在差異

在這裏插入圖片描述

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

在這裏插入圖片描述
(2)瀏覽器中utiltles—>browes the file system 查看文件,現在/user/hadoop下什麼都沒有
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
(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
在這裏插入圖片描述
可以點擊input查看目錄中的文件
在這裏插入圖片描述
(5)刪除input和output目錄,再次生成(證明瀏覽器中的input目錄不是hadoop目錄下的同名目錄)

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

在這裏插入圖片描述

在當前目錄中沒有input和output目錄,但是瀏覽器中依然存在input目錄
在這裏插入圖片描述
(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

在這裏插入圖片描述
在這裏插入圖片描述
(7)瀏覽器中刷新,查看output,有兩個文件 ,點一第一個出來的是他的大小
在這裏插入圖片描述
在這裏插入圖片描述
三、完全分佈式

首先將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用戶

[hadoop@server1 ~]$ logout

2.server2和server3創建hadoop用戶,三個節點都安裝nfs

server1:

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

在這裏插入圖片描述
server2:

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

在這裏插入圖片描述
server3:

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

在這裏插入圖片描述
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  	<world>(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 *

在這裏插入圖片描述
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

在這裏插入圖片描述
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

在這裏插入圖片描述

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

在這裏插入圖片描述

[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

在這裏插入圖片描述
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 

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://172.25.19.1:9000</value>   ##這裏指向的是master的9000端口
        </property>
</configuration>

在這裏插入圖片描述
在這裏插入圖片描述
(2)編輯hdfs-site.xml文件

[hadoop@server1 hadoop]$ vim hdfs-site.xml 
<configuration>
        <property>
                <name>dfs.replication</name>
                <value>2</value>     ##改爲兩個節點,集羣中存儲數據的只有2個節點
        </property>
</configuration>

在這裏插入圖片描述
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

在這裏插入圖片描述
(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)瀏覽器中查看,沒有任何文件
在這裏插入圖片描述

(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目錄,並且有內容
在這裏插入圖片描述

在這裏插入圖片描述
(4)假如上傳錯了文件,可以刪除

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

(5)瀏覽器中查看,會報錯

在這裏插入圖片描述退回到上一級目錄不會報錯,但是沒有數據

在這裏插入圖片描述
補充:
1.hadoop集羣要做到做到全網一致(時間同步 數據一致 )
2.主機名要求解析
3.output自動生成 不能手動建立否則會報錯
4.在做hadoop的時候不建議用超級用戶,因爲是分佈式文件系統,超級用戶的權限太大,不安全
5.單機版分佈式中本機既是namenode又是datanode
在完全分佈式中只有一臺namenode,可以有多臺datanode
6.NameNode 可以控制所有文件操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章