1. 程式人生 > >HDFS分布式文件系統

HDFS分布式文件系統

HDFS 分布式 文件系統

hadoopo原理
hadoop2.0的HA 機制有兩個namenode,一個是active namenode,狀態是active;另外一個是standby namenode,狀態是standby。兩者的狀態是可以切換的,但不能同時兩個都是active狀態,最多只有1個是active狀態。只有active namenode提供對外的服務,standby namenode是不對外服務的。active namenode和standby namenode之間通過NFS或者JN(journalnode,QJM方式)來同步數據。
.
Hadoop的簡介:
Hadoop是apache軟件基金會的開源分布式計算平臺hadoop集群包括兩種角色Mater和Slave。一個HDFS集群由一個運行於Master上的NameNode和若幹個運行於Slave節點的DataNode組成。

.
NameNode負責管理文件系統命名空間和客戶端對文件系統的訪問操作;DataNode管理存儲的數據。文件以塊形式在DataNode中存儲,假如一個塊大小設置為50MB,塊的副本數為3(通過設置塊的副本數來達到冗余效果,防止單個DataNode磁盤故障後數據丟失),一個40MB的文件將被存儲在一個塊中,然後將相同的3個塊存儲在3個DataNode中實現冗余。大文件將被切成小塊存儲。
.

項目要求:
搭建hadoop的HDFS,通過DataNode節點的添加與刪除實現HDFS空間動態增加與減少,以及HDFS文件系統的基本管理。
.
.
環境:
master:Redhat 6.5 x86 :192.168.0.10

slave1:Redhat 6.5 x86 :192.168.0.11
slave2:Redhat 6.5 x86 :192.168.0.12
slave3:Redhat 6.5 x86 :192.168.0.13
slave4:Redhat 6.5 x86 :192.168.0.14

.
準備環境
master、slave1~3上配置域名解析與主機名

[root@centos1 /]# vim /etc/hosts
 192.168.0.10 master
 192.168.0.11 slave1
 192.168.0.12 slave2
 192.168.0.13 slave3"
.
[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=master

[root@centos1 /]# reboot

.

**(slave1)**
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave1

[root@centos1 /]# reboot
.
**(slave2)**
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave2

[root@centos1 /]# reboot
.
**(slave3)**
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave3

[root@centos1 /]# reboot

.

(master 0.10)

JDK安裝
[root@centos1 /]# mount /dev/cdrom /media
[root@centos1 /]# tar zxf jdk-7u65-linux-x64.gz -C /usr/src
[root@centos1 /]# cd /usr/src
[root@centos1 /]# mv jdk1.7.0_65/ /usr/local/java
[root@centos1 /]# vim /etc/profile
export JAVA_HOME=/usr/local/java    //在末尾添加兩行
export PATH=$PATH:$JAVA_HOME/bin

.

[root@centos1 /]# source /etc/profile
[root@centos1 /]# java -version

.
添加hadoop用戶

[root@centos1 /]# useradd hadoop
[root@centos1 /]# passwd hadoop
同理:在slave1-slave3上重復步驟2)和步驟3),這裏就不在演示

.
配置SSH密鑰對
要求master免密碼登錄各slave,用於開啟相應服務。
Master無密碼連接slave,先切換hadoop用戶,用ssh-keygen按照默認配置直接按Enter鍵生成密鑰對,通過ssh-copy-id將公鑰復制至3個slave主機中,復制過程需要輸入slave主機的hadoop用戶密碼,作用是master遠程啟動slave。

[root@centos1 /]# su - hadoop
[root@centos1 /]# ssh-keygen
.
slave1上的hadoop用戶的密碼
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave1
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave2
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave3

.
安裝hadoop,在master和slave上配置環境變量。
.
安裝hadoop

[root@centos1 /]# exit
[root@centos1 /]# cd /meida
[root@centos1 /]# tar zxf hadoop-2.4.0.tar.gz -C /usr/src
[root@centos1 /]# cd /usr/src
[root@centos1 /]# mv hadoop-2.4.0/ /usr/local/hadoop
[root@centos1 /]# ls /usr/local/hadoop

hadoop不需編譯安裝,在上述6個目錄中etc/hadoop是住配置文件目錄sbin/下存放啟動停止腳本
.

[root@centos1 /]# chown -R hadoop:hadoop /usr/local/hadoop
.
配置環境變量
[root@centos1 /]# vim /etc/profile
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/bin

.
配置hadoop

[root@centos1 /]# cd /media

[root@centos1 /]# /bin/cp -r hadoop /usr/local/hadoop/etc/
[root@centos1 /]# su - hadoop
[root@centos1 /]# cd /usr/local/hadoop/etc/hadoop
[root@centos1 /]# vim hadoop-env.sh
export JAVA_HOME=/usr/local/java    //添加java環境變量

.
.

