大數據技術

大數據(big data),指沒法在必定時間範圍內用常規軟件工具進行捕捉、管理和處理的數據集合,是須要新處理模式才能具備更強的決策力、洞察發現力和流程優化能力的海量、高增加率和多樣化的信息資產。 [1]html

維克托·邁爾-舍恩伯格及肯尼斯·庫克耶編寫的《大數據時代》 [2]  中大數據指不用隨機分析法(抽樣調查)這樣捷徑,而採用全部數據進行分析處理。大數據的5V特色(IBM提出):Volume(大量)、Velocity(高速)、Variety(多樣)、Value(低價值密度)、Veracity(真實性)。java

timg

timg-1

Hadoopnode

Hadoop是一個由Apache基金會所開發的分佈式系統基礎架構。正則表達式

用戶能夠在不瞭解分佈式底層細節的狀況下,開發分佈式程序。充分利用集羣的威力進行高速運算和存儲。算法

[1]  Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特色,而且設計用來部署在低廉的(low-cost)硬件上;並且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,能夠以流的形式訪問(streaming access)文件系統中的數據。sql

Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS爲海量的數據提供了存儲,而MapReduce則爲海量的數據提供了計算shell

1、Hadoop概述數據庫

Hadoop是Apache提供的開源的海量數據離線處理框架,是最知名的大數據框架之一。apache

最初來源於Google的三篇論文,由Apache基於論文中的原理進行了開源的實現編程

Google的集羣系統:GFS、MapReduce、BigTable

Hadoop的集羣系統:HDFS、MapReduce、HBase

其中HDFS和MapReduce組成了Hadoop,並後續在Hadoop2.0中引入了Yarn。因此目前的Hadoop由以下三個組件組成:

HDFS:Hadoop分佈式文件存儲系統

MapReduce:Hadoop分佈式數據計算框架

Yarn:Hadoop分佈式資源協調工具

**最初設計的目的:Hadoop設計的初衷是爲了解決Nutch的海量數據存儲和處理的需求,能夠解決大數據場景下的數據存儲和處理的問題。

**名字的起源: Doug Cutting如此解釋Hadoop的得名:」這個名字是我孩子給一頭吃飽了的棕黃色大象命名的。個人命名標準就是簡短,容易發音和拼寫,沒有太多的意義,而且不會被用於別處。小孩子是這方面的高手。Google就是由小孩命名的。」

2、Hadoop安裝配置

1.下載

Hadoop工做須要JDK的支持,請注意下載時對JDK的版本要求。

下載地址:http://hadoop.apache.org/releases.html

**Apache Hadoop版本分爲兩代,咱們將第一代Hadoop稱爲Hadoop 1.0,第二代Hadoop稱爲Hadoop 2.0,而且互不兼容。

**第一代Hadoop包含三個大版本,分別是0.20.x,0.21.x和0.22.x,其中,0.20.x最後演化成1.0.x,變成了穩定版,而0.21.x和0.22.x則NameNode HA等新的重大特性。

**第二代Hadoop包含兩個版本,分別是0.23.x和2.x,它們徹底不一樣於Hadoop 1.0,是一套全新的架構,均包含HDFS Federation和YARN兩個系統,相比於0.23.x,2.x增長了NameNode HA和Wire-compatibility兩個重大特性

2.安裝

Hadoop的安裝分爲單機方式、僞分佈式方式 和 徹底分佈式方式。

單機模式是Hadoop的默認模式。解壓便可使用單機模式。

單機模式不啓動任何守護進程

沒法使用hdfs和yarn,只能用來進行mr的本地測試

不能用做生產環境

僞分佈模式

單機環境下啓動全部的守護進程

具備hadoop的完整功能

可使用hdfs,mapreudce和yarn

可是這些守護進程都運行在同一臺機器上,並不能真正的提供性能上的提高

只能用來開發測試,不能夠用在生產環境下。

徹底分佈模式

啓動全部的守護進程

具備hadoop完整的功能

可使用hdfs、mapreduce和yarn

而且這些守護進程運行在集羣中,能夠真正的利用集羣提供高性能

在生產環境下使用

3.單機安裝

4.僞分佈式安裝

參看:hadoop僞分佈式安裝配置

5.全分佈式安裝

SPARK(計算引擎)

