Hadoop的簡單瞭解與安裝

hadoopnode

一, Hadoop  分佈式 簡介
Hadoop  是分佈式的系統架構,是  Apache  基金會頂級金牌項目數據庫

分佈式是什麼?學會用大數據的思想來看待和解決問題 思 想很重要編程

 1-1 、Hadoop  的思想之源:
來自於 Google 03 年發佈 3 大論文, GFS、MapReduce、Bigtable ;Dougcutting 用 Java 實現windows

1-2 、Hadoop  創始人介紹
Hadoop 做者 Doug cutting,就任 Yahoo 期間開發了 Hadoop項目,目前在 Cloudera 公司從事架構工做服務器

1-3 、Hadoop  發展歷程網絡

2003-2004 年,Google 公開了部分 GFS 和 Mapreduce 思想的細節,以此爲基礎 Doug Cutting 等人用了 2 年業餘時間實現了DFS 和 Mapreduce 機制,一個微縮版:Nutch
Hadoop 於 2005 年秋天做爲 Lucene 的子項目 Nutch 的一部分正式引入 Apache 基金會。2006 年 3 月份,Map-Reduce 分佈式離線計算 和 Nutch Distributed File System (NDFS) nutch 分佈式文件系統分別被歸入稱爲 Hadoop 的項目中。(Hadoop 現在是 Apache 基金會頂級金牌項目)Hadoop 這名字來源於 Doug Cutting 兒子的玩具大象架構

1-4 、Hadoop  組成:
Hadoop = hdfs(存儲) + mapreduce(計算) + yarn(資源管理)併發

1-4-二、 、統 分佈式存儲系統 HDFS  (Hadoop Distributed File
System  )
– 分佈式存儲系統
– 提供了 高可靠性、高擴展性和高吞吐率的數據存儲服務
1-4-二、 、架 分佈式計算框架 MapReduce
– 分佈式計算框架(計算向數據移動)
– 具備 易於編程、高容錯性和高擴展性等優勢。
1-4-三、 、架 分佈式資源管理框架 YARN (Yet Another Resource Management )
– 負責集羣資源的管理和調度app

2、 分佈式 文件存儲系統  HDFS
2 2- -1 1 、S HDFS  是什麼?
HDFS 是 Hadoop 分佈式文件存儲系統
爲何會有分佈式的文件存儲系統出現?
面對的大量的數據和如何計算的難題大量【pb 級以上】的網頁怎麼存儲問題 (以前是用磁櫃存儲)框架

分佈式存儲系統 HDFS (Hadoop Distributed File System)
主要解決大數據的存儲問題。通過多年的發展,HDFS 的應用已經很是成熟很是多,如百度網盤 360 雲盤 騰訊微雲 阿里雲(不只提供服務器和雲存儲還提供服務,比通常的強多了)大數據好多技術框架都架構於這個文件存儲系統之上的。

hadoo2.x生態系統

2-2 、HDFS  架構圖( 重點) :

如圖所示有 HDFS 中有哪些模塊?
那麼接下來我就一一給你們介紹這些功能模塊及 HDFS 的原理!
衆所周知關係型數據庫是按什麼儲存的?行! 那麼 HDFS 呢?

 

2-3 、HDFS  的功能模塊及原理詳解( 很是重要)
2-3-1 、HDFS  數據存儲單元(block )
--文件被切分紅固定大小的數據塊 block
• 默認數據塊大小爲 128MB (hadoop2.x),可自定義配置
• 若文件大小不到 128MB ,則單獨存成一個 block
- 一個文件存儲方式

按大小被切分紅若干個 block ,存儲到不一樣節點上
• 默認狀況下每一個 block 都有 3 個副本
- Block 大小和副本數經過 Client 端上傳文件時設置,文件上傳成功後副本數能夠變動,Block Size 不可變動

hdfs 存儲模型:字節
– 文件線性切割成塊(Block):偏移量 offset (byte)

