MR系類:java
①hadoop生態node
>MapReduce:分佈式處理算法
>Hdfs:hadoop distribut file systemshell
>其餘相關框架數據庫
->unstructured data:收集日誌 flume,scribeapi
->structured data:sqoop hdfs與關係型數據庫相互轉換服務器
->OLTP:HBASE(低延時) online transection process 網絡
->monitor/manage:監控集羣狀態併發
->Hight level interfaces:JAQL HIVE框架
->support:
->workflow:
->more Hight level interfaces:封裝了算法的高級接口 數據挖掘算法BI
②hadoop:分佈式存儲和計算平臺
③hadoop核心系統:
>hdfs:
->主從分佈式:
namenode(主節點):管理從節點,提供API,管理文件與block,block與datanode之間的關係。(存儲單位爲block)
datanode(從節點):存儲數據,文件被分紅block存儲在磁盤,同時block是有副本的。
>mapReduce:
->主從分佈式:
jobTracker(主節點):提供api,分配任務給tasktracker,監控其執行狀況
taskTracker(從節點):執行分配的計算任務。
④hadoop分佈式特色:
>擴容能力:
>成本低:低廉主機,團體集羣。
>高效率:並行執行
>可靠性:自動維護數據副本
⑤hadoop集羣:
>僞分佈:
①安裝jdk,hadoop軟件
>真實分佈:
⑥HDFS學習筆記:
>概念:
->dfs:分佈式文件系統,適合於一次寫入屢次查詢的狀況,不支持併發寫,不適合小文件。
->namenode:維護和管理目錄系統,
->HDFS:
->namenode:元數據(目錄數據):
->fsimage:目錄數據
->edit:用戶操做的事務,當事務完成後,會將新的目錄數據加入fsimage.
->secondaryNode:合併fsimage與edit
->datanode:物理數據(原始數據):物理數據自己
->文件塊block:默認大小64M,當不足64M時,佔用實際的大小的物理空間。
->replication:副本,默認三個。優先放在本機的datanode中。
->關於HDFS的HA:
->在配置文件中設置多個namenode的copy
->secondaryNode:將edit合併到fsimage。
>shell接口:
->hadoop fs 命令 -ls,-lsr,-put,-get,-text等
->hadoop fs ls = hadoop fs -ls hdfs://hadoop:9000/
>java接口:
->IOUtil鏈接普通文件系統和HDFS
->FileSystem:hds中定義的文件系統對象
>RPC遠程過程調用:Remote process call 不一樣進程間的方法調用
->客戶端調用服務器端實現VersionedProtocol協議的接口中的方法。
->hadoop中存在的5的服務進程,就是RPC的服務器端
The NameNode controls two critical tables:
1) filename->blocksequence (namespace) 外存中,靜態的,存放在fsimage
2) block->machinelist ("inodes") 內存中,namenode啓動的時候重建。
hdfs的惟一一個核心類:FileSystem
⑦MapReduce:
八個步驟:
1>Map
1.1>解析hdfs中的文件,每行數據造成<k1,v1> :k1爲每行開始位置,v1爲每行的內容
1.2>覆蓋map(),接受1.1產生的<k1,v1>進行處理,轉換成新的<k2,v2> :如對每行的數據即v1進行拆分,就能夠獲得多個v2
1.3>對1.2中輸出的數據<k2,v2>進行分區,默認爲1個:
1.4>對1.3中輸出的數據<k3,v3>進行排序(按照k3),分組(相同key的不一樣value放在一個集合中),輸出<k4,{v4}>
1.5>對1.4中輸出的數據進行規約。
2>Reduce
2.1>多個map任務的輸出,按照不一樣的分區,經過網絡 copy到不一樣的reduce節點中:
2.2>對2.1中得到的數據,進行合併排序,覆蓋reduce函數,接受集合數據,統計k4對應集合中全部值的和,輸出<k5,v5>:
2.3>對2.2中產生的<k5,v5>的輸出,寫回hdfs中。
Hadoop數據類型:
Hadoop key/value數據必須實現的接口:
①writeable接口:
public interface Writable {
* Serialize the fields of this object to <code>out</code>.
void write(DataOutput out) throws IOException;
* Deserialize the fields of this object from <code>in</code>.
void readFields(DataInput in) throws IOException;
}
Hadoop key數據必須實現的接口:
②Comparable接口:
③WritableComparable接口:
comparaTo()方法
1>序列化和反序列化必須實現一下幾個方法:
①equals()
②hashcode()
③tostring()
④必須有無參構造方法,爲了方便反射建立對象。
2>序列化:將結構化對象轉化爲字節流,以便在網絡傳輸或者保存在磁盤進行永久存儲。
·反序列化:將序列化字節流,反序列化爲結構化對象。
爲了實現對序列化字節對象的直接比較,
①comparator接口: