HDFS中的基本概念
塊(Block):HDFS的文件被分成塊進行存儲,HDFS塊的默認大小是64MB。塊是文件存儲處理的邏輯單元
NameNode:NameNode是管理節(jié)點,存放文件元數(shù)據(jù)
(1)文件與數(shù)據(jù)塊的映射表
(2)數(shù)據(jù)塊與數(shù)據(jù)節(jié)點的映射表
DataNode:DataNode是HDFS的工作節(jié)點,存放數(shù)據(jù)塊
HDFS體系結(jié)構(gòu)
HDFS的數(shù)據(jù)管理與容錯
(1)每個數(shù)據(jù)塊3個副本,分布在兩個機架內(nèi)的三個節(jié)點
(2)DataNode定期向NameNode發(fā)送心跳消息
(3)二級NameNode定期同步元數(shù)據(jù)映像文件和修改日志。NameNode發(fā)生故障時,備胎轉(zhuǎn)正
HDFS讀取文件的流程:
HDFS 特點
(1)數(shù)據(jù)冗余,硬件容錯
(2)流式的數(shù)據(jù)訪問(一次寫入多次讀?。?/p>
(3)適合存儲大文件
(4)適合數(shù)據(jù)批量讀寫,吞吐量高
(5)適合一次寫入多次讀取,順序讀寫。不支持多用戶并發(fā)寫相同文件
HDFS命令操作演示
hadoop fs -ls /
haddoop fs -rm hadoop-env.sh
hadoop fs -mkdir input
hadoop fs -put hadoop-env.sh input/
hadoop fs -cat input/hadoop-env.sh
hadoop fs -get input/hadoop-env.sh hadoop-env2.sh
MapReduce原理
分而治之,一個大任務(wù)分成多個小的子任務(wù)(map),并行執(zhí)行后,合并結(jié)果(reduce)
MapReduce運行流程
Job & Task:一個Job可以分成多個map task和 reduce task
JobTracker:作業(yè)調(diào)度、分配任務(wù)、監(jiān)控任務(wù)執(zhí)行進度、監(jiān)控TaskTracker的狀態(tài)
TaskTracker:執(zhí)行任務(wù)、匯報任務(wù)狀態(tài)
MapReduce應用案例--WordCount單詞計數(shù)
計算文件中出現(xiàn)的每個單詞的頻數(shù),輸入結(jié)果按照字母的順序排序
首先編寫好代碼(編寫WordCount.java,里面包含Mapper類和Reducer類)
編譯
javac -classpath /usr/hadoop/hadoop-1.2.1/hadoop-core-1.2.1.jar:/usr/hadoop/hadoop-1.2.1/commmons-cli-1.2.jar -d word_count_class/ WordCount.java
打包
cd word_count_class
jar -cvf wordcount.jar *.class
創(chuàng)建輸入和輸出文件file1和file2
將filhe1 和 file2提交至 hdfs中去
cd ......
hadoop fs -mkdir input_wordcount //hdfs中創(chuàng)建文件夾
hadoop fs -put input/* input_wordcount/ //將file1 和 file2提交至 hdfs中去
可以通過 hadoop fs -ls 命令查看 input_wordcount文件夾的位置
提交
hadoop jar word_count_class/wordcount.jar WordCount input_wordcount output_wordcount
查看結(jié)果
hadoop fs -ls output_wordcount //查看結(jié)果文件所在位置
hadoop fs -cat output_wordcount/part-r-00000 //打開文件