HDFS分佈式文件系統java
1、HDFS服務簡介node
HDFS是Hadoop File System的縮寫,即Hadoop文件系統。是一種以Hadoop集羣實現可以快速存儲,數據備份,實現冗餘,快速訪問網絡服務,。Hadoop是Apache軟件基金會的開源分佈式計算平臺。linux
一個HDFS集羣由一個運行於master上的NameNode和若干個運行於Slave節點的DataNode組成。NameNode負責管理文件系統命名空間和客戶端對文件系統的訪問操做;DataNode負責存儲的數據。文件以塊形式在DataNode中存儲,假設一個塊大小設置爲50MB,塊的副本數爲3(經過設置塊的副本數來達到冗餘效果,防止單個DataNode磁盤故障後數據丟失),一個40MB的文件將存儲在一個塊中,而後將相同的3個塊存儲在3個DataNode中實現冗餘。大文件將被切成小塊存儲。web
2、系統環境vim
系統平臺:CentOS 6.5-64位安全
設置ip地址:192.168.0.10、192.168.0.11、192.168.0.12、192.168.0.13、192.168.0.14服務器
主機名:master、slave1、slave2、slave3、slave4網絡
軟件程序:Hadoop-2.4.0.tar.gz(支持64位)、jdk-7u64-linux-x64.gzdom
防火牆關閉service iptables stopssh
SELINUX=disabled
3、環境準備
1.設置主機ip地址
#ifconfig eth1 192.168.0.10 255.255.255.0 up
#vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
HWADDR=00:0C:29:48:2B:37
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.10
NETMASK=255.255.255.0
NETMASK=255.255.255.0
slave1、slave2、slave3、slave4也以相同方式設置ip地址
2.設置主機名
#hostname master
#vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
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
slave1、slave2、slave3、slave4的hosts文件相同
#vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
slave1、slave2、slave3、slave4也以相同方式設置
注意啦!!測試各主機能ping通,經過ping主機名和ip地址測試!!
3.JDK安裝
root@localhost~#tar xvf jdk-7u64-linux-x64.gz
root@localhost~#mv jdk1.7.0_64/ /usr/local/java
root@localhost~#vim /etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/binroot@localhost~#
root@localhost~#source /etc/profile
root@localhost~#java -version
4.添加Hadoop運行用戶
root@localhost~#useradd hadoop
root@localhost~#passwd hadoop
5.master配置SSH密鑰對
要求master免密碼登陸各slave,用於開啓相應服務
root@master ~#su hadoop
hadoop@master ~$ssh-keygen
hadoop@master ~$ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave1
hadoop@master ~$ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave2
hadoop@master ~$ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave3
hadoop@master ~$ssh-copy-id -i .ssh/id_rsa.pub hadoop@slave4
4、安裝hadoop,在master和slave上配置環境變量
1.安裝hadoop
root@master ~#tar xvf hadoop-2.4.0.tar.gz
root@master ~#mv hadoop-2.4.0/ /usr/local/hadoop
root@master ~#ls /usr/local/hadoop
bin etc include lib libexec sbin share
上述目錄中,etc/hadoop/是配置文件目錄,sbin/下存放啓動,中止腳本。
root@master ~#chown -R hadoop.hadoop /usr/local/hadoop/
2.配置環境變量
root@master ~#vim /etc/profile
export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
3.配置hadoop,有四個文件須要配置,hadoop-env.sh core-site.xml mapred-site.xml hdfs-site.xml,有兩個文件須要添加masters和slaves
a. hadoop@master ~$cd /usr/local/hadoop/etc/hadoop
hadoop@master hadoop$vim hadoop-env.sh
export JAVA_HOME=/usr/local/java
b. hadoop@master hadoop$vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value> //namenode的ip端口
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Hadoop temporary cache catalog by cjenlet</description>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/usr/local/hadoop/etc/hadoop/excludes</value>
</property>
</configuration>
c. hadoop@master hadoop$mv mapred-site.xml.template mapred-site.xml
hadoop@master hadoop$vim mapred-site.xml
<configuration>
<property>
<name>mapred.job.tracker</name> //連接jobtrack服務器的配置項,默認爲local,map屬爲1,reduce數爲1
<value>master:9001</value>
</property>
<property>
<name>mapred.local.dir</name> //mapred做爲本地計算機使用的文件夾,能夠配置多塊硬盤,逗號隔開
<value>/usr/local/hadoop/var</value>
</property>
</configuration>
d. hadoop@master hadoop$vim hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.date.dir</name>
<value>file:/usr/local/hadoop/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>4</value> //文件副本數
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value> //啓用web訪問的hdfs
</property>
</configuration>
e. hadoop@master hadoop$vim masters //由這個文件決定master主機的主機名
master
f. hadoop@master hadoop$vim slaves //由這個文件決定slave主機的住機名
slave1
slave2
slave3
slave4
g. 個slave主機安裝hadoop和配置環境變量,第三步由master通ssh安全通道複製給各個slave
hadoop@master ~$scp /usr/local/hadoop/etc/hadoop/* /slave1:/usr/local/hadoop/etc/hadoop/
hadoop@master ~$scp /usr/local/hadoop/etc/hadoop/* /slave2:/usr/local/hadoop/etc/hadoop/
hadoop@master ~$scp /usr/local/hadoop/etc/hadoop/* /slave3:/usr/local/hadoop/etc/hadoop/
hadoop@master ~$scp /usr/local/hadoop/etc/hadoop/* /slave4:/usr/local/hadoop/etc/hadoop/
五.啓動HDFS文件系統
1.格式化HDFS文件系統
hadoop@master ~$hdfs namenode -format
2.檢查新生成的目錄
hadoop@master ~$ll /usr/local/hadoop/name
drwxrwxr-x. 2 hadoop hadoop 24576 12月19 03:53 current
3.啓動hadoop集羣
hadoop 的管理命令位於$HADOOP_HOME/sbin下,以start-*.sh或stop-*.sh開頭;
hadoop@master ~$start-dfs.sh //單獨啓動HDFS分佈式文件系統
hadoop@master ~$start-all.sh //啓動整個hadoop集羣,即啓動HDFS和Map/Reduce
hadoop@master ~$stop-all.sh //關閉整個hadoop集羣
start-dfs.sh和start-all.sh有什麼區別?
4.檢查開啓狀況
hadoop@master ~$jps //查看本節點各進程開啓狀況,本節點爲NameNode
hadoop@master ~hdfs dfsadmin -report|more //查看集羣信息
6、經常使用命令
1.文件下載、上傳、查看、建立、統計、合併
*hadoop@master ~$hadoop fs -ls /
//和linux中的ls命令同樣
*hadoop@master ~$hadoop fs -mkdir /input
//hadoop fs -mkdir 在服務器上建立目錄
hadoop@master ~$hadoop fs -put /usr/local/hadoop/etc/hadoop/* /input
//hadoop fs -put 上傳本地文件到服務器
*hadoop@master ~$hadoop fs -copyFromLocal <本地源文件> <HDFS目標目錄>
//複製本地文件到HDFS上
*hadoop@master ~$hadoop fs -copyToLocal <HDFS> <Local>
//複製HDFS上的文件到本地
*hadoop@master ~$hadoop -fs -du -s -h /passwd
//和linux上的du同樣,hadoop -fs -du [HDFS]
*hadoop@master ~$hadoop fs -getmerge [-nl] <src> <localdst>
//把HDFS上的文件和本地文件合併,合併到本地文件上
2.管理文件的權限和歸屬
*hadoop@master ~$hadoop fs -chgrp root <HDFS上的文件>
//hadoop fs -chgrp 修改屬組
*hadoop@master ~$hadoop fs -chown root.root <HDFS上的文件>
//和linux上的chown同樣
*hadoop@master ~$hadoop fs -chmod -R 755 /passwd
//和linux上的chmod同樣
*hadoop@master ~$
3.集羣管理和查看
*hadoop@master ~$hdfs dfsadmin -report
//查看集羣信息
*hadoop@master ~$hdfs dfsadmin -safemode [enter | leave | get | wait]
//enter:開啓安全模式
//leave:關閉安全模式
//get:獲取當前安全模式的開啓狀況
//wait:一直等到安全模式關閉