[root@centos1 /]# vim core-site.xml
<configuration>
 <property>
  <name>fs.defaultFS</name>
  <value>hdfs://master:9000</value> //master主機名
 </property>
 <property>
  <name>hadoop.tmp.dir</name>
  <value>file:/usr/local/hadoop/tmp</value>
  <description>hadoop 臨時緩存目錄</description>
 </property>
</configuration>

.
.

[root@centos1 /]# mv mapred-site.xml.tempalte mapred.site.xml
[root@centos1 /]# vim mapred-site.xml

<configuration>
<property>
<name>mapred.job.tracker</name>     //連接jobtrack服務區的配置項,默認local,map數為1,master是本機主機名
<value>master:9001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/usr/local/hadoop/var</value>    //作為本地計算機使用的文件夾,可配置多塊硬盤用,分隔
</property>
</configuration>

.
.

[root@centos1 /]# vim hdfs-site.xml

<configuration>
<property>
 <name>dfs.namenode.name.dir</name>
 <value>file:/usr/local/hadoop/name</value>
</property>
<property>
 <name>dfs.datanode.name.dir</name>
 <value>file:/usr/local/hadoop/name</value>
</property>
<property>
 <name>dfs.replication</name>
 <value>3</value>   //副本數每塊復制幾份
</property>
<property>
 <name>dfs.webhdfs.enabled</name>
 <value>true</value>    //啟用web訪問hdfs,訪問格式httpd://master:50070
</property>

.
.

[root@centos1 /]# vim masters

master  //在文件中指定namenode的主機名

[root@centos1 /]# vim slaves
slave1
slave2
slave3

指定datanode的主機名有多少slave就寫多少
.
每個slave主機重復步驟1)和步驟2)(即它們也需要安裝hadoop並設置環境變量),等前兩步完成了再由master通過SSH安全通道把剛才配置的6個文件復制給每個slave。
每個slave主機上重復1)和2)步驟的省略
.

[root@centos1 /]#  scp * slave1:/usr/local/hadoop/etc/hadoop

[root@centos1 /]#  scp * slave2:/usr/local/hadoop/etc/hadoop

[root@centos1 /]#  scp * slave3:/usr/local/hadoop/etc/hadoop

.
.
使用HDFS初始化master
格式化HDFS文件系統
[root@centos1 /]# hafs namenode -format

看到截圖說明成功
技術分享圖片

.
檢查新生成的目錄
[root@centos1 /]# ll /usr/local/hadoop/name/.
啟動hadoop群集(開機hadoop的冗余功能)
啟停hadoopde的管理命令位於@HADOOP_HOME/sbin下,以start-*或stop-*開頭;單獨啟動HDFS分布式文件系統可使用start-dfs.sh,也可以使用以下命令啟動整個hadoop集群
br/>.
啟動hadoop群集(開機hadoop的冗余功能)
啟停hadoopde的管理命令位於@HADOOP_HOME/sbin下,以start-*或stop-*開頭;單獨啟動HDFS分布式文件系統可使用start-dfs.sh,也可以使用以下命令啟動整個hadoop集群
(輸入master的hadoop用戶密碼)
(輸入slave的hadoop的用戶密碼,所有slave密碼要都一樣)
驗證訪問
.
技術分享圖片

技術分享圖片

技術分享圖片
[root@centos1 /]# service iptables stop
通過瀏覽器查看NameNode,即master,訪問http://192.168.0.10:50070,可以查看視圖統計信息和HDFS存儲信息等。
驗證之前先關閉master和所有slave的防火墻
.
.
hadoop基本命令
使用“hadoop fs”命令可以結合普通的文件管理命令實現很多操作,如查看、修改權限、統計、獲取幫助、創建、刪除、上傳下載文件等,更多的用法可使用“hadoop fs -help”或“hadoop fs -usage”命令查看。

[root@centos1 /]# hadoop fs -ls /
[root@centos1 /]# hadoop fs -mkdir /input
[root@centos1 /]# hadoop fs -ls /
[root@centos1 /]# hadoop fs -put /usr/local/hadoop/etc/hadoop/* /input
hadoop fs -ls /input

[root@centos1 /]# hdfs dfsadmin -report //查看所喲節點
的狀態

.
.
HDFS高級命令
開機安全模式

[root@centos1 /]# hdfs dfsadmin -safemode enter
[root@centos1 /]# hdfs dfsadmin -safemode leave

enter開啟安全模式
leaves關閉安全模式
安全模式下拒接寫入數據到slave,一般用於維護,修改配置文件的情況下,修改完就關閉安全模式
.
.
復制
將本地文件復制到HDFS上(註意不要在安全模式下)
[root@centos1 /]# hadoop fs -copyFormLocal /etc/passwd /

將/etc/passwd本地源文件復制到HDFS的/下
格式:hadoop fs -copyFromLocal 本地源文件 HDFS的目錄
.
將HDFS上的文件復制到本地

[root@centos1 /]# hadoop fs -ls

