轉載
參考地址:https://www.zhihu.com/question/333417513
1、Hadoop是什么
1.1、小故事版本的解釋
小明接到一個任務:計算一個100M的文本文件中的單詞的個數,這個文本文件有若干行,每行有若干個單詞,每行的單詞與單詞之間都是以空格鍵分開的。對於處理這種100M量級數據的計算任務,小明感覺很輕松。他首先把這個100M的文件拷貝到自己的電腦上,然后寫了個計算程序在他的計算機上執行后順利輸出了結果。
后來,小明接到了另外一個任務,計算一個1T(1024G)的文本文件中的單詞的個數。再后來,小明又接到一個任務,計算一個1P(1024T)的文本文件中的單詞的個數……
面對這樣大規模的數據,小明的那一台計算機已經存儲不下了,也計算不了這樣大的數據文件中到底有多少個單詞了。機智的小明上網百度了一下,他在百度的輸入框中寫下了:大數據存儲和計算怎么辦?按下回車鍵之后,出現了有關Hadoop的網頁。
看了很多網頁之后,小明總結一句話:Hadoop就是存儲海量數據和分析海量數據的工具。
1.2、稍專業點的解釋
Hadoop是由java語言編寫的,在分布式服務器集群上存儲海量數據並運行分布式分析應用的開源框架,其核心部件是HDFS與MapReduce。
HDFS是一個分布式文件系統:引入存放文件元數據信息的服務器Namenode和實際存放數據的服務器Datanode,對數據進行分布式儲存和讀取。
MapReduce是一個計算框架:MapReduce的核心思想是把計算任務分配給集群內的服務器里執行。通過對計算任務的拆分(Map計算/Reduce計算)再根據任務調度器(JobTracker)對任務進行分布式計算。
1.3、記住下面的話:
Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,則MapReduce為海量的數據提供了計算。
把HDFS理解為一個分布式的,有冗余備份的,可以動態擴展的用來存儲大規模數據的大硬盤。
把MapReduce理解成為一個計算引擎,按照MapReduce的規則編寫Map計算/Reduce計算的程序,可以完成計算任務。
2、Hadoop能干什么
大數據存儲:分布式存儲
日志處理:擅長日志分析
ETL:數據抽取到oracle、mysql、DB2、mongdb及主流數據庫
機器學習: 比如Apache Mahout項目
搜索引擎:Hadoop + lucene實現
數據挖掘:目前比較流行的廣告推薦,個性化廣告推薦
Hadoop是專為離線和大規模數據分析而設計的,並不適合那種對幾個記錄隨機讀寫的在線事務處理模式。