1)Hadoop 是一個由 Apache 基金會所開發的分佈式系統基礎架構.html
2)主要解決,海量數據的存儲和海量數據的分析計算問題。mysql
3)廣義上來講,HADOOP 一般是指一個更普遍的概念——HADOOP 生態圈。sql
Hadoop 三大發行版本:Apache、Cloudera、Hortonworks。
Apache 版本最原始(最基礎)的版本,對於入門學習最好。
Cloudera 在大型互聯網企業中用的較多。
Hortonworks 文檔較好。數據庫
1)Apache Hadoop
官網地址:http://hadoop.apache.org/releases.html
下載地址:https://archive.apache.org/dist/hadoop/common/apache
2)Cloudera Hadoop
官網地址:https://www.cloudera.com/downloads/cdh/5-10-0.html
下載地址:http://archive-primary.cloudera.com/cdh5/cdh/5/服務器
3)Hortonworks Hadoop
官網地址:https://hortonworks.com/products/data-center/hdp/
下載地址:https://hortonworks.com/downloads/#data-platform數據結構
1)高可靠性:Hadoop 底層維護多個數據副本,因此即便 Hadoop 某個計算元素或存儲出現故障,也不會致使數據的丟失。架構
2)高擴展性:在集羣間分配任務數據,可方便的擴展數以千計的節點。
3)高效性:在 MapReduce 的思想下,Hadoop 是並行工做的,以加快任務處理速度。
4)高容錯性:可以自動將失敗的任務從新分配框架
Hadoop 1.x的組成機器學習
1)Hadoop HDFS:一個高可靠、高吞吐量的分佈式文件系統。
2)Hadoop MapReduce:一個分佈式的資源調度和離線並行計算框架。
3)Hadoop Common:支持其餘模塊的工具模塊(Configuration、RPC、序列化機制、日誌操做)。
在 Hadoop2.x 時代,增長了 Yarn。Yarn 只負責資源的調度,MapReduce 只負責運算。
1)Hadoop HDFS:一個高可靠、高吞吐量的分佈式文件系統。
2)Hadoop YARN:做業調度與集羣資源管理的框架。
3)Hadoop MapReduce:一個分佈式的離線並行計算框架。
4)Hadoop Common:支持其餘模塊的工具模塊(Configuration、RPC、序列化機制、日誌操做)。
1)NameNode(nn):存儲文件的元數據,如文件名,文件目錄結構,文件屬性(生成時間、副本數、文件權限),以及每一個文件的塊列表和塊所在的DataNode等。
2)DataNode(dn):在本地文件系統存儲文件塊數據,以及塊數據的校驗和。
3)Secondary NameNode(2nn):用來監控HDFS狀態的輔助後臺程序,每隔一段時間獲取HDFS元數據的快照。
1)ResourceManager(rm):處理客戶端請求、啓動/監控ApplicationMaster、監控NodeManager、資源分配與調度;
2)NodeManager(nm):單個節點上的資源管理、處理來自ResourceManager的命令、處理來自ApplicationMaster的命令;
3)ApplicationMaster:數據切分、爲應用程序申請資源,並分配給內部任務、任務監控與容錯。
4)Container:對任務運行環境的抽象,封裝了CPU、內存等多維資源以及環境變量、啓動命令等任務運行相關的信息。
MapReduce 將計算過程分爲兩個階段:Map 和 Reduce
1)Map 階段並行處理輸入數據
2)Reduce 階段對 Map 結果進行彙總
圖中涉及的技術名詞解釋以下:
1)Sqoop:sqoop 是一款開源的工具,主要用於在 Hadoop(Hive)與傳統的數據庫(mysql)間進行數據的傳遞,能夠將一個關係型數據庫(例如 : MySQL ,Oracle 等)中的數據導進到Hadoop 的 HDFS 中,也能夠將 HDFS 的數據導進到關係型數據庫中。
2)Flume:Flume 是 Cloudera 提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume 支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。
3)Kafka:Kafka 是一種高吞吐量的分佈式發佈訂閱消息系統,有以下特性:
(1)經過 O(1)的磁盤數據結構提供消息的持久化,這種結構對於即便數以 TB 的消息存儲也可以保持長時間的穩定性能。
(2)高吞吐量:即便是很是普通的硬件 Kafka 也能夠支持每秒數百萬的消息。
(3)支持經過 Kafka 服務器和消費機集羣來分區消息。
(4)支持 Hadoop 並行數據加載。
4)Storm:Storm 爲分佈式實時計算提供了一組通用原語,可被用於「流處理」之中,實時處理消息並更新數據庫。這是管理隊列及工做者集羣的另外一種方式。 Storm也可被用於「連續計算」(continuous computation),對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。
5)Spark:Spark 是當前最流行的開源大數據內存計算框架。能夠基於 Hadoop 上存儲的大數據進行計算。
6)Oozie:Oozie 是一個管理 Hdoop 做業(job)的工做流程調度管理系統。Oozie 協調做業就是經過時間(頻率)和有效數據觸發當前的 Oozie 工做流程。
7)Hbase:HBase 是一個分佈式的、面向列的開源數據庫。HBase 不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。
8)Hive:hive 是基於 Hadoop 的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的 sql 查詢功能,能夠將 sql 語句轉換爲 MapReduce 任務進行運行。其優勢是學習成本低,能夠經過類 SQL 語句快速實現簡單的 MapReduce 統計,沒必要開發專門的 MapReduce 應用,十分適合數據倉庫的統計分析。
10)R 語言:R 是用於統計分析、繪圖的語言和操做環境。R 是屬於 GNU 系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。
11)Mahout:
Apache Mahout 是個可擴展的機器學習和數據挖掘庫,當前 Mahout 支持主要的 4 個用例:
推薦挖掘:蒐集用戶動做並以此給用戶推薦可能喜歡的事物。
彙集:收集文件並進行相關文件分組。
分類:從現有的分類文檔中學習,尋找文檔中的類似特徵,併爲無標籤的文檔進行正確的歸類。
頻繁項集挖掘:將一組項分組,並識別哪些個別項會常常一塊兒出現。
12)ZooKeeper:Zookeeper 是 Google 的 Chubby 一個開源的實現。它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分佈式同步、組服務等。ZooKeeper 的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。