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中實現冗餘。大文件將被切成小塊存儲。
.java

項目要求:
搭建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.14node

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

[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

.web

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

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

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

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

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

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

[root@centos1 /]# reboot

.apache

(master 0.10)vim

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

.centos

[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

看到截圖說明成功
HDFS分佈式文件系統

.
檢查新生成的目錄
[root@centos1 /]# ll /usr/local/hadoop/name/br/>.
啓動hadoop羣集(開機hadoop的冗餘功能)
啓停hadoopde的管理命令位於@HADOOP_HOME/sbin下,以start-*或stop-*開頭;單獨啓動HDFS分佈式文件系統可以使用start-dfs.sh,也可使用如下命令啓動整個hadoop集羣
[root@centos1 /]# start-all.sh
(輸入master的hadoop用戶密碼)
(輸入slave的hadoop的用戶密碼,全部slave密碼要都同樣)
驗證訪問
.
HDFS分佈式文件系統

HDFS分佈式文件系統

HDFS分佈式文件系統
[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 root@192.168.0.10:/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 root@192.168.0.11:/etc/hosts /etc/
[root@centos1 /]# scp root@192.168.0.12:/etc/hosts /etc/
[root@centos1 /]# scp root@192.168.0.13:/etc/hosts /etc/
[root@centos1 /]# scp root@192.168.0.14:/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時代表這個節點已經被刪除
相關文章
相關標籤/搜索