HDFS簡(jiǎn)介摘錄:HDFS 是一個(gè) Apache Software Foundation 項(xiàng)目,是 Apache Hadoop 項(xiàng)目的一個(gè)子項(xiàng)目(參見(jiàn)參考資料)。Hadoop 非常適于存儲(chǔ)大型數(shù)據(jù)(比如 terabytes 和 petabytes),并使用 HDFS 作為其存儲(chǔ)系統(tǒng)。HDFS 允許您連接多個(gè)集群中包含的節(jié)點(diǎn)(普通個(gè)人計(jì)算機(jī)),那些集群上分布著一些數(shù)據(jù)文件。然后您可以將那些數(shù)據(jù)文件作為一個(gè)無(wú)縫文件系統(tǒng)來(lái)進(jìn)行訪問(wèn)和存儲(chǔ)。對(duì)數(shù)據(jù)文件的訪問(wèn)通過(guò)一種流線型(streaming)方式進(jìn)行處理,這意味著應(yīng)用程序或命令通過(guò) MapReduce 處理模型直接執(zhí)行(參見(jiàn)參考資料)。
HDFS 是容錯(cuò)的,且提供對(duì)大數(shù)據(jù)集的高吞吐量訪問(wèn)。本文探索 HDFS 的主要特性,并提供一個(gè)高級(jí) HDFS 架構(gòu)視圖。


一個(gè)集群包含一個(gè) Name node 。這種設(shè)計(jì)有利于形成一個(gè)簡(jiǎn)化模型來(lái)管理每個(gè)名稱空間并仲裁數(shù)據(jù)分布。
HDFS配置:
由于使用個(gè)人電腦安裝的虛擬機(jī)(centos 7/64bit)測(cè)試又加虛擬化不太熟悉就只能在偽分布式下進(jìn)行測(cè)試。
hadoop用戶創(chuàng)建和免密碼登錄配置略過(guò)。
JDK配置:
--下載jdk1.7或者更高的jdk版本
$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz
$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-linux-x64.gz
--獲得管理員使其jdk對(duì)所有用戶有效
$ su
password:
# mv jdk1.7.0_71 /usr/local/
--返回hadoop用戶
# exit
--編輯~/.bashrc添加下面環(huán)境變量
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin
--使修改的配置生效
$ source ~/.bashrc
--jdk多版本控制
$ su
password:
--把新的jdk加入到版本控制器中
# alternatives --install /usr/bin/java java usr/local/java/bin/java 2
# alternatives --install /usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install /usr/bin/jar jar usr/local/java/bin/jar 2
# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar
--選擇我們需要使用的版本
# alternatives --config java
--返回hadoop用戶
# exit
--驗(yàn)證jdk安裝是否成功,執(zhí)行命令如出現(xiàn)jdk相關(guān)信息則表示配置成功
$ java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)
Hadoop環(huán)境配置:
--下載hadoop
$ su
password:
# cd /usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/ hadoop-2.4.1.tar.gz # tar xzf hadoop-2.4.1.tar.gz
--重命名
# mv hadoop-2.4.1 hadoop
# exit
--編輯 ~/.bashrc添加下面環(huán)境變量
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME
--使其配置生效
$ source ~/.bashrc
--驗(yàn)證hadoop安裝是否成功
$ hadoop version
Hadoop 2.4.1 Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0From source with checksum 79e53ce7994d1628b240f09af91e1af4
--這個(gè)目錄包含所有hadoop的本地配置文件
$ cd $HADOOP_HOME/etc/hadoop
--如果使用java開(kāi)發(fā)hadoop程序需要在hadoop-env.sh中修改添加如下環(huán)境變量
export JAVA_HOME=/usr/local/jdk1.7.0_71
Hadoop配置:
--編輯$HADOOP_HOME/etc/hadoop/core-site.xml修改<configuration></configuration>內(nèi)容如下:
<configuration>
<property>
<name>fs.default.name </name>
<value> hdfs://localhost:9000 </value>
</property>
</configuration>
---------------------------------------------------------------
--設(shè)置hdfs參數(shù),修改hdfs-site.xml中<configuration></configuration>內(nèi)容如下
--文件備份個(gè)數(shù)
<configuration>
<!--hdfs中文件備份數(shù)量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--下面file所對(duì)應(yīng)的目錄可以曬當(dāng)前系統(tǒng)中的任意目錄-->
<!--hdfs namenode 操作目錄-->
<property>
<name>dfs.name.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
</property>
<!--hdfs datanode 操作目錄-->
<property>
<name>dfs.data.dir</name>
<value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
</property>
</configuration>
---------------------------------------------------------------
--格式化hdfs,執(zhí)行如下命令會(huì)在namenode和datanode對(duì)于的file path下面生成相應(yīng)映射文件
$ cd ~
$ hdfs namenode -format
--格式化只需要執(zhí)行一次,以后啟動(dòng)不需要再次執(zhí)行。如果不小心重復(fù)執(zhí)行了會(huì)出現(xiàn)namenode
和datanode對(duì)應(yīng)不上,啟動(dòng)后找不到datanode的進(jìn)程,如果出現(xiàn)了這種事情可以使用如下方式解決問(wèn)題:
1 打開(kāi)namenode 對(duì)應(yīng)的操作目錄下面/current/VERSION文件復(fù)制clusterID的值:
$ cat /home/hadoop/hadoopinfra/hdfs/namenode/current/VERSION
#Mon Jul 11 01:52:18 PDT 2016
namespaceID=1991084453
clusterID=CID-22f38c16-19a9-4dae-890e-a6a9056b3b58
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1747627022-127.0.0.1-1468227138388
layoutVersion=-63
2 編輯datanode對(duì)應(yīng)的操作目錄下面/current/VERSION文件修改clusterID的值為上面復(fù)制的值:
vi /home/hadoop/hadoopinfra/hdfs/datanode/current/VERSION
#Mon Jul 11 02:26:08 PDT 2016
storageID=DS-ac4b9435-3b8d-4482-9150-ae95ebae46d8
#保證這個(gè)屬性和namenode中的值一致
clusterID=CID-22f38c16-19a9-4dae-890e-a6a9056b3b58
cTime=0
datanodeUuid=b5f753e3-fb28-4f9d-b71a-b36333149a7c
storageType=DATA_NODE
layoutVersion=-56
3 重新啟動(dòng)hdfs。
----------------------------------------------------------------------
--啟動(dòng)hdfs
$ start-dfs.sh
--啟動(dòng)成功后就可對(duì)hdfs進(jìn)行一下操作,類似于普通的文件系統(tǒng)。
$ $HADOOP_HOME/bin/hadoop fs -help
--這個(gè)命令列出了所有關(guān)于hdfs的操作指令,創(chuàng)建 更新 修改 和刪除等。hadoop也提供了一套接口(后面學(xué)習(xí)到j(luò)ava hadoop編程時(shí)再研究)給客戶端調(diào)用來(lái)實(shí)現(xiàn)這些功能。
--停止hdfs
$ stop-dfs.sh
結(jié)束語(yǔ):
學(xué)習(xí)筆記比較粗糙,如有不適請(qǐng)包涵O(∩_∩)O~。