Hadoop僞分佈式集羣搭建

1、HDFS僞分佈式環境搭建java

Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。它和現有的分佈式文件系統有不少共同點。但同時,它和其餘的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,很是適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是做爲Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分

Hadoop的三種運行模式(啓動模式)node

1.1單機模式(獨立模式)
   -默認狀況下Hadoop即爲該模式,用於開發和調試
         -不對配置文件進行修改
         -使用本地的文件系統,而不是分佈式的文件系統。
         -Hadoop不會啓動NameNode(名稱節點)、DataNode(用於存儲數據)JobTracker、TaskTracker等守護進程、Map和Redu()任務做爲同一個進程的不一樣部分來執行的。
         -用於對Map程序的邏輯進行調試,確保程序的正確。

         1.2.僞分佈式模式(Pseudo-Distrubuted Mode)
                -Hadoop的守護進程運行在本機機器上,模擬一個小規模的集羣

                -Hadoop啓動NameNode、DataNode、JobTracker、TaskTracker這些守護進程都在同一臺機器上運行,是互相獨立的JAVA進程。

                -在這種模式下,Hadoop使用的是分佈式文件系統,各個做業也是由JobTraker服務,來管理的獨立進程。在單機模式之上增長了代碼調試功能,容許檢查內存使用狀況,HDFS輸入輸出,

                 以及其餘的守護進程交互。相似於徹底分佈式模式,所以,這種模式經常使用來開發測試Hadoop程序的執行是否正確。

  

-修改3個配置文件:core-site.xml(Hadoop集羣的特性,做用於所有進程及客戶端)、hdfs-site.xml(配置HDFS集羣的工做屬性)、mapred-site.xml(配置MapReduce集羣的屬性)

  
-格式化文件系統web

1.3全分佈式集羣模式

        -Hadoop的守護進程運行在一個集羣上

                    -Hadoop的守護進程運行在有多臺主機搭建的集羣上,是真正的生產環境。

                    -在全部的主機上安裝JDK和Hadoop,組成相互鏈接通的網絡。

                    -在主機間設置ssh免登錄,把個從節點生產的公鑰添加到主節點的新人列表。

         -修改3個配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml,指定NameNode和JobTraker的位置和端口,設置文件的副本等參數

   -格式化文件系統數據庫

2.2HDFS分佈式架構

HDFS是主/從式的架構。一個HDFS集羣會有一個NameNode(簡稱NN),也就是命名節點,該節點做爲主服務器存在(master server)。NameNode用於管理文件系統的命名空間以及調節客戶訪問文件。此外,還會有多個DataNode(簡稱DN),也就是數據節點,數據節點做爲從節點存在(slave server)。一般每個集羣中的DataNode,都會被NameNode所管理,DataNode用於存儲數據。

HDFS公開了文件系統名稱空間,容許用戶將數據存儲在文件中,就比如咱們平時使用操做系統中的文件系統同樣,用戶無需關心底層是如何存儲數據的。而在底層,一個文件會被分紅一個或多個數據塊,這些數據庫塊會被存儲在一組數據節點中。在CDH中數據塊的默認大小是128M,這個大小咱們能夠經過配置文件進行調節。在NameNode上咱們能夠執行文件系統的命名空間操做,如打開,關閉,重命名文件等。這也決定了數據塊到數據節點的映射。vim

咱們能夠來看看HDFS的架構圖:瀏覽器

Hadoop僞分佈式集羣搭建

HDFS被設計爲能夠運行在普通的廉價機器上,而這些機器一般運行着一個Linux操做系統。HDFS是使用java語言編寫的,任何支持java的機器均可以運行HDFS。使用高度可移植的java語言編寫的HDFS,意味着能夠部署在普遍的機器上。一個典型的HDFS集羣部署會有一個專門的機器只能運行NameNode,而其餘集羣中的機器各自運行一個DataNode實例。雖然一臺機器上也能夠運行多個節點,可是並不建議這麼作,除非是學習環境。bash

總結:服務器

HDFS是主/從式的架構,一個HDFS集羣會有一個NameNode以及多個DataNode
一個文件會被拆分爲多個數據塊進行存儲,默認數據塊大小是128M
即使一個數據塊大小爲130M,也會被拆分爲2個Block,一個大小爲128M,一個大小爲2M
HDFS是使用Java編寫的,使得其能夠運行在安裝了JDK的操做系統之上
NN:網絡

負責客戶端請求的響應
負責元數據(文件的名稱、副本系數、Block存放的DN)的管理
DN:架構

存儲用戶的文件對應的數據塊(Block)
會按期向NN發送心跳信息,彙報自己及其全部的block信息和健康情況

HDFS副本存放策略
NameNode節點選擇一個DataNode節點去存儲block副本得過程就叫作副本存放,這個過程的策略其實就是在可靠性和讀寫帶寬間得權衡。

《Hadoop權威指南》中的默認方式:

第一個副本會隨機選擇,可是不會選擇存儲過滿的節點。
第二個副本放在和第一個副本不一樣且隨機選擇的機架上。
第三個和第二個放在同一個機架上的不一樣節點上。
剩餘的副本就徹底隨機節點了。

Hadoop僞分佈式集羣搭建

2、搭建僞分佈式集羣的前提條件

安裝環境要求:
                  Centos7
                  Centos6
                  JDK
                Hadoop
    下載Hadoop 2.6.0-cdh5.7.0的tar.gz包並解壓:

[root@web02 hadoop]# cd /usr/local/src/
[root@web02 src]# ls
hadoop-2.6.0-cdh5.7.0 hadoop-2.6.0-cdh5.7.0.tar.gz
[root@web02 src]# wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz(軟件包較大能夠利用win下載上傳

