Hadoop SequenceFile

apache原文:http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html


概念:

SequenceFile是一個由二進制序列化過的key/value的字節流組成的文本存儲文件,它可以在map/reduce過程中的input/output 的format時被使用。

在map/reduce過程中,map處理文件的臨時輸出就是使用SequenceFile處理過的。 所以一般的SequenceFile均是在FileSystem中生成,供map調用的原始文件。






在存儲結構上,SequenceFile主要由一個Header后跟多條Record組成。


Header主要包含了Key classname,Value classname,存儲壓縮算法,用戶自定義元數據等信息,此外,還包含了一些同步標識,用于快速定位到記錄的邊界。


每條Record以鍵值對的方式進行存儲,用來表示它的字符數組可依次解析成:記錄的長度、Key的長度、Key值和Value值,并且Value值的結構取決于該記錄是否被壓縮。



數據壓縮有利于節省磁盤空間和加快網絡傳輸,SeqeunceFile支持兩種格式的數據壓縮,分別是:record compression和block compression。


record compression如上圖所示,是對每條記錄的value進行壓縮。


block compression是將一連串的record組織到一起,統一壓縮成一個block,如上圖。


block信息主要存儲了:塊所包含的記錄數、每條記錄Key長度的集合、每條記錄Key值的集合、每條記錄Value長度的集合和每條記錄Value值的集合
注:每個block的大小是可通過io.seqfile.compress.blocksize屬性來指定的。



讀寫實例代碼:

分舊API和新API


