1. Hadoop概述
HADOOP是apache旗下的一套開源軟件平臺,利用服務(wù)器集群,根據(jù)用戶的自定義業(yè)務(wù)邏輯,對海量數(shù)據(jù)進行分布式處理
HADOOP的核心組件有:
HDFS(分布式文件系統(tǒng))
YARN(運算資源調(diào)度系統(tǒng))
MAPREDUCE(分布式運算編程框架)
2. HDFS的概念
hdfs是一個文件系統(tǒng),用于存儲文件,通過統(tǒng)一的命名空間–目錄樹來定位文件。它是分布式的,由很多服務(wù)器聯(lián)合起來實現(xiàn)其功能,集群中的服務(wù)器有各自的角色。主要特性如下
HDFS中的文件在物理上是分塊存儲(block),塊的大小可以通過配置參數(shù)( dfs.blocksize)來規(guī)定,默認大小在hadoop2.x版本中是128M,老版本中是64M.
HDFS文件系統(tǒng)會給客戶端提供一個統(tǒng)一的抽象目錄樹,客戶端通過路徑來訪問文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
目錄結(jié)構(gòu)及文件分塊信息(元數(shù)據(jù))的管理由namenode節(jié)點承擔
——namenode是HDFS集群主節(jié)點,負責維護整個hdfs文件系統(tǒng)的目錄樹,以及每一個路徑(文件)所對應(yīng)的block塊信息(block的id,及所在的datanode服務(wù)器)
件的各個block的存儲管理由datanode節(jié)點承擔
—- datanode是HDFS集群從節(jié)點,每一個block都可以在多個datanode上存儲多個副本(副本數(shù)量也可以通過參數(shù)設(shè)置dfs.replicaTIon)
HDFS是設(shè)計成適應(yīng)一次寫入,多次讀出的場景,且不支持文件的修改
3. hdfs不適用的場景
低延遲的數(shù)據(jù)訪問:hdfs的強項在與大量數(shù)據(jù)傳輸,延遲不適合他,10毫秒一下的訪問可以無視hdfs,不過hbase可以彌補這個缺陷。
太多小文件: namenode節(jié)點在內(nèi)存中hold住了整個文件系統(tǒng)的元數(shù)據(jù),因此文件的數(shù)量就會受到限制,每個文件的元數(shù)據(jù)大約150字節(jié),1百萬個文件,每個文件只占一個block,那么就需要300MB內(nèi)存。你的服務(wù)器可以hold住多少呢?
多處寫和隨機修改:目前還不支持多處寫入以及通過偏量隨機修改。
4. namenodes和datanodes
hdfs集群有兩種類型的節(jié)點,一種為master及namenode,另一種為worker及datanodes。namenode節(jié)點管理文件系統(tǒng)的命名空間。它包含一個文件系統(tǒng)的樹,所有文件和目錄的原數(shù)據(jù)都在這個樹上,這些信息被存儲在本地磁盤的兩個文件中,image文件和edit log文件。文件相關(guān)的塊存在哪個塊中,塊在哪個地方,這些信息都是在系統(tǒng)啟動的時候加載namenode的內(nèi)存中,并不會存儲在磁盤中。datanode節(jié)點在文件系統(tǒng)中充當?shù)慕巧褪强嗔?,按照namenode和client的指令進行存儲或者檢索block,并且周期性的向namenode節(jié)點報告它存了哪些文件的block。
5. secondarynamenode
它是namenode的一個快照,會根據(jù)configuraTIon中設(shè)置的值來決定多少時間周期性的去cp一下namenode,記錄namenode中的metadata及其它數(shù)據(jù)。
6. NodeManager(NM)
NodeManager是YARN中每個節(jié)點上的代理,它管理Hadoop集群中單個計算節(jié)點包括與ResourceManger保持通信,監(jiān)督Container的生命周期管理,監(jiān)控每個Container的資源使用(內(nèi)存、CPU等)情況,追蹤節(jié)點健康狀況。
7. ResourceManager
在YARN中,ResourceManager負責集群中所有資源的統(tǒng)一管理和分配,它接收來自各個節(jié)點(NodeManager)的資源匯報信息,并把這些信息按照一定的策略分配給各個應(yīng)用程序(實際上是ApplicaTIonManagerRM與每個節(jié)點的NodeManagers (NMs)和每個應(yīng)用ApplicaTIonMasters (AMs)一起工,b.ApplicationMasters負責與ResourceManager協(xié)商資源與NodeManagers合作啟動容器.
8. hdfs客服端常用命令 hadoop fs-ls///如果提示警告:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...原因:系統(tǒng)預(yù)裝的glibc庫是2.12版本,而hadoop期望是2.14版本,所以打印警告信息。 解決方案:在log4j日志中去除告警信息,在/hadoop-2.5.2/etc/hadoop/log4j.properties文件中添加:log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR-ls功能:顯示目錄信息 示例: hadoop fs-lshdfs://localhost:9000/備注:這些參數(shù)中,所有的hdfs路徑都可以簡寫-->hadoop fs-ls/等同于上一條命令的效果-mkdir功能:在hdfs上創(chuàng)建目錄 示例:hadoop fs-mkdir-p/aaa/bbb/cc/dd-moveFromLocal功能:從本地剪切粘貼到hdfs 示例:hadoop fs-moveFromLocal /home/hadoop/a.txt /aaa/bbb/cc/dd-moveToLocal功能:從hdfs剪切粘貼到本地 示例:hadoop fs-moveToLocal /aaa/bbb/cc/dd /home/hadoop/a.txt--appendToFile 功能:追加一個文件到已經(jīng)存在的文件末尾 示例:hadoop fs-appendToFile./hello.txt hdfs://hadoop-server01:9000/hello.txt可以簡寫為: Hadoop fs-appendToFile./hello.txt /hello.txt-cat功能:顯示文件內(nèi)容 示例:hadoop fs-cat/hello.txt-chmod功能:linux文件系統(tǒng)中的用法一樣,對文件所屬權(quán)限 示例: hadoop fs-chmod666/hello.txt-copyFromLocal功能:從本地文件系統(tǒng)中拷貝文件到hdfs路徑去 示例:hadoop fs-copyFromLocal./jdk.tar.gz /aaa/-copyToLocal功能:從hdfs拷貝到本地 示例:hadoop fs-copyToLocal/aaa/jdk.tar.gz-cp功能:從hdfs的一個路徑拷貝hdfs的另一個路徑 示例: hadoop fs-cp/aaa/jdk.tar.gz /bbb/jdk.tar.gz.2-mv功能:在hdfs目錄中移動文件 示例: hadoop fs-mv/aaa/jdk.tar.gz/-get功能:等同于copyToLocal,就是從hdfs下載文件到本地 示例:hadoop fs-get/aaa/jdk.tar.gz-getmerge功能:合并下載多個文件 示例:比如hdfs的目錄 /aaa/下有多個文件:log.1,log.2,log.3,...hadoop fs-getmerge/aaa/log.*./log.sum-put功能:等同于copyFromLocal 示例:hadoop fs-put/aaa/jdk.tar.gz /bbb/jdk.tar.gz.2-rm功能:刪除文件或文件夾 示例:hadoop fs-rm-r/aaa/bbb/-rmdir功能:刪除空目錄 示例:hadoop fs-rmdir/aaa/bbb/ccc-df功能:統(tǒng)計文件系統(tǒng)的可用空間信息 示例:hadoop fs-df-h/-du功能:統(tǒng)計文件夾的大小信息 示例: hadoop fs-du-s-h/aaa/* -count 功能:統(tǒng)計一個指定目錄下的文件節(jié)點數(shù)量 示例:hadoop fs -count /aaa/9. java操作HDFS1.引入依賴org.apache.hadoophadoop-client2.6.12.測試類 publicclassOperationFileTest{FileSystem fs =null; Configuration conf =null;/** * 初始化文件系統(tǒng)操作的客戶端實例對象 */@Beforepublic void init()throwsIOException, URISyntaxException, InterruptedException { conf =newConfiguration();// uri和用戶身份 ---> 一個文件系統(tǒng)操作的客戶端實例對象fs = FileSystem.get(newURI("hdfs://192.168.133.11:9000"),conf,"root"); }/** * 上傳文件 */@Testpublic void testUpload()throwsIOException { fs.copyFromLocalFile(newPath("D:\examProject.rar"),newPath("/examProject.rar")); fs.close(); }/** * 下載文件 */@Testpublic void testDownload()throwsException{ Path remotePath =newPath("/examProject.rar"); Path localPath =newPath("f:/"); fs.copyToLocalFile(remotePath,localPath); fs.close(); }/** * conf加載的內(nèi)容 */@Testpublic void testConf(){ Iterator