解壓完後,進入到解壓後的目錄下,能夠看到hadoop的目錄結構以下:

Hadoop僞分佈式集羣搭建

簡單說明一下其中幾個目錄存放的東西:

  • bin目錄存放可執行文件
  • etc目錄存放配置文件
  • sbin目錄下存放服務的啓動命令
  • share目錄下存放jar包與文檔

    以上就算是把hadoop給安裝好了,接下來就是編輯配置文件,把JAVA_HOME配置一下:
    [root@web02 hadoop-2.6.0-cdh5.7.0]# cd etc/
    [root@web02 etc]# cd hadoop
    [root@web02 hadoop]# vim hadoop-env.sh

Hadoop僞分佈式集羣搭建# 根據你的環境變量進行修改

因爲咱們要進行的是單節點僞分佈式環境的搭建,因此還須要配置兩個配置文件,分別是core-site.xml以及hdfs-site.xml,以下:

[root@web02 hadoop]# vim core-site.xml
[root@web02 hadoop]# pwd
/usr/local/src/hadoop-2.6.0-cdh5.7.0/etc/hadoop

<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.0.0.8:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name> # 指定臨時文件所存放的目錄
<value>/data/tmp/</value>
</property>
</configuration>

[root@localhost /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop]# mkdir /data/tmp/
[root@localhost /usr/local/hadoop-2.6.0-cdh5.7.0/etc/hadoop]# vim hdfs-site.xml # 增長以下內容
Hadoop僞分佈式集羣搭建
<configuration>
<property>
<name>dfs.replication</name> # 指定只產生一個副本
<value>1</value>
</property>
</configuration>

而後配置一下密鑰對,設置本地免密登陸,搭建僞分佈式的話這一步是必須的:

[root@localhost ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
Generating public/private dsa key pair.
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
c2:41:89:65:bd:04:9e:3e:3f:f9:a7:51:cd:e9:cf:1e root@localhost
The key's randomart image is:
+--[ DSA 1024]----+
| o=+ |
| .+..o |
| +. . |
| o .. o . |
| = S . + |
| + . . . |
| + . .E |
| o .. o.|
| oo .+|
+-----------------+
[root@localhost ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[root@localhost ~]# ssh localhost
ssh_exchange_identification: read: Connection reset by peer
[root@localhost ~]#

如上,測試本地免密登陸的時候報了個ssh_exchange_identification: read: Connection reset by peer錯誤,因而着手排查錯誤,發現是/etc/hosts.allow文件裏限制了IP,因而修改一下該配置文件便可,以下:

[root@localhost ~]# vim /etc/hosts.allow # 修改成 sshd: ALL
[root@localhost ~]# service sshd restart
[root@localhost ~]# ssh localhost # 測試登陸成功
Last login: Sat Mar 24 21:56:38 2018 from localhost
[root@localhost ~]# logout
Connection to localhost closed.
[root@localhost ~]#

接下來就能夠啓動HDFS了,不過在啓動以前須要先格式化文件系統:
[root@web01 ~]# /usr/local/hadoop-2.6.0-cdh5.7.0/bin/hdfs namenode -format(namenode -format注意)
注:只有第一次啓動才須要格式化
使用服務啓動腳本啓動服務:
[root@localhost ~]# /usr/local/hadoop-2.6.0-cdh5.7.0/sbin/start-dfs.sh
18/03/24 21:59:03 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Starting namenodes on [192.168.77.130]
192.168.77.130: namenode running as process 8928. Stop it first.
localhost: starting datanode, logging to /usr/local/hadoop-2.6.0-cdh5.7.0/logs/hadoop-root-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]
The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established.
ECDSA key fingerprint is 63:74:14:e8:15:4c:45:13:9e:16:56:92:6a:8c:1a:84.
Are you sure you want to continue connecting (yes/no)? yes # 第一次啓動會詢問是否鏈接節點
0.0.0.0: Warning: Permanently added '0.0.0.0' (ECDSA) to the list of known hosts.
0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop-2.6.0-cdh5.7.0/logs/hadoop-root-secondarynamenode-localhost.out
18/03/24 21:59:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[root@localhost ~]# jps # 檢查是否有如下幾個進程,若是少了一個都是不成功的
8928 NameNode
9875 Jps
9578 DataNode
9757 SecondaryNameNode
[root@localhost ~]# netstat -lntp |grep java # 檢查端口
tcp 0 0 0.0.0.0:50090 0.0.0.0: LISTEN 9757/java
tcp 0 0 192.168.77.130:8020 0.0.0.0:
LISTEN 8928/java
tcp 0 0 0.0.0.0:50070 0.0.0.0: LISTEN 8928/java
tcp 0 0 0.0.0.0:50010 0.0.0.0:
LISTEN 9578/java
tcp 0 0 0.0.0.0:50075 0.0.0.0: LISTEN 9578/java
tcp 0 0 0.0.0.0:50020 0.0.0.0:
LISTEN 9578/java
tcp 0 0 127.0.0.1:53703 0.0.0.0:* LISTEN 9578/java
[root@localhost ~]#

而後將Hadoop的安裝目錄配置到環境變量中,方便以後使用它的命令:

[root@web02 hadoop]# vim ~/.bash_profile

Hadoop僞分佈式集羣搭建
確認服務啓動成功後,使用瀏覽器訪問10.0.0.8:50070,會訪問到以下頁面:
Hadoop僞分佈式集羣搭建
點擊Live Nodes查看活着的節點:

Hadoop僞分佈式集羣搭建
Hadoop僞分佈式集羣搭建

如上,能夠看到節點的信息。到此,咱們僞分佈式的hadoop集羣就搭建完成了

相關文章
相關標籤/搜索