package filedemo;import java.net.URI;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.SequenceFile;
import org.apache.hadoop.io.SequenceFile.Reader;
import org.apache.hadoop.io.SequenceFile.Writer;
import org.apache.hadoop.io.Text;
import org.junit.Test;public class SequenceFileDemo2 {@Testpublic void writerOldApi() throws Exception {// String uri = "file:///D://B.txt"; //本地windowsString uri = "hdfs://hello110:9000/testdata/oldApi.seq";Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI(uri), conf, "hadoop");Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();Writer writer = null;try {// 方法一 writer = SequenceFile.createWriter(fs, conf, path,// key.getClass(), value.getClass());該方法已過時writer = new Writer(fs, conf, path, key.getClass(), value.getClass());for (int i = 0; i < 100; i++) {key.set(i);value.set("now the number is :" + i);System.out.printf("[%s]\t[%s]\t%s\t%s\n", "寫入",writer.getLength(), key, value);writer.append(key, value);}} finally {IOUtils.closeStream(writer);}}@Testpublic void readerOldApi() throws Exception {// String uri = "file:///D://B.txt"; //本地windowsString uri = "hdfs://hello110:9000/testdata/oldApi.seq";Configuration conf = new Configuration();FileSystem fs = FileSystem.get(new URI(uri), conf, "hadoop");Path path = new Path(uri);IntWritable key = new IntWritable();Text value=new Text();Reader reader =null;try {reader=new Reader(fs, path, conf);while(reader.next(key, value)){System.out.printf("[%s]\t%s\t%s\n", "讀取", "key", key);System.out.printf("[%s]\t%s\t%s\n", "讀取", "value", value);}} finally {IOUtils.closeStream(reader);}}@Testpublic void writerNewApi() throws Exception {/** windows環境使用hdfs://的時候,如果沒有使用FileSystem指定用戶,* 那么會以當前windows用戶去訪問,如果當前windows用戶名和Linux的不同,則會報錯:* Exception in thread "main" org.apache.hadoop.security.AccessControlException: Permission denied: user=xxxx* 故而本demo用了 file://* 解決方法:* 1、修改windows當前用戶名為相應的linux-hadoop的用戶。win10系統較難修改用戶名。* 2、在linux上增加當前windows用戶為hadoop的用戶*///String uri = "hdfs://hello110:9000/testdata/newApi.seq"; String uri = "file:///D://newApi.seq";Configuration conf = new Configuration();Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();Writer writer = null;try {writer = SequenceFile.createWriter(conf,Writer.file(path), Writer.keyClass(key.getClass()),Writer.valueClass(value.getClass()));for (int i = 0; i < 100; i++) {key.set(i);value.set("now the new number is :" + i);System.out.printf("[%s]\t%s\t%s\n", writer.getLength(), key, value);writer.append(key, value);}} finally {IOUtils.closeStream(writer);}}@Testpublic void readerNewApi() throws Exception {String uri = "file:///D://newApi.seq";Configuration conf = new Configuration();Path path = new Path(uri);IntWritable key = new IntWritable();Text value = new Text();Reader reader=null;try {reader=new Reader(conf, Reader.file(path));while(reader.next(key, value)){System.out.printf("[%s]\t%s\t%s\n", "讀取", "key", key);System.out.printf("[%s]\t%s\t%s\n", "讀取", "value", value);}} finally {IOUtils.closeStream(reader);}}}



本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539311.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539311.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539311.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習算法平臺alink_Alink漫談(十二) :在線學習算法FTRL 之 整體設計

Alink漫談(十二) &#xff1a;在線學習算法FTRL 之 整體設計[Toc]0x00 摘要Alink 是阿里巴巴基于實時計算引擎 Flink 研發的新一代機器學習算法平臺&#xff0c;是業界首個同時支持批式算法、流式算法的機器學習平臺。本文和下文將介紹在線學習算法FTRL在Alink中是如何實現的&a…

Linux Shell獲取系統資源使用百分比(CentOS)

CPU使用率&#xff1a; top -b -n 1 | head -n 4 | grep "^Cpu(s)" | awk {print $2} | cut -d u -f 1 內存使用率&#xff1a; free -m | grep ^- | awk {print $3/($3$4)*100"%"} IO使用率&#xff08;FS_PATH的值改成df -h出來的那些Filesystem名稱即可…

html城市繪制,HTML5/Canvas二分法構建城市版圖

JavaScript語言&#xff1a;JaveScriptBabelCoffeeScript確定var ctx fullscreenCanvas().ctx;var canvas ctx.canvas;function Rect(pos, width, height) {this.pos pos;this.width width;this.height height;}Rect.prototype.update Function.prototype;Rect.prototype…

探測器反向偏壓_近紅外和可見光雙模有機光電探測器

更多精彩&#xff0c;點擊上方藍字關注我們&#xff01;中英標題近紅外和可見光雙模有機光電探測器Near-infrared and Visible Light Dual-mode Organic Photodetectors圖文導讀研究報告了一種具有三層可見光吸收體/光學間隔層/近紅外(NIR)光吸收體結構的雙模有機光電探測器(OP…

html里post請求404,請求登陸頁面post請求404錯誤,OPTIONS請求通過

點擊登錄的時候option請求是通過的&#xff0c;但post請求失敗。服務端代碼app.js&#xff1a;const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 創建 express 應用c…

python貪吃蛇畢業設計_【干貨|python項目實例——貪吃蛇】- 環球網校

【摘要】當今世界充滿了各種數據&#xff0c;而python是其中一種的重要組成部分。然而&#xff0c;若想其有所應用&#xff0c;我們需要對這些python理論進行實踐。其中包含很多有趣的的過程&#xff0c;然后將其用于某些方面。其中一種應用就是python項目實例。今天環球網校的…

PWA即將推向所有Chrome平臺

\看新聞很累&#xff1f;看技術新聞更累&#xff1f;試試下載InfoQ手機客戶端&#xff0c;每天上下班路上聽新聞&#xff0c;有趣還有料&#xff01;\\\大多數人應該都聽說了微軟已經著手在Windows商店中增加PWA&#xff0c;這是一個重磅消息&#xff01;\\\\漸進增強式Web應用…

c++代碼轉為go_Go語言學習筆記六--string編碼

分解探索string編碼轉為byte數組func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 為什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 轉為16進制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

Linux機器件拷貝文件

常用命令有&#xff1a;sftp&#xff0c;scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戲時長計算機,我加入steam五年了,盤點下我買過的22款正版單機游戲

我加入steam五年了&#xff0c;盤點下我買過的22款正版單機游戲2020-02-17 10:50:07104點贊72收藏37評論大家好吖&#xff0c;在2015年的時候朋友就推薦了我入坑steam&#xff0c;不過那個時候更多的知道這是個dota啟動器&#xff0c;慢慢的steam也越來越出名啦&#xff0c;中國…

AdPlayBanner:功能豐富、一鍵式使用的圖片輪播插件

概述 AdPlayBanner&#xff1a;功能豐富、一鍵式使用的圖片輪播插件詳細 代碼下載&#xff1a;http://www.demodashi.com/demo/11312.html AdPlayBanner是一個Android平臺基于ViewPager實現的輪播圖插件&#xff0c;主要用以自動或者手動地播放輪播圖&#xff0c;提供了Fresco、…

pycharm運行模型時怎么設置權重?_使用AMP和Tensor Cores得到更快速,更節省內存的PyTorch模型...

點擊上方“AI派”&#xff0c;關注公眾號&#xff0c;選擇加“星標“或“置頂”導讀只需要添加幾行代碼&#xff0c;就可以得到更快速&#xff0c;更省顯存的PyTorch模型。你知道嗎&#xff0c;在1986年Geoffrey Hinton就在Nature論文中給出了反向傳播算法&#xff1f;此外&…

引入靜態變量_Common Lisp變量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常簡單&#xff1a;只是用一個名字空間&#xff0c;所有表達式中相應位置的值應該是明確的。Common Lisp和Scheme最大的不同是&#xff0c;函數名字空間和數據的名字空間是分離的。操作函數名字空間的語句包括&#xff0c;defun&#xff…

JobTracker和TaskTracker

轉載&#xff1a;http://blog.csdn.net/keda8997110/article/details/8348705 ----------------------------------------------------------------------------------------- JobTracker和TaskTracker JobTracker 對應于 NameNode TaskTracker 對應于 DataNode DataNode 和Na…

c理c利用計算機怎么彈,通過匯編一個簡單的C程序,分析匯編代碼理解計算機是如何工作的...

通過匯編一個簡單的C程序&#xff0c;分析匯編代碼理解計算機是如何工作的計算機的工作方式&#xff1a;現代計算機的基本體系結構都是采用馮諾依曼結構&#xff0c;馮諾依曼的設計思想最重要之處是"存儲程序"的這個概念。計算機的工作過程&#xff0c;就是執行程序的…

Linux安裝MySQL的兩種方法

原文鏈接&#xff1a;http://blog.csdn.net/superchanon/article/details/8546254 --------------------------------------------------------------------------------------- 1. 運行平臺&#xff1a;CentOS 6.3 x86_64&#xff0c;基本等同于RHEL 6.3 2. 安裝…

jenkins 手動執行_想知道如何用Jenkins自動執行Python腳本輸出測試報告?

前言在用python做自動化測試時&#xff0c;我們寫好代碼&#xff0c;然后需要執行才能得到測試報告&#xff0c;這時我們可以通過 Jenkins 來進一步完成自動化工作。借助Jenkins&#xff0c;我們可以結合 Git/SVN 自動拉取代碼&#xff0c;可以設置定時構建&#xff0c;接著就可…

VR 影院,約嗎?

世界第一家 VR 影院已經開張&#xff0c;朋友&#xff0c;去不&#xff1f; 世界第一家 VR 影院正式開張 &#xff08;無大屏的 VR 電影院&#xff09; 在被稱為 VR 元年的 2016 年&#xff0c;越來越多的人加入了這個新興的領域&#xff0c;各種傳統應用也在被 VR 包裝之后以…

redis cluster 分布式鎖_關于分布式鎖原理的一些學習與思考redis分布式鎖,zookeeper分布式鎖...

首先分布式鎖和我們平常講到的鎖原理基本一樣&#xff0c;目的就是確保&#xff0c;在多個線程并發時&#xff0c;只有一個線程在同一刻操作這個業務或者說方法、變量。在一個進程中&#xff0c;也就是一個jvm 或者說應用中&#xff0c;我們很容易去處理控制&#xff0c;在jdk …

會計行業被計算機取代馬云,會計人:為什么我神煩“人工智能取代說”?

原標題&#xff1a;會計人&#xff1a;為什么我神煩“人工智能取代說”&#xff1f;原創來源&#xff1a;學會計有方法從財會機器人誕生到馬云的無人商店&#xff0c;全行業掀起了一股“人工智能取代說”的熱潮。有些財會朋友在一輪又一輪的信息轟炸下&#xff0c;倍感壓力&…