– Block 分散存儲在集羣節點中
– 單一文件 Block 大小一致,文件與文件能夠不一致
– Block 能夠設置副本數,副本分散在不一樣節點中
• 副本數不要超過節點數量
– 文件上傳能夠設置 Block 大小和副本數
– 已上傳的文件 Block 副本數能夠調整,大小不變
– 只支持一次寫入屢次讀取,同一時刻只有一個寫入者
– 能夠 append 追加數據

 

2-3-2 、NameNode (簡稱 NN )
2-3 -2 -1  NameNode  主要功能:
• 接受客戶端的讀/寫服務
• 收集 DataNode 彙報的 Block 列表信息

 

2 - 3-  2-  2 、 基於內存存儲 : 不會和磁盤發生交換
• 只存在內存中
• 持久化

2- 3- 2- 3 NameNode  保存 a metadata  信息:
• 文件 owership(歸屬)和 permissions(權限)
• 文件大小,時間
• (Block 列表:Block 偏移量),位置信息
• Block 保存在哪一個 DataNode 信息(由 DataNode 啓動時上
報,不保存在磁盤)

 

2 -3 -2-4 NameNode  持久化
• NameNode 的 metadate 信息在啓動後會加載到內存
• metadata 存儲到磁盤文件名爲」fsimage」
• Block 的位置信息不會保存到 fsimage
• edits 記錄對 metadata 的操做日誌

fsimage 保存了最新的元數據檢查點,相似快照。
- editslog 保存自最新檢查點後的元信息變化,從最新檢查點後,hadoop 將對每一個文件的操做都保存在 edits 中。客戶端修改文件時候,先寫到 editlog,成功後才更新內存中的
metadata 信息。

Metadata = fsimage + editslog

 

2-3-4 、DataNode (DN )
• 本地磁盤目錄存儲數據(Block),文件形式
• 同時存儲 Block 的元數據信息文件
• 啓動 DN 進程的時候會向 NameNode 彙報 block 信息
• 經過向 NN 發送心跳保持與其聯繫(3 秒一次),若是 NN 10分鐘沒有收到 DN 的心跳,則認爲其已經 lost,並 copy 其上的 block 到其它 DN

2-3-5 、SecondaryNameNode (SNN )
– 它的主要工做是幫助 NN 合併 edits log 文件,減小 NN 啓動時間,它不是 NN 的備份(但能夠作備份)。
– SNN 執行合併時間和機制
•A、根據配置文件設置的時間間隔 fs.checkpoint.period 默認 3600 秒。
•B、根據配置文件設置 edits log 大小 fs.checkpoint.size規定 edits 文件的最大值默認是 64MB

2-3-6 、SecondaryNameNode SNN  合併流程

首先是 NN 中的 Fsimage 和 edits 文件經過網絡拷貝,到達SNN 服務器中,拷貝的同時,用戶的實時在操做數據,那麼 NN中就會重新生成一個 edits 來記錄用戶的操做,而另外一邊的 SNN將拷貝過來的 edits 和 fsimage 進行合併,合併以後就替換NN 中的 fsimage。以後 NN 根據 fsimage 進行操做(固然每隔一段時間就進行替換合併,循環)。固然新的 edits 與合併以後傳輸過來的 fsimage 會在下一次時間內又進行合併。

2-3-6 、Block  的副本放置策略
– 第一個副本:放置在上傳文件的 DN;若是是集羣外提交,則隨機挑選一臺磁盤不太滿,CPU 不太忙的節點。
– 第二個副本:放置在於第一個副本不一樣的機架的節點上。
– 第三個副本:與第二個副本相同機架的不一樣節點。
– 更多副本:隨機節點

2-3-7 、HDFS  讀寫流程

2  -3  -7  -1寫文件流程

HDFS 寫流程
– Client:
• 切分文件 Block
• 按 Block 線性和 NN 獲取 DN 列表(副本數)
• 驗證 DN 列表後以更小的單位(packet)流式傳輸數據
– 各節點,兩兩通訊肯定可用
• Block 傳輸結束後:
– DN 向 NN 彙報 Block 信息
– DN 向 Client 彙報完成