[root@centos1 /]# hadoop fs -copyFormLocal /passwd /var

[root@centos1 /]# chmod 777 /var/
[root@centos1 /]# hadoop fs -copyFormLocal /passwd /var

.
權限和歸屬
修改屬組

[root@centos1 /]# hadoop fs -chgrp root /passwd
[root@centos1 /]# hadoop fs -ls /passwd
格式:hadoop fs -chgrp [-R] group 文件或目錄

.
修改權限

[root@centos1 /]# hadoop fs -chmod 755 /passwd
[root@centos1 /]# hadoop fs -ls /passwd
格式:hadoop fs -chmod [-R] group 文件或目錄

.
修改所有者

[root@centos1 /]# hadoop fs -chown root:root /passwd
[root@centos1 /]# hadoop fs -ls /passwd
格式:hadoop fs -chown [-R] group 屬主:屬組 文件或目錄

.
統計顯示目錄中文件大小

[root@centos1 /]# hadoop fs -du -s -h /passwd
格式:hadoop fs -du 目錄

.
合並文件

[root@centos1 /]# touch secret
[root@centos1 /]# hadoop fs -getmerge -nl /passwd /home/hadoop/secret
[root@centos1 /]# head -3 secret
格式:hadoop fs -getmerge [-nl] HDFS的源文件 本地主機的目的文件 源文件和目的文件都是一樣的數據了

.
.
(slave4)
為HDFS集群添加節點
slave4節點安裝jdk與hadoop,配置環境變量

[root@centos1 /]# mount /dev/cdrom /media
[root@centos1 /]# useradd hadoop
[root@centos1 /]# passwd hadoop
[root@centos1 /]# tar zxf jdk-7u65-linux-x64.gz -C /usr/src
[root@centos1 /]# cd /usr/src
[root@centos1 /]# mv jdk1.7.0_65/ /usr/local/java

[root@centos1 /]# scp [email protected]:/etc/profile /etc

[root@centos1 /]# source /etc/profile
[root@centos1 /]# java -version

[root@centos1 /]# cd /meida
[root@centos1 /]# tar zxf hadoop-2.4.0.tar.gz -C /usr/src
[root@centos1 /]# cd /usr/src
[root@centos1 /]# mv hadoop-2.4.0/ /usr/local/hadoop

[root@centos1 /]# chown -R hadoop:hadoop /usr/local/hadoop

.
.

(master)
配置/etc/hosts解析,NameNode與4臺DataNode都要配置

[root@centos1 /]# vim /etc/hosts
192.168.0.10    master
192.168.0.11    slave1
192.168.0.12    slave2
192.168.0.13    slave3
192.168.0.14    slave4  //把新的節點slave4添加到master的hosts文件中

.
(slave1.2.3.4)

[root@centos1 /]# scp [email protected]:/etc/hosts /etc/
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/
[root@centos1 /]# scp [email protected]:/etc/hosts /etc/

0.14重啟
.
(slave4)

[root@centos1 /]# vim /etc/sysconfig/network
HOSTNAME=slave4
重啟

.
(master)
配置ssh無密碼連接

[root@centos1 /]# su -hadoop
[root@centos1 /]# ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave4

.
在master上修改hadoop配置後,復制到其他節點

[root@centos1 /]# vim /usr/local/hadoop/etc/hadoop/slaves
slave1
slave2
slave3
slave4
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave1:/usr/local/hadoop/etc/hadoop/
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave2:/usr/local/hadoop/etc/hadoop/
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave3:/usr/local/hadoop/etc/hadoop/
[root@centos1 /]# scp /usr/local/hadoop/etc/hadoop/* slave4:/usr/local/hadoop/etc/hadoop/

.
(slave4)
新節點啟動並平衡節點已經存儲的數據,啟動兩個

[root@centos1 /]# hadoop-daemon.sh start datanode
[root@centos1 /]# hadoop-daemon.sh start tasltracker

.
查看進程狀態有兩條說明正確

[root@centos1 /]# jps
3024 Jps
2924 DataNode

.
開啟負載均衡

[root@centos1 /]# start-balancer.sh

[root@centos1 /]# service iptables stop

.
(master)
查看集群信息
[root@centos1 /]# hadoop dfsadmin -report
.
刪除DataNode節點
增加exclude配置,作用為存放要刪除的DataNode信息

[root@centos1 /]# vim /usr/local/hadoop/etc/hadoop/core-site.xml

<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/excludes</value>
</property>

[root@centos1 /]# cd /usr/local/hadoop/etc/hadoop
.
[root@centos1 /]#  vim excludes
slave4

.

刷新配置
[root@centos1 /]# hdfs dfsadmin -refreshNodes

.
(slave4)

檢查slave4的進程
[root@centos1 /]# jps

.
(master)
查看集群信息

[root@centos1 /]# hadoops fsadmin -report

當發現節點信息為decommisssioned時表明這個節點已經被刪除

HDFS分布式文件系統