《十小時入門大資料》學習筆記之HDFS
筆記目錄
1. HDFS概述及設計目標
1.1 什麼是HDFS
- Hadoop 實現了一個分散式檔案系統(Hadoop Distributed File System),簡稱HDFS;
- 源自於Google的GFS論文
- 發表於2003年,HDFS是GFS的克隆版
1.2 HDFS的設計目標
- 非常巨大的 分散式 檔案系統
- 執行在普通廉價的硬體上
- 易擴充套件、為使用者提供效能不錯的檔案儲存服務
- 更多的請看官網....
2. HDFS架構
1個Master(NameNode/NN) 帶N個Slaves(DataNode/DN)
一個檔案會被拆分成多個Block,blocksize:128M,eg:130M的檔案==>2 block(128M和2M)
- NN:
1). 負責客戶端的請求響應
2).負責元資料(檔名稱、副本系數、Block存放的DN)的管理 - DN:
1). 儲存使用者的檔案對應的資料塊(Block)
2). 要定期向NN傳送信條資訊,彙報本身及其所有的block資訊,健康狀況
A typical deployment has a dedicated machine that runs only the NameNode software. Each of the other machines in the cluster runs one instance of the DataNode software. The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case. - 建議:NN和DN部署在不同的節點上
圖片.png
3. HDFS副本機制
Replication factor:副本因子/副本系數 ;處理檔案的最後一個block,其他的block大小都相同。

圖片.png
-
HDFS副本存放策略(面試的一個考點)
如下圖,假設一個叢集有兩個機架,橙色的代表客戶端,假設檔案有3個副本,那麼第一個副本存放在客戶端所在的機器上,另外兩個副本存放在與客戶端不在同一個機架上的隨機的兩臺機器上。分機架的好處是:保證容錯性。
圖片.png
4. HDFS環境搭建
- 版本:Hdaoop-2.6.0-cdh5.7.0
- 官方文件: ofollow,noindex">http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0/
- 下載地址: http://archive.cloudera.com/cdh5/cdh/5/
具體的HDFS環境搭建參考另一篇筆記: 在Ubuntu下安裝和搭建Hadoop環境(偽分散式環境)
-
簡單步驟:
1). jdk安裝
- 解壓: tar -zxvf jdk-8u181-linux-x64.tar.gz -C ~/app
- 新增到系統環境變數: vim /etc/profile (或 vim ~/.bashrc )
export JAVA_HOME=/home/hadoop/app/jdk1.8.0_181 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH
- 使環境變數生效:source /etc/profile (或 source ~/.bashrc)
- 驗證java是否配置成功:java -version
2). 安裝SSH - Ubuntu :
sudo apt-get install ssh
sudo apt-get install rsync - CentOS
sudo yum install ssh - 配置免密碼登入
ssh-keygen -t rsa#一路回車就行 cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
- 驗證是否免密碼登入是否成功:
hadoop@Dell:~$ ssh localhost# 接下來輸入yes
3). 下載並解壓Hadoop
- 下載:到cdh官網直接下載
- 解壓:tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app
4). Hadoop配置檔案的修改(hadoop_home/etc/hadoop/) - hadoop-env.sh
/home/hadoop/app/jdk1.8.0_181
- core-site.xml
<!-- hadoop1.X的埠是9000,2.X以後的是8020--> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:8020</value> </property> <!-- hadoop預設的儲存地址是臨時資料夾,在linux下臨時資料夾每次重啟都會被刪除,所以需要新增一個臨時檔案 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/app/tmp</value> </property>
- hdfs-site.xml
<!-- 由於是偽分步單節點。因此副本系數設定為1--> <property> <name>dfs.replication</name> <value>1</value> </property>
5). 啟動hdfs
- 格式化檔案系統(僅第一次執行,):bin/hdfs namenode -format
- 啟動 hdfs:sbin/start-dfs.sh
- 驗證是否啟動成功:
jps :多次三個程序:NameNode 、DataNode、SecondaryNameNode
瀏覽器: http://localhost:50070
6). 停止hdfs
sbin/stop-dfs.sh
至此,HDFS環境搭建完成!
7). 把hadoop配置到環境變數中: vim ~/.bashrc
為了方便後期使用hadoop,需要把hadoop配置到系統環境變數中,後期不管在哪個控制檯目錄下都可以直接使用hadoop shell命令。
export HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
儲存之後一定記得執行:source ~/.bashrc 使配置檔案生效。
5. HDFS shell
- HDFS常用的shell命令
ls mkdir put get mv cp ...... - shell 例子
1). 把當前目錄下的hello.txt檔案上傳到hdfs的根目錄下中:hadoop fs -put hello.txt /圖片.png
圖片.png
圖片.png
圖片.png
6). 遞迴展示檔案:hadoop fs -ls -R /
圖片.png
8).如果在使用中遇到不會是用的,可以直接在控制檯上敲:hadoop fs 然後回車,會出現提示資訊 ......
6. Java API 操作HDFS
- 1) IDEA + Maven建立Java工程
( 注 :IDEA和Maven的安裝請看另外一篇筆記: Ubuntu 16.04安裝IDEA和maven
建立一個新專案(Maven專案),如下圖,注意選上標紅的選項,之後下一步。
image.png
image.png
image.png
image.png
-
-
新增HDFS相關依賴
在pom.xml中,安裝下圖進行新增hadoop的HDFS相關依賴
-
<!--cdh版本的hadoop倉庫--> <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories>

image.png
-
-
開發Java API操作HDFS檔案
略
-
7. HDFS 檔案讀寫流程(面試考點)
這裡詳見 其他簡友的筆記: Hadoop學習筆記(三)漫畫解讀HDFS讀寫原理
8. HDFS優缺點
1)** 優點**
- 資料冗餘、硬體容錯
- 處理流式訪問
- 適合儲存大檔案
- 可構建在廉價的機器上
2)** 缺點** - 低延遲的資料訪問
- 不適合小檔案儲存(因為太多的小檔案會浪費大量的NameNode的資源)