Apache Spark 是專爲大規模數據處理而設計的快速通用的計算引擎。Spark是UC Berkeley AMP lab (加州大學伯克利分校的AMP實驗室)所開源的類Hadoop MapReduce的通用並行框架,Spark,擁有Hadoop MapReduce所具備的優勢;但不一樣於MapReduce的是——Job中間輸出結果能夠保存在內存中,從而再也不須要讀寫HDFS,所以Spark能更好地適用於數據挖掘與機器學習等須要迭代的MapReduce的算法。

Spark 是一種與 Hadoop 類似的開源集羣計算環境,可是二者之間還存在一些不一樣之處,這些有用的不一樣之處使 Spark 在某些工做負載方面表現得更加優越,換句話說,Spark 啓用了內存分佈數據集,除了可以提供交互式查詢外,它還能夠優化迭代工做負載。

Spark 是在 Scala 語言中實現的,它將 Scala 用做其應用程序框架。與 Hadoop 不一樣,Spark 和 Scala 可以緊密集成,其中的 Scala 能夠像操做本地集合對象同樣輕鬆地操做分佈式數據集。

儘管建立 Spark 是爲了支持分佈式數據集上的迭代做業,可是實際上它是對 Hadoop 的補充,能夠在 Hadoop 文件系統中並行運行。經過名爲 Mesos 的第三方集羣框架能夠支持此行爲。Spark 由加州大學伯克利分校 AMP 實驗室 (Algorithms, Machines, and People Lab) 開發,可用來構建大型的、低延遲的數據分析應用程序。

ETL(數據倉庫技術)

ETL,是英文 Extract-Transform-Load 的縮寫,用來描述將數據歷來源端通過抽取(extract)、交互轉換(transform)、加載(load)至目的端的過程。ETL一詞較經常使用在數據倉庫,但其對象並不限於數據倉庫。

ETL是構建數據倉庫的重要一環,用戶從數據源抽取出所需的數據,通過數據清洗,最終按照預先定義好的數據倉庫模型,將數據加載到數據倉庫中去。

信息是現代企業的重要資源,是企業運用科學管理、決策分析的基礎。目前,大多數企業花費大量的資金和時間來構建聯機事務處理OLTP的業務系統和辦公自動化系統,用來記錄事務處理的各類相關數據。據統計,數據量每2~3年時間就會成倍增加,這些數據蘊含着巨大的商業價值,而企業所關注的一般只佔在總數據量的2%~4%左右。所以,企業仍然沒有最大化地利用已存在的數據資源,以致於浪費了更多的時間和資金,也失去制定關鍵商業決策的最佳契機。因而,企業如何經過各類技術手段,並把數據轉換爲信息、知識,已經成了提升其核心競爭力的主要瓶頸。而ETL則是主要的一個技術手段。

hdfs

