1. 程式人生 > >hadoop偽分散式叢集搭建及配置記錄

hadoop偽分散式叢集搭建及配置記錄

如果已經走到了需要搭建hadoop偽分散式的環境了,那說明你至少做好了以下三點

  1. 建立好了自己的虛擬機器,ip、本機名對映、防火牆、安全子系統都已經配置好了
  2. 下載jdk1.7及以上版本,並配置好了java環境
  3. 下載hadoop2.7.0及以上版本,並解壓到、opt/modules(自己存放hadoop的目錄)目錄下

在配置之前,我們應該先了解hadoop的三個模組及其理念

1、 HDFS模組

HDFS負責大資料的儲存,通過將大檔案分塊後進行分散式儲存方式,突破了伺服器硬碟大小的限制,解決了單臺機器無法儲存大檔案的問題,HDFS是個相對獨立的模組,可以為YARN提供服務,也可以為HBase等其他模組提供服務。

儲存模式:


首先,HDFS預設會分塊,大小是128M(這個值是可以設定的)
那麼HDFS上面的塊的大小可以大於128嗎,答案是肯定的。
有不同的方式去設定
1)通過HDFS的API的create方法,可以指定建立的檔案塊的大小(可以任意大小)
2)hive當中也可以在hive-site當中設定,hive輸出的塊的大小(可以大於128M)
3)也會有其他的方法,這裡就不一一列舉修改方式,感興趣的自己查一下
如果、當我儲存一個129MB的檔案的時候,存了幾塊!?
儲存了2塊!------>第一塊128M,第二塊1M
計算資料:
HDFS上的檔案進行mapreduce計算,預設情況下一個map當中會有128M(和塊大小一樣)的資料輸入
所以這裡就涉及到我的一個129M的檔案會啟動幾個Map任務來操作
答案是:1個
mapreduce有這樣的機制,最後一個檔案的輸入如果小於128*1.1(其實就是可以多10%)
那麼只會啟動一個Map來執行這個job,避免了第一個Map跑了128M的資料,第二個Map只跑了1M的資料的尷尬
這種情況只會在最後一塊出現
再舉個例子,比如522M的檔案,分成幾個Map來處理呢?
第一個map-》128M
第二個map-》128M
第三個map-》128M
第四個map-》138M  ——》138小於128*1.1,所以這裡就不會再開啟一個map來處理最後剩餘的那10M的資料
直接在最後一個map當中把所有138M的資料輸入!!謹記
HDFS不適合儲存大量的小檔案
可以考慮合併大檔案,效果不明顯
阿里巴巴開源了TFS淘寶檔案系統,參考了HDFS

2、 YARN模組

YARN是一個通用的資源協同和任務排程框架,是為了解決Hadoop1.x中MapReduce裡NameNode負載太大和其他問題而建立的一個框架。

YARN是個通用框架,不止可以執行MapReduce,還可以執行Spark、Storm等其他計算框架。

3、 MapReduce模組

MapReduce是一個計算框架,它給出了一種資料處理的方式,即通過Map階段、Reduce階段來分散式地流式處理資料。它只適用於大資料的離線處理,對實時性要求很高的應用不適用。

接下來我們就開始配置偽分散式模式

一、使用者及其許可權配置

1、建立一個管理hadoop的使用者 hadoop

[[email protected]
~]# useradd hadoop [[email protected] ~]# passwd hadoop

2、給hadoop使用者sudo許可權 vi /etc/sudoers   增加  hadoop   ALL=(root)  NOPASSWD:ALL

    如果這裡sudoers為只讀模式,則用root給其一個許可權   chmod  755 /etc/sudoers使其可更改

3、切換到hadoop使用者   

[[email protected] ~]# su - hadoop
[[email protected] ~]$

4、更改存放hadoop的目錄  opt/modules的所有者為hadoop,這是為了後面的hdfs的操作,如果這裡不修改,後面可能會出現許可權上的問題

[[email protected] ~]$ sudo chown -R hadoop:hadoop  /opt/modules

二、配置hadoop

具體下面每個檔案需要的配置資訊都可在Apache的官方網站上查到:hadoop.apache.org

1、配置HADOOP環境變數  vi /etc/profile  追加配置HADOOP_HOME

export HADOOP_HOME=/opt/modules/hadoop-2.7.3

export PATH=$PATH:$HADOOP_HOME/bin:$PATH:$HADOOP_HOME/sbin

修改後對 etc/profile  source一下   source 、etc/profile

測試環境是否配置成功   echo $HADOOP_HOME

2、通過notepad++的NTTftp對hadoop各個檔案進行引數配置,如何用natepad++連線linux請參考:notepad++連線

有的新版本好像不支援nttftp外掛,可以下載這個版本:連結: https://pan.baidu.com/s/1eQzYKUxOmI05ijv0vctkQA 密碼: 6gkm

