Hadoop實戰-中高階部分 之 Hadoop IO
壓縮格式 | 工具 | 演算法 | 副檔名 | 多檔案 | 可分割性 |
DEFLATE | 無 | DEFLATE | .deflate | 不 | 不 |
gzip | gzip | DEFLATE | .gz | 不 | 不 |
bzip2 | bzip2 | bzip2 | .bz2 | 不 | 是 |
LZO | lzop | LZO | .lzo | 不 | 不 |
壓縮格式 |
Java 實現 | 本地實現 |
DEFLATE | 是 | 是 |
Gzip | 是 | 是 |
Bzip2 | 是 | 否 |
LZO | 否 | 是 |
第三部分:序列化 什麼是Hadoop的序列化 •序列化(serialization) 序列化指的是將結構化物件轉為位元組流以便於通過網路進行傳輸或寫入持久儲存的過程。反序列化指的是將位元組流轉為一系列結構化物件的過程。 序列化用於:程序間通訊與持久儲存。 RPC序列化建議的特性 1.緊湊(Compact)即方便網路傳輸,充分利用儲存空間 2.快速(Fast)即序列化及反序列化效能要好 3.擴充套件性(Extensible)即協議有變化,可以支援新的需求 4.互操作性(Interoperable)即客戶端及伺服器端不依賴語言的實現 Hadoop使用Writables,滿足緊湊、快速,不滿足擴充套件能及互操作性 •Hadoop的序列化不是java的序列化,Hadoop自己實現了自己的序列化機制。格式Writables。 •Hadoop中定義了兩個序列化相關的介面:Writable介面和Comparable介面,這兩個介面可以合成一個介面WritableComparable. Writable介面 Writable 介面 Writable 介面定義了兩個方法: (1)一個用於將其狀態寫入二進位制格式的 DataOutput 流; (2)另一個用於從二進位制格式的 DataInput 流讀取其狀態;
我們可以使用 set() 函式來建立和設定 Writable 的值: IntWritable wirtable = new IntWritable(); writable.set(163); 同樣我們也可以使用建構函式: IntWritable writable = new IntWritable(163); package org.apache.hadoop.io; import java.io.DataOutput; import java.io.DataInput; import java.io.IOException; public interface Writable { void write(DataOutput out) throws IOException; void readFields(DataInput in) throws IOException;} Writable 介面 Writable 介面定義了兩個方法: (1)一個用於將其狀態寫入二進位制格式的 DataOutput 流; (2)另一個用於從二進位制格式的 DataInput 流讀取其狀態;
我們可以使用 set() 函式來建立和設定 Writable 的值: IntWritable wirtable = new IntWritable(); writable.set(163); 同樣我們也可以使用建構函式: IntWritable writable = new IntWritable(163); WritableComparable 與 comparator IntWritable 實現了 WritableComparable 介面 ,後者是 Writable 與java.lang.Comprable 介面的子介面 package org.apache.hadoop.io; public interface WritableComparable<T> extends Writable,Comparable<T> {} Hadoop 優化比對,不需要反序列化即可比較。 package org.apache.hadoop.io; import java.util.Comparator; public interface RawComparator<T> extends Comparator<T> { public int compare( byte [] b1, int s1, int l1, byte [] b2, int s2, int l2); } WritableComparator 是一個 RawComparator 通用的實現 ,為WritableComparable classes. 它做了兩件事 1.實現了 compare() 方法(返序列化) 2.它充當的是 RawComparator 的工廠類 Hadoop自帶的序列化介面(Writable類) Hadoop 自帶的序列化介面 實現了 WritableComparable 介面的類: 基礎: BooleanWritable | ByteWritable 數字: IntWritable | VIntWritable | FloatWritable | LongWritable |VLongWritable | DoubleWritable 高階: NullWritable | Text | BytesWritable | MDSHash | ObjectWritable |GenericWritable 僅實現了 Writable 介面的類: 陣列: ArrayWritable | TwoDArrayWritable 對映: AbstractMapWritable | MapWritable | SortedMapWritable •Text Text是UTF-8的Writable。可以將它理解為一種與java.lang.String 相類似的Writable。Text類代替了UTF-8類。 Text是可變的,其值可以通過呼叫set()方法來改變。最大儲存是2GB。 •NullWritable NullWritable是一種特殊的Writable型別,因為它的序列化的長度是零。可以做佔位符。 •BytesWritable
BytesWritable 是一個二進位制的資料陣列封裝。它的序列化格式是一個int欄位. BytesWritable是可變的,其值可以通過呼叫set()方法來改變。 •ObjectWriable ObjectWriable 適用於欄位可以使用多種型別時。 •Writable集合 一共 四種: ArrayWritable和TwoDArrayWritable是針對陣列與二維陣列 MapWritable和SortededMapWritable 針對是Map與SortMap 自定義Writable •實現WritableComparable •實現 /** * 將物件轉換為位元組流並寫入到輸出流out中 */ write() /** * 從輸入流in 中讀取位元組流並反序列化為物件 */ readFields(), /** * 將this對像與物件O比較*/ compareTo()方法。 第四部分:基於檔案的資料結構 SequenceFile類 SequeceFile是Hadoop API提供的一種二進位制檔案支援。這種二進位制檔案直接將<key, value>對序列化到檔案中。 Key是任意的Writable,Value是任意的Writable 這種檔案格式 有以下好處: A.支援壓縮,且可定製為基於Record或Block壓縮(Block級壓縮效能較優) B.本地化任務支援:因為檔案可以被切分,因此MapReduce任務時資料的本地化情況應該是非常好的。 C.難度低:因為是Hadoop框架提供的API,業務邏輯側的修改比較簡單。 寫SequenceFile 步驟: 1. 設定 Configuration 2. 獲取 File System 3. 設定檔案輸出路徑 4. SequenceFile.createWriter 建立 SequenceFile.Writer 然後寫入 5. 呼叫 SequenceFile.Writer .append 追加寫入 6. 關閉流 讀SequenceFile 步驟: 1. 設定 Configuration 2. 獲取 File System 3. 設定檔案輸出路徑 4. SequenceFile.Reader 建立讀取類 SequenceFile.Reader 5. 拿到 Key 與 Value 的 class 6. 讀取 在SequenceFile使用壓縮 寫:壓縮分為Record和Block兩種。 讀時自動解壓。 步驟: 增加如下程式碼 SequenceFile.createWriter(fs, conf, path, key.getClass(), value.getClass(), SequenceFile.CompressionType.RECORD, new Bzip2Codec()) MapFile MapFile 是經過排序的帶索引的 SequenceFile ,可以根據鍵值進行查詢 . 由兩部分組成,分別是 data 和 index 。 index 作為檔案的資料索引,主要記錄了每個 Record 的 key 值,以及該 Record 在檔案中的偏移位置。在 MapFile 被訪問的時候 , 索引 檔案會被載入到記憶體,通過索引對映關係可迅速定位到指定Record 所在檔案位置, 因此,相對 SequenceFile 而言, MapFile 的檢索效率是高效的,缺點是會消耗一部分 記憶體來儲存 index 資料 . 讀MapFile 步驟: 1. 設定 Configuration 2. 獲取 File System 3. 設定檔案輸出路徑 4. MapFile Reader 建立讀取類 . MapFile Reader 5. 拿到 Key 與 Value 的 class 6. 讀取 寫MapFile 步驟: 1. 設定 Configuration 2. 獲取 File System 3. 設定檔案輸出路徑 4. MapFile .createWriter 建立 MapFile .createWriter 然後寫入 5. 呼叫 MapFile .Writer .append 追加寫入 6. 關閉流 轉載請註明出處【 http://sishuok.com/forum/blogPost/list/5963.html】
相關推薦
Hadoop實戰-中高階部分 之 Hadoop IO
HDFS以透明方式校驗所有寫入它的資料,並在預設設定下,會在讀取資料時驗證校驗和。針對資料的每個io.bytes.per.checksum(預設512位元組)位元組,都會建立一個單獨的校驗和。 資料節點負責在儲存資料及其校驗和之前驗證它們收到的資料。 從客戶端和
Hadoop實戰-中高階部分 之 Hadoop HA
•hadoop.security.authorization •預設值 false • 是不是要開啟 賬號驗證機制,開啟之後 Hadoop 在執行任何動作之前都會先確認是否有許可權。詳細的許可權設定會放在 hadoop-policy.xml 裡。例如要讓 fenriswolf 這個 account 及
Hadoop實戰-初級部分 之 Hadoop IO
HDFS以透明方式校驗所有寫入它的資料,並在預設設定下,會在讀取資料時驗證校驗和。針對資料的每個io.bytes.per.checksum(預設512位元組)位元組,都會建立一個單獨的校驗和。 資料節點負責在儲存資料及其校驗和之前驗證它們收到的資料。 從客戶端和
Hadoop實戰-初級部分 之 Hadoop MapReduce JAVA API
•MapReduce程式可以以以下三種模式執行 – –Local(Standalone) Mode:只有一個 Java 虛擬機器在跑,完全沒有分散式的成分。且不使用HDFS檔案系統,而是使用本機的Linux檔案系統。 –Pseudo-distributed Mode:在同一臺機器上啟動獨立數個 JVM 程序
Hadoop實戰-初級部分 之 MapReduce
Hadoop Map/Reduce是一個使用簡易的軟體框架,基於它寫出來的應用程式能夠執行在由上千個商用機器組成的大型叢集上,並以一種可靠容錯的方式並行處理上T級別的資料集。 MapReduce基礎出發點是很易懂。它由稱為map和reduce的兩部分使
Hadoop實戰-中高階部分 PPT 和 原始碼 下載
內容概述:Hadoop中高階精品課程,深入學習HDFS的原理;MapReduce的原理;MapReduce高階程式設計;Hadoop的IO機制, 如序列化、壓縮;Hadoop的RPC;RESTFul API;叢集等高階特性。 本課程包括很多原始碼級深入剖析的內容,還有很
安裝Hadoop——Hadoop實戰初級部分學習筆記
3、安裝Hadoop 1、window上裝 (建議xp 玩玩就行了,實際要在linux) 1.1、裝JDK(不要裝到帶空格等目錄中。。) 1.2、安裝cygwin 需要安裝oenSSL、VIM、Base 1.3、在cygwin安裝SSHD ssh-h
hadoop家族學習路線圖之hadoop產品介紹
工作效率 快速 性能 pan 數據處理 sha lin pig win 大數據這個詞也許幾年前你聽著還會覺得陌生,但我相信你現在聽到hadoop這個詞的時候你應該都會覺得“熟悉”!越來越發現身邊從事hadoop開發或者是正在學習hadoop的人變多了。作為一個hadoop入
Hadoop概念學習系列之Hadoop、Spark學習路線(很值得推薦)
不多說,直接上乾貨! 說在前面的話 此筆,對於僅對於Hadoop和Spark初中學者。高手請忽略! 1 Java基礎: 視訊方面: 推薦《畢向東JAVA基礎視訊教程》。學習hadoop不需要過度的深入,java學習到
hadoop家族學習路線圖之hadoop產品詳解
大資料這個詞也許幾年前你聽著還會覺得陌生,但我相信你現在聽到hadoop這個詞的時候你應該都會覺得“熟悉”!越來越發現身邊從事hadoop開發或者是正在學習hadoop的人變多了。作為一個hadoop入門級的新手,你會覺得哪些地方很難呢?執行環境的搭建恐怕就已經足夠讓新手頭疼
Hadoop概念學習系列之Hadoop、Spark學習路線(很值得推薦)(十八)
不多說,直接上乾貨! 說在前面的話 此筆,對於僅對於Hadoop和Spark初中學者。高手請忽略! 1 Java基礎: 視訊方面: 推薦《畢向東JAVA基礎視訊教程》。學習hadoop不需要過度的深入,java學習到javase,在Java虛
Hadoop實戰-MapReduce之max、min、avg統計(六)
next combine output fileinput private pub eof pri use 1、數據準備: Mike,35 Steven,40 Ken,28 Cindy,32 2、預期結果 Max 40 Min 28 Avg 33 3、M
Hadoop實戰-Flume之自定義Sink(十九)
current ioe back urn oop print out java try import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream;
Hadoop實戰-Flume之Hdfs Sink(十)
pac esc path ref times buffers ogg events nts a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.sources
Hadoop實戰-Flume之Source regex_extractor(十二)
local netcat nts configure style cto and event time a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe/configure the source a1.s
大資料之Hadoop學習——動手實戰學習MapReduce程式設計例項
文章目錄 一、MapReduce程式設計例項 1.自定義物件序列化 需求分析 報錯:Exception in thread "main" java.lang.IllegalArgumentExcept
大資料之hadoop 環境搭建從零開始——實戰訓練
這裡的前提是要先安裝一個乾淨的CentOS系統,我這裡用的是CentOS6.6,安裝教程參考另一篇部落格:https://blog.csdn.net/gaofengyan/article/details/85054337 目錄 ha
Hadoop源碼學習之HDFS(一)
-a node bsp ima 數據 layout 版本號 name 技術 Hadoop的HDFS可以分為NameNode與DataNode,NameNode存儲所有DataNode中數據的元數據信息。而DataNode負責存儲真正的數據(數據塊)信息以及數據塊的ID。
hadoop入門學習系列之六hadoop學習之sqoop安裝
1.7 sqoop安裝 opc 2.6 clas jdb -m -- error 1.下載安裝包及解壓 tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 2.配置環境變量和配置文件 cd 到 sqoop
大數據系列之Hadoop框架
apr png 關系型 big sqoop ted 服務器 定制 操作 Hadoop框架中,有很多優秀的工具,幫助我們解決工作中的問題。 Hadoop的位置 從上圖可以看出,越往右,實時性越高,越往上,涉及到算法等越多。 越往上,越往右就越火…… Hadoop框架中一