Hadoop分佈式文件系統(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分佈式文件系統。它和現有的分佈式文件系統有不少共同點。但同時,它和其餘的分佈式文件系統的區別也是很明顯的。HDFS是一個高度容錯性的系統,適合部署在廉價的機器上。HDFS能提供高吞吐量的數據訪問,很是適合大規模數據集上的應用。HDFS放寬了一部分POSIX約束,來實現流式讀取文件系統數據的目的。HDFS在最開始是做爲Apache Nutch搜索引擎項目的基礎架構而開發的。HDFS是Apache Hadoop Core項目的一部分。

HDFS有着高容錯性(fault-tolerant)的特色,而且設計用來部署在低廉的(low-cost)硬件上。並且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣能夠實現流的形式訪問(streaming access)文件系統中的數據。

3、HDFS的概述

HDFS是Hadoop分佈式文件系統,用來分佈式存儲海量數據,並具備高可靠 高性能 可伸縮的能力。

hdfs屏蔽了分佈式存儲的細節,提供了標準的訪問方式,可以以相似訪問本地文件系統的方式訪問hdfs中的文件。

能夠經過shell 或 javaapi方式操做hdfs中的數據。

4、HDFS的shell操做

hadoop fs -ls /user

hadoop fs -mkdir /user/trunk

hadoop fs -lsr /user (遞歸的)

hadoop fs -put test.txt /user/trunk

hadoop fs -put test.txt . (複製到hdfs當前目錄下,首先要建立當前目錄)

hadoop fs -get /user/trunk/test.txt . (複製到本地當前目錄下)

hadoop fs -cat /user/trunk/test.txt

hadoop fs -tail /user/trunk/test.txt (查看最後1000字節)

hadoop fs -rm /user/trunk/test.txt

hadoop fs -rmdir /user/trunk

hadoop fs -help ls (查看ls命令的幫助文檔)

**hdfs中的數據 一次寫入 屢次讀取 不支持行級別的增刪改

——————————————————————————————

Eclipse中Hadoop插件的使用

將插件文件hadoop-eclipse-plugin-2.7.1.jar放入eclipse/plugins目錄下,重啓eclipse

**當遇到權限拒絕問題時,能夠修改hdfs-site.xml中的配置dfs.permissions爲false關閉hadoop的權限認證

**也能夠在windows的環境變量中配置HADOOP_USER_NAME指定鏈接hadoop時使用的名稱,這種方式配置完要重啓eclipse

——————————————————————————————

5、HDFS技術細節

HDFS的主要原理,是將數據進行切塊後進行復制並存儲在集羣的多個節點中,從而實現了海量數據分佈式存儲,並經過副本實現了可靠性保證。

其中切出的塊稱爲Block。

負責存放Block的節點稱之爲DataNode節點。

負責存放元數據的節點稱之爲NameNode節點。

另外還有一個獨立進程稱做SecondaryNameNode負責幫助NameNode進行元數據的合併操做

1.Block

HDFS中存儲的基本單位。

當文件被存儲到hdfs的過程當中,會先將文件按照指定大小來切塊即block,複製出指定數量的副本(默認是3個),分佈式存儲在集羣中

Block 默認的大小爲128(早期版本中爲64)M。

將文件切塊有以下幾個目的:

一個大文件切分爲小的若干個Block方便分佈式的存儲在不一樣磁盤中

屏蔽了數據的區別,只須要面向Block操做,從而簡化存儲系統。

有利於數據的複製。每次複製的是一個體積較小的Block,而不是一個大型文件,效率更高。

若是切分事後,剩餘數據不夠128MB,則會將剩餘數據單獨做爲一個Block存儲,數據多大,Block就多大,128MB只是最大大小,不是固定大小。

例如,一個256MB文件,共有256/128=2個Block.

一個258MB文件,共有258/128 = 2 餘下2MB,則餘下的2MB會獨佔一個Block大小爲2MB,則且分出 兩個128MB的Block和一個2MB的Block

一個1MB文件,則單獨佔用一個Block,這個Block爲1MB大小。

2.DataNode

數據以Block的形式存放在DataNode中

DataNode節點會不斷向NameNode節點發送心跳報告保持與其聯繫(3秒一次)

在心跳報告中,向NameNode報告信息,從心跳響應中接受NameNode的指令,執行對塊的複製 移動 刪除等操做。

NameNode若是10分鐘都沒收到dn的心跳,則認爲該DataNode已經lost,並copy其上的block到其餘dn

3.NameNode

NameNode維護着HDFS中的元數據信息,包括文件信息 目錄結構信息 副本數量信息 文件和Block之間關係的信息、Block和DataNode之間的關係信息,數據格式參照以下:

FileName replicas block-Ids id2host

例如: /test/a.log,3,{b1,b2},[{b1:[h0,h1,h3]},{b2:[h0,h2,h4]}]

NameNode中的元數據信息存儲在內存/文件中,內存中爲實時信息,文件中爲數據鏡像做爲持久化存儲使用。

其中內存中的信息包括 文件信息 目錄結構信息 副本數量信息 文件和Block之間關係的信息、Block和DataNode之間的關係信息

而文件中的信息包括文件信息 目錄結構信息 副本數量信息 文件和Block之間關係的信息

能夠發現文件中的元數據比起內存中缺失了 blockid和datanode之間的對應關係,這是由於,hdfs集羣常常發生變更,datanode變多或變少都是很正常的,所以這些信息都是臨時在內存中組織的,而不會存儲在磁盤鏡像文件中

文件包括:

fsimage 元數據鏡像文件。存儲某NameNode元數據信息,並非實時同步內存中的數據。

edits 操做日誌文件

fstime 保存最近一次checkpoit的時間

當有寫請求時,NameNode會首先寫editlog到磁盤edits文件中,成功後纔會修改內存,並向客戶端返回

因此,fsimage中的數據並非實時的數據,而是在達到條件時要和edits文件合併,合併過程須要SNN參與

4.SecondaryNameNode

SecondaryNameNode並非NameNode的熱備份,而是協助者幫助NameNode進行元數據的合併,

從另外的角度來看能夠提供必定的備份功能,但並非熱備,若是直接使用可能會丟失上一次合併後發生的數據!能夠從ssn中恢復部分數據,可是沒法恢復所有。

什麼時候出發數據合併?:

根據配置文件設置的時間間隔:fs.checkpoint.period 默認3600秒

根據配置文件設置的edits log大小 fs.checkpoint.size 默認64MB

合併過程(參看文檔圖):

達到條件後 snn會將nn中的fsimage和edits文件拷貝過來,同時nn中會建立一個新的edits.new文件,新的讀寫請求會寫入到這個edits.new中,在snn中將拷貝過來的fsimage和edits合併爲一個新的fsimage,最後snn將合併完成的fsimage文件拷貝回nn中替換以前的fsimage,nn再將edtis.new改成edits

因爲NameNode實時數據都在內存中,此處的合併指的是磁盤中的持久化的數據的處理。

判斷:ssn能夠對元數據作必定程度的備份,可是不是熱備,對不對?

思考:什麼狀況下可能形成NameNode元數據信息丟失?

snn並非nn的熱備,可是能保存大部分備份數據。緣由就在於edits.new中的數據丟失了就找不回來了

一般NameNode和SNN要放置到不一樣機器中以此提高性能,並提供必定的元數據安全性。

5.Block副本放置策略:

第一個副本:放置在上傳文件的DN,若是是集羣就外提交,就隨機選擇一臺磁盤不太滿,cpu不太忙的節點

第二個副本:放置在第一個副本不一樣機架的節點上

第三個副本:放置在與第二個副本相同機架的節點上

更多副本:隨機節點

**機架感知策略(參看文章)

6、HDFS執行流程(參看文檔圖)

1.HDFS讀流程

使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;

NameNode會檢驗當前文件是否存在 以及當前客戶端是否有權限讀取該文件

若是都沒有問題,Namenode會視狀況返回文件的部分或者所有block列表,對於每一個block,Namenode都會返回有該block副本的DataNode地址;

客戶端開發庫Client會選取離客戶端最接近(並非物理上的最近,而是延遲最低負載最低)的DataNode來讀取block;若是客戶端自己就是DataNode,那麼將從本地直接獲取數據.

讀取完當前block的數據後,關閉與當前的DataNode鏈接,併爲讀取下一個block尋找最佳的DataNode;

當讀完列表的block後,且文件讀取尚未結束,客戶端開發庫會繼續向Namenode獲取下一批的block列表。

讀取完一個block都會進行checksum驗證,若是讀取datanode時出現錯誤,客戶端會通知Namenode,而後再從下一個擁有該block拷貝的datanode繼續讀。

當文件最後一個塊也都讀取完成後,datanode會鏈接namenode告知關閉文件。

2.HDFS的寫流程

使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;

Namenode會檢查要建立的文件是否已經存在,建立者是否有權限進行操做,成功則會爲文件建立一個記錄,不然會讓客戶端拋出異常;

當客戶端開始寫入文件的時候,開發庫會將文件切分紅多個packets,並在內部以數據隊列」data queue」的形式管理這些packets,並向Namenode申請新的blocks。,獲取用來存儲replicas的合適的datanodes列表, 列表的大小根據在Namenode中對replication的設置而定

開始以pipeline(管道)的形式將packet寫入所 有的replicas中。客戶端把packet以流的方式寫入第一個datanode,該datanode把該packet存儲以後,再將其傳遞給在此 pipeline中的下一個datanode,直到最後一個datanode,這種寫數據的方式呈流水線的形式。

最後一個datanode成功存儲以後會返回一個ack packet,在pipeline裏傳遞至客戶端,在客戶端的開發庫內部維護着」ack queue」,成功收到datanode返回的ack packet後會從」ack queue」移除相應的packet。

若是傳輸過程當中,有某個datanode出現了故障,那麼當前的pipeline會被關閉,出現故障的datanode會從當前的pipeline中移除, 剩餘的block會繼續剩下的datanode中繼續以pipeline的形式傳輸,同時Namenode會分配一個新的datanode,保持 replicas設定的數量。

當全部的packges都成功的上傳後,客戶端通知NameNoe文件上傳完成,NameNode將該文件置爲可用狀態,並關閉該文件

3.HDFS的刪除流程

客戶端發起請求鏈接NameNode表示要刪除文件

NameNode檢查文件是否存在 及 是否有權限刪除文件.

NameNode執行元數據的刪除 – 將該元數據置爲已刪除狀態。

向客戶端表示文件刪除成功.

當保存着這些數據塊的DataNode節點向NameNode節點發送心跳時,在心跳響應中,NameNode節點會向DataNode發出指令,要求刪除這些block。

DataNode收到指令後刪除對應的Block

因此在執行完delete方法後的一段時間內,數據塊才能被真正的刪除掉。

當該文件對應的全部block及其副本都被刪除後,NameNode中將以前標記爲已刪除的元數據刪除。

4.HDFS的啓動流程

在HDFS啓動時,NameNode先合併fsImage和edits文件,生成新的fsimage和空的edits文件,

這個過程是NameNode本身進行的,而後再將fsimage中的數據恢復到內存中,

但此時內存中的元數據並不夠,

還差block和datanode的映射關係,

這個信息在fsimage中是不存在的,須要臨時在內存中組織出來。

此時NameNode等待DataNode的鏈接,

DataNode在啓動時會向NameNode發送心跳報告,

其中攜帶本身具備的Block的編號信息,

NameNode基於這些信息,在內存中組織元數據信息。

直到NameNode達到最小啓動條件 —

每一個Block都至少有了一個副本被找到 —

後,進行必要的副本的複製和刪除,

以後開始對外提供服務。整個這個過程當中,

HDFS沒法正常工做,稱之爲處在安全模式中。

**安全模式

在啓動HDFS時,會當即進入安全模式,此時不能操做hdfs中的文件,只能查看目錄文件名等,讀寫操做都不能進行。

以及在HDFS正常運行過程當中,若是由於意外狀況,形成有block找不到任何副本,則HDFS進入安全模式。

org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name node is in safe mode

安全模式實際上是HDFS對元數據的一種保護機制,防止意外的操做損壞元數據。

當遇到安全模式,最簡單的辦法就是等一會。

若是很長時間都沒法退出安全模式,則應檢查進入安全模式的緣由,找到問題的緣由解決,則hadoop會自動退出安全模式。

若是非要強制退出安全模式,可使用以下命令,可是要慎用,一不當心損壞了元數據,hdsf中的數據就都沒法使用了:

hadoop dfsadmin -safemode leave

7、java接口方式操做HDFS

//導入jar

hadoop/share/hadoop/common/*.jar

hadoop/share/hadoop/common/lib/*.jar

hadoop/share/hadoop/hdfs/*.jar

//–下載

FileSystem fs = FileSystem.get(new URI(「hdfs://xxxx:9000」),new Configuration());

InputStream in = fs.open(new Path(「/xxx」));//HDFS路徑

OutputStream out = ..

IOUtils.copyBytes(in,out,buffersize,close);

//–上傳

InputStream in = ..

FileSystem fs = FileSystem.get(new URI(「hdfs://xxxx:9000」)new Configuration());

OutputStream out = fs.create(new Path(「…」));//hdfs路徑

IOUtils.copyBytes(in,out,buffersize,close);

#問題:Permission Denied — 權限錯誤

FileSystem fs = FileSystem.get(new URI(「hdfs://xxxx:9000″)new Configuration(),」root」);

//–刪除文件、文件夾(若是要刪除的文件夾中有內容,必須選擇遞歸刪除)

boolean fs.delete(new Path(「目標hdfs路徑」),是否遞歸刪除);

//–建立文件夾

boolean fs.mkdirs(new Path(「..」));

8、HDFS的優缺點

HDFS優勢

支持超大文件

支持超大文件。超大文件在這裏指的是幾百M,幾百GB,甚至幾TB大小的文件。通常來講hadoop的文件系統會存儲TB級別或者PB級別的數據。因此在企業的應用中,數據節點有可能有上千個。

檢測和快速應對硬件故障

在集羣的環境中,硬件故障是常見的問題。由於有上千臺服務器鏈接在一塊兒,這樣會致使高故障率。所以故障檢測和自動恢復是hdfs文件系統的一個設計目標。

流式數據訪問

Hdfs的數據處理規模比較大,應用一次須要訪問大量的數據,同時這些應用通常都是批量處理,而不是用戶交互式處理。應用程序能以流的形式訪問數據集。主要的是數據的吞吐量,而不是訪問速度。

簡化的一致性模型

大部分hdfs操做文件時,須要一次寫入,屢次讀取。在hdfs中,一個文件一旦通過建立、寫入、關閉後,通常就不須要修改了。這樣簡單的一致性模型,有利於提升吞吐量。

高容錯性

數據自動保存多個副本,副本丟失後自動恢復

可構建在廉價機器上

構建在廉價機器上能夠輕鬆的經過擴展機器數量來近乎線性的提升集羣存儲能力

HDFS缺點

低延遲數據訪問

低延遲數據。如和用戶進行交互的應用,須要數據在毫秒或秒的範圍內獲得響應。因爲hadoop針對高數據吞吐量作了優化,犧牲了獲取數據的延遲,因此對於低延遲來講,不適合用hadoop來作。

大量的小文件

Hdfs支持超大的文件,是經過數據分佈在數據節點,數據的元數據保存在名字節點上。名字節點的內存大小,決定了hdfs文件系統可保存的文件數量。雖然如今的系統內存都比較大,但大量的小文件仍是會影響名字節點的性能。

多用戶寫入文件、修改文件

Hdfs的文件只能有一次寫入,不支持修改和追加寫入(2.0版本支持追加),也不支持修改。只有這樣數據的吞吐量才能大。

不支持超強的事務

沒有像關係型數據庫那樣,對事務有強有力的支持。

name node 命名節點

data node 數據節點

文件系統就是爲了對文件進行增刪改查,所創建起來的系統.而且文件系統有相應的權限,路徑索引 文件大小記錄等相關信息.

Apache Pig

Pig是一個基於Hadoop的大規模數據分析平臺,它提供的SQL-LIKE語言叫Pig Latin,該語言的編譯器會把類SQL的數據分析請求轉換爲一系列通過優化處理的MapReduce運算。Pig爲複雜的海量數據並行計算提供了一個簡單的操做和編程接口

Apache Pig 是apache平臺下的一個免費開源項目,Pig爲大型數據集的處理提供了更高層次的抽象,不少時候數據的處理須要多個MapReduce過程才能實現,使得數據處理過程與該模式匹配可能很困難。有了Pig就可以使用更豐富的數據結構。 [2]

Pig LatinPig Latin 是一個相對簡單的語言,一條語句 就是一個操做,與數據庫的表相似,能夠在關係數據庫中找到它(其中,元組表明行,而且每一個元組都由字段組成)。

Pig 擁有大量的數據類型,不只支持包、元組和映射等高級概念,還支持簡單的數據類型,如 int、long、float、double、chararray 和 bytearray。而且,還有一套完整的比較運算符,包括使用正則表達式的豐富匹配模式

hive(數據倉庫工具)

hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,能夠將sql語句轉換爲MapReduce任務進行運行。 其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。

Hive是創建在 Hadoop 上的數據倉庫基礎構架。它提供了一系列的工具,能夠用來進行數據提取轉化加載(ETL),這是一種能夠存儲、查詢和分析存儲在 Hadoop 中的大規模數據的機制。Hive 定義了簡單的類 SQL 查詢語言,稱爲 HQL,它容許熟悉 SQL 的用戶查詢數據。同時,這個語言也容許熟悉 MapReduce 開發者的開發自定義的 mapper 和 reducer 來處理內建的 mapper 和 reducer 沒法完成的複雜的分析工做。

Hive 沒有專門的數據格式。 Hive 能夠很好的工做在 Thrift 之上,控制分隔符,也容許用戶指定數據格式。

R(統計應用軟件)

R是一種用於統計計算的編程語言,由奧克蘭大學的Ross Ihaka 和 Robert Gentleman發明。現在被普遍地使用於統計分析、數據挖掘等方向。

MapReduce

MapReduce是一種編程模型,用於大規模數據集(大於1TB)的並行運算。概念」Map(映射)」和」Reduce(歸約)」,是它們的主要思想,都是從函數式編程語言裏借來的,還有從矢量編程語言裏借來的特性。它極大地方便了編程人員在不會分佈式並行編程的狀況下,將本身的程序運行在分佈式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定併發的Reduce(歸約)函數,用來保證全部映射的鍵值對中的每個共享相同的鍵組。

相關文章
相關標籤/搜索