3、配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh檔案的JAVA_HOME引數

先找到自己的JAVA_HOME路徑,   echo $JAVA_HOME

除了hadoop-env.sh,其他兩個的JAVA_HOME都被註釋掉了,去掉註釋進行修改

修改JAVA_HOME引數為:
export JAVA_HOME="/opt/modules/jdk1.7.0_67"

4、配置core-site.xml

<property>
        <name>fs.defaultFS</name>
        <value>hdfs://maketubu.com:8020</value>
</property>

上面fs.defaultFS為引數配置的是HDFS的地址。

<property>
	  <name>hadoop.tmp.dir</name>
	  <value>/opt/modules/hadoop-2.7.3/data/tmp</value>
</property>
hadoop.tmp.dir配置的是Hadoop臨時目錄,比如HDFS的NameNode資料預設都存放這個目錄下,檢視*-default.xml等預設配置檔案,就可以看到很多依賴${hadoop.tmp.dir}的配置。

預設的hadoop.tmp.dir/tmp/hadoop-${user.name},此時有個問題就是NameNode會將HDFS的元資料儲存在這個/tmp目錄下,如果作業系統重啟了,系統會清空/tmp目錄下的東西,導致NameNode元資料丟失,是個非常嚴重的問題,所有我們應該修改這個路徑。

5、配置hdfs-site.xml

<property>
       <name>dfs.replication</name>
       <value>1</value>
</property>
dfs.replication配置的是HDFS儲存時的備份數量,因為這裡是偽分散式環境只有一個節點,所以這裡設定為1。預設為3

保證資料安全性機制(副本策略)
副本數
一份檔案寫多份備份,寫到不同機器節點上
檔案切分成塊之後,對於每個塊的備份
放置策略
第一個block塊的副本,如果client客戶端在叢集中的某臺機器,那麼第一個就放在這臺
如果client不在叢集中,那麼第一個塊就隨機放置
第二個block塊的副本,會放置在和第一個不同的機架的node節點上,隨機的
第三個block塊的副本,會放置在和第二個相同機架的不同的node節點上,隨機的
其他的隨便放

負載均衡,均勻分佈

6、格式化HDFS

[[email protected] ~]$ hdfs namenode -format

格式化是對HDFS這個分散式檔案系統中的DataNode進行分塊,統計所有分塊後的初始元資料的儲存在NameNode中。

格式化後,檢視core-site.xml裡hadoop.tmp.dir(本例是/opt/data目錄)指定的目錄下是否有了dfs目錄,如果有,說明格式化成功。

注意:

  1. 格式化時,這裡注意hadoop.tmp.dir目錄的許可權問題,應該hadoop普通使用者有讀寫許可權才行,可以將/opt/data的所有者改為hadoop。 
    [[email protected] hadoop-2.7.3]$ sudo chown -R hadoop:hadoop /opt/modules/hadoop-2.7.3/data/tmp

  2. 檢視NameNode格式化後的目錄。

   [hadoop@bigdata-senior01 ~]$ ll /opt/modules/hadoop-2.7.3/data/tmp/dfs/name/current
  • 1
  • 1

enter image description here

fsimage是NameNode元資料在記憶體滿了後,持久化儲存到的檔案。

fsimage*.md5 是校驗檔案,用於校驗fsimage的完整性。

seen_txid 是hadoop的版本

vession檔案裡儲存:

  • namespaceID:NameNode的唯一ID。

  • clusterID:叢集ID,NameNode和DataNode的叢集ID應該一致,表明是一個叢集。

7、啟動

可以再sbin目錄下寫一個啟動指令碼

/opt/module/hadoop-2.7.3/sbin/hadoop-daemon.sh start namenode
/opt/module/hadoop-2.7.3/sbin/hadoop-daemon.sh start datanode
/opt/module/hadoop-2.7.3/sbin/hadoop-daemon.sh start secondarynamenode
用jps測試,如果出現了就說明配置成功
[[email protected] hadoop-2.7.3]$ jps
3034 NameNode
3233 Jps
3193 SecondaryNameNode
3110 DataNode

至此,你的hdfs的配置已全部完成,可以嘗試自己上傳檔案或者下載檔案

8、操作

在hdfs上建立目錄

[[email protected] hadoop-2.7.3]$ bin/hdfs dfs -mkdir /test

上傳檔案到測試目錄

[[email protected] hadoop-2.7.3]$ bin/hdfs dfs -put /etc/hadoop/core-site.xml /test

下載檔案到本地

[[email protected] hadoop-2.7.3]$ bin/hdfs dfs -get  /test/core-site.xml /get-site.xml

下載時可以對檔案進行重新命名   

對於後面的yarn、歷史服務、日誌聚合等配置,就寫到另一篇學習記錄裡