– Client 向 NN 彙報完成
• 獲取下一個 Block 存放的 DN 列表
• ……………..
• 最終 Client 彙報完成
• NN 會在寫流程更新文件狀態

2-3 -7 -2 讀文件過程

 

 HDFS 讀流程
– Client:
• 和 NN 獲取一部分 Block 副本位置列表
• 線性和 DN 獲取 Block,最終合併爲一個文件
• 在 Block 副本列表中按距離擇優選取

2- -4 4 、S HDFS  的優缺點(重要)
2-4-1  優勢:
– 高容錯性
• 數據自動保存多個副本
• 副本丟失後,自動恢復
– 適合批處理
• 移動計算而非數據
• 數據位置暴露給計算框架(Block 偏移量)
– 適合大數據處理
• GB 、TB 、甚至 PB 級數據
• 百萬規模以上的文件數量
• 10K+ 節點
– 可構建在廉價機器上
• 經過多副本提升可靠性
• 提供了容錯和恢復機制

 

2-4-2  缺點:
- 低延遲高數據吞吐訪問問題
• 好比支持秒級別反應,不支持毫秒級

• 延遲與高吞吐率問題(吞吐量大但有限制於其延遲)
- 小文件存取
• 佔用 NameNode 大量內存
• 尋道時間超過讀取時間
- 併發寫入、文件隨機修改
• 一個文件只能有一個寫者
• 僅支持 append

3、Hadoop  搭建
3-一、 僞分佈式搭建
一、 jdk 安裝,配置環境變量
- vi /etc/profile
• export JAVA_HOME=/opt/sxt/jdk1.7.0_75
• PATH=$PATH:$JAVA_HOME/bin
二、 ssh 免密鑰(本機)
• ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
• cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
三、 上傳 hadoop.tar.gz 到服務器
- 解壓部署包 到/opt/sxt 目錄下

vi /etc/profile
• export HADOOP_PREFIX=/opt/sxt/hadoop-2.6.5
•  PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
四、 /opt/sxt/hadoop-2.6.5/etc/hadoop 目錄
- hadoop-env.sh
JAVA_HOME=/opt/sxt/jdk1.7.0_75
- core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/sxt/hadoop/local</value>
</property>
-  hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
-  vi slaves(datanode 節點)
node01

五、  格式化 hdfs namenode -format
六、  啓動 start-dfs.sh

七、  查看服務進程啓動了麼? jps
a) SecondaryNameNode
b) NameNode
c) DataNode
d) Jps
八、  訪問 node01:50070
• 確保防火牆關閉(service iptables stop)
九、  hdfs dfs -mkdir /user
十、 hdfs dfs -ls /user

11 、  hdfs dfs 命令:
•  hdfs dfs - - put fileName[ 本地文件名 ] PATH 【s hdfs  的文
件路勁】
• hdfs dfs -du [-s][-h]URI[URI ...] 顯示文件(夾)
大小.
•  hdfs dfs - - mkdir[- - p] <paths> 建立
•  hdfs dfs - - rm - - r /myhadoop1.0 刪除
• hdfs dfs -cp [-f][-p|-p[topax]]URI[URI...]<dest >複製文件(夾),能夠覆蓋,能夠保留原有權限信息

產生 100000 條數據:
for i in `seq 100000`;do echo "hello sxt $i" >> test.txt;done

4、Windows  開發環境整合
一、windows 上部署 hadoop 包
• 部署包
• 源碼包
• lib 整合
• 將老師給的bin目錄下的文件覆蓋到部署目錄的bin目
錄下
– hadoop.dll 放到 c:/windows/system32 下
二、windows 環境變量配置
– hadoop 的 bin 目錄 添加到 path 路徑下
– HADOOP_USER_NAME
• root
三、eclipse 插件
解壓 eclipse 插件壓縮包:eclipse-mars
將如下 jar 包放入 eclipse 的 plugins 文件夾中
hadoop-eclipse-plugin-2.6.0.jar
啓動 eclipse:出現界面以下:

 

 

 

相關文章
相關標籤/搜索