1、Hadoop是什么
1.1、小故事版本的解釋
小明接到一個(gè)任務(wù):計(jì)算一個(gè)100M的文本文件中的單詞的個(gè)數(shù),這個(gè)文本文件有若干行,每行有若干個(gè)單詞,每行的單詞與單詞之間都是以空格鍵分開的。對于處理這種100M量級(jí)數(shù)據(jù)的計(jì)算任務(wù),小明感覺很輕松。他首先把這個(gè)100M的文件拷貝到自己的電腦上,然后寫了個(gè)計(jì)算程序在他的計(jì)算機(jī)上執(zhí)行后順利輸出了結(jié)果。
后來,小明接到了另外一個(gè)任務(wù),計(jì)算一個(gè)1T(1024G)的文本文件中的單詞的個(gè)數(shù)。再后來,小明又接到一個(gè)任務(wù),計(jì)算一個(gè)1P(1024T)的文本文件中的單詞的個(gè)數(shù)……
面對這樣大規(guī)模的數(shù)據(jù),小明的那一臺(tái)計(jì)算機(jī)已經(jīng)存儲(chǔ)不下了,也計(jì)算不了這樣大的數(shù)據(jù)文件中到底有多少個(gè)單詞了。機(jī)智的小明上網(wǎng)百度了一下,他在百度的輸入框中寫下了:大數(shù)據(jù)存儲(chǔ)和計(jì)算怎么辦?按下回車鍵之后,出現(xiàn)了有關(guān)Hadoop的網(wǎng)頁。
看了很多網(wǎng)頁之后,小明總結(jié)一句話:Hadoop就是存儲(chǔ)海量數(shù)據(jù)和分析海量數(shù)據(jù)的工具。
1.2、稍專業(yè)點(diǎn)的解釋
Hadoop是由JAVA語言編寫的,在分布式服務(wù)器集群上存儲(chǔ)海量數(shù)據(jù)并運(yùn)行分布式分析應(yīng)用的開源框架,其核心部件是HDFS與MapReduce。
HDFS是一個(gè)分布式文件系統(tǒng):引入存放文件元數(shù)據(jù)信息的服務(wù)器Namenode和實(shí)際存放數(shù)據(jù)的服務(wù)器Datanode,對數(shù)據(jù)進(jìn)行分布式儲(chǔ)存和讀取。
MapReduce是一個(gè)計(jì)算框架:MapReduce的核心思想是把計(jì)算任務(wù)分配給集群內(nèi)的服務(wù)器里執(zhí)行。通過對計(jì)算任務(wù)的拆分(Map計(jì)算/Reduce計(jì)算)再根據(jù)任務(wù)調(diào)度器(JobTracker)對任務(wù)進(jìn)行分布式計(jì)算。
1.3、記住下面的話:
Hadoop的框架最核心的設(shè)計(jì)就是:HDFS和MapReduce。HDFS為海量的數(shù)據(jù)提供了存儲(chǔ),則MapReduce為海量的數(shù)據(jù)提供了計(jì)算。
把HDFS理解為一個(gè)分布式的,有冗余備份的,可以動(dòng)態(tài)擴(kuò)展的用來存儲(chǔ)大規(guī)模數(shù)據(jù)的大硬盤。
把MapReduce理解成為一個(gè)計(jì)算引擎,按照MapReduce的規(guī)則編寫Map計(jì)算/Reduce計(jì)算的程序,可以完成計(jì)算任務(wù)。
2、Hadoop能干什么
大數(shù)據(jù)存儲(chǔ):分布式存儲(chǔ)
日志處理:擅長日志分析
ETL:數(shù)據(jù)抽取到oracle、MySQL、DB2、mongdb及主流數(shù)據(jù)庫
機(jī)器學(xué)習(xí): 比如Apache Mahout項(xiàng)目
搜索引擎:Hadoop + lucene實(shí)現(xiàn)
數(shù)據(jù)挖掘:目前比較流行的廣告推薦,個(gè)性化廣告推薦
Hadoop是專為離線和大規(guī)模數(shù)據(jù)分析而設(shè)計(jì)的,并不適合那種對幾個(gè)記錄隨機(jī)讀寫的在線事務(wù)處理模式。
實(shí)際應(yīng)用:
(1)Flume+Logstash+Kafka+Spark Streaming進(jìn)行實(shí)時(shí)日志處理分析
(2)酷狗音樂的大數(shù)據(jù)平臺(tái)
3、怎么使用Hadoop
3.1、Hadoop集群的搭建
無論是在windows上裝幾臺(tái)虛擬機(jī)玩Hadoop,還是真實(shí)的服務(wù)器來玩,說簡單點(diǎn)就是把Hadoop的安裝包放在每一臺(tái)服務(wù)器上,改改配置,啟動(dòng)就完成了Hadoop集群的搭建。
3.2、上傳文件到Hadoop集群
Hadoop集群搭建好以后,可以通過web頁面查看集群的情況,還可以通過Hadoop命令來上傳文件到hdfs集群,通過Hadoop命令在hdfs集群上建立目錄,通過Hadoop命令刪除集群上的文件等等。
3.3、編寫map/reduce程序
通過集成開發(fā)工具(例如eclipse)導(dǎo)入Hadoop相關(guān)的jar包,編寫map/reduce程序,將程序打成jar包扔在集群上執(zhí)行,運(yùn)行后出計(jì)算結(jié)果。