青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 15, comments - 10, trackbacks - 0, articles - 0

2015年4月27日

附上URL:http://book.douban.com/subject/10786473/

1,鍛煉意志力的方法
A,每天冥想5分鐘
B,鍛煉
對于鍛煉有兩個常見問題,第一個是“需要鍛煉多久”,第二個是“什么鍛煉最有效”,這兩個問題的答案是“你想鍛煉多久”,“你真的會去做什么樣的鍛煉”
C,睡眠
睡足覺能顯著提高自控力,因為睡眠不足會導(dǎo)致大腦缺乏足夠的能量進行自控。
如何改掉晚睡的壞習(xí)慣?
真正的問題并不是強迫自己去睡覺,而是強迫自己在一定時間之后就遠離那些讓自己無法睡覺的事情。
2,意志力的規(guī)律
A,每天的意志力變化規(guī)律:早上的意志力最強,隨著時間的推移而逐漸減弱。
方案:需要將最重要的事情放在早上處理
B,很多想不到的事情都是在消耗你的意志力:很多你認為不需要意志力的事情其實都在消耗你的意志,比如試圖融入一家價值觀和你不符合的公司,在糟糕的路況中上班,干坐著熬過無聊的會議等等。
方案:盡量避免這些事情的發(fā)生
C,壓力和情緒低落會導(dǎo)致意志力渙散:由于大腦的調(diào)節(jié)功能,如果一個人感覺到壓力和情緒低落,大腦會指引著你去做它認為能給你帶來快樂的事情,這樣會造成一個矛盾:有很多工作要完成的人,往往會選擇去玩游戲來排解壓力;需要控制支出的人會去大肆購物來排解壓力,這樣就造成了一個惡性循環(huán)。
方案:
嘗試有效的解壓方法:鍛煉,閱讀,聽音樂,和家人相處,按摩,散步,冥想,培養(yǎng)有創(chuàng)意的愛好;
放棄無效的解壓方法:賭博,購物,抽煙,喝酒,暴飲暴食,玩游戲,上網(wǎng),花兩個小時以上看電影或者電視。
有效和無效的區(qū)別是?真正能緩解壓力的不是釋放多巴胺,而是增加大腦中改善情緒的化學(xué)物質(zhì),比如血清素/Y-氨基丁酸/催產(chǎn)素等等,這樣才是治本的。
D,不能自我諒解導(dǎo)致的自控力惡性循環(huán):一次自控失敗往往會導(dǎo)致整個自控計劃的失敗,是第一次放棄后產(chǎn)生的羞恥感,罪惡感,失控感和絕望感,會讓人破罐子破摔。
方案:尋求自我諒解,只要是凡人都會有失去自控力的時候,挫折本身并不可怕,可怕的是自暴自棄。
3,意志力的誤區(qū)
A,不要把支持目標實現(xiàn)的行為誤認為是目標本身:比如在健身之后,有時會獎賞自己一瓶碳酸飲料,或者去吃燒烤,其實最終攝入的能量還要大于健身消耗的能量。
方案:要弄清楚自己的目標,不要將目標和過程弄混了。
B,誤將渴望當(dāng)做幸福:由于多巴胺分泌的因素,我們往往將某些快感當(dāng)做了真正的幸福,比如吃垃圾食品,無節(jié)制的游戲等等。
方案:我們需要區(qū)分讓我們的生活真正有意義的真實獎勵(有長久意義的,對生活有益的),和讓我們分散精力,上癮的虛假獎勵(短暫無用的,僅僅是刺激多巴胺分泌的)。
C,經(jīng)常制定自控力計劃而不施行:很多人會重復(fù)的制定計劃,而不去執(zhí)行計劃,因為制定一個計劃很容易,而且會讓我們心情大好,但是如果真的付諸實踐,帶給我們的快感遠遠小于制定計劃的快感。
方案:需要避免一個意志力陷阱:即用“改變的承諾”而不是“改變”來改善我們的心情
D,人類往往放棄未來更大的回報,而選擇即刻的滿足感:即刻獎勵會激活更原始的獎勵系統(tǒng),即刺激多巴胺的分泌,而未來獎勵是刺激人類最近才進化出來的前額皮質(zhì)系統(tǒng)。人類在面臨當(dāng)前獎勵和未來獎勵的時候,兩個獎勵系統(tǒng)會進行斗爭。
方案:等待10分鐘,因為這10分鐘會降低即刻滿足的快感,讓大腦更理智的思考。如果10分鐘之后依然想要,則可以選擇即刻滿足。

posted @ 2015-04-27 15:34 whspecial 閱讀(18045) | 評論 (1)編輯 收藏

2014年3月11日

轉(zhuǎn)載自:http://www.blogjava.net/itspy/archive/2008/04/22/194686.html#Post

log4j本來設(shè)置了要打印行號與文件名的,結(jié)果有的能打印出來,有的卻是亂碼,查了些文檔之后才發(fā)現(xiàn),原來打印問題是因為編繹時沒有編繹進去調(diào)試信息,所以沒辦法打印.
但是我用的是Ant,如果在Ant編繹時,編繹進去調(diào)試信息呢,參考下面配置.
<javac srcdir="src" destdir="bin" debug="true"  classpathref="accrual.path" >

參考文檔
http://ant.apache.org/manual/CoreTasks/javac.html
Log4j配置
log4j.appender.C1.layout.ConversionPattern=%F(%L)-- %-4r %-5p [%t] %37c %3x - %m%n

posted @ 2014-03-11 15:57 whspecial 閱讀(588) | 評論 (0)編輯 收藏

2014年1月3日

     摘要: 將排序二叉樹轉(zhuǎn)化成雙向鏈表,應(yīng)該是一道很常見的面試題目,網(wǎng)上的實現(xiàn)比較多,有用遞歸也有用中序遍歷法的。看到一位外國友人的實現(xiàn),還是比較清晰的,思路如下: 1,如果左子樹不為null,處理左子樹    1.a)遞歸轉(zhuǎn)化左子樹為雙向鏈表;    1.b)找出根結(jié)點的前驅(qū)節(jié)點(是左子樹的最右的節(jié)點)    1.c)將上一步找出的節(jié)點和根...  閱讀全文

posted @ 2014-01-03 00:41 whspecial 閱讀(3642) | 評論 (0)編輯 收藏

2013年10月31日

   這一段在看《unix網(wǎng)絡(luò)編程》,回顧之前做項目用到的一些東西,在這里總結(jié)一下:

   (1)TCP套接口編程
   這里介紹各個接口函數(shù):
   1 文件描述符
   -socket(int domain, int type, int protocol); //生成文件描述符
   -bind(int sockfd, struct sockaddr *my_addr, int addrlen); //將本地的一個端口綁定到fd上,一般只需要在server端
   2 服務(wù)端
   -listen(int sockfd, int backlog); //有兩個作用:1,將主動套接口變?yōu)楸粍犹捉涌?2,設(shè)置最大連接數(shù)backlog
   -accept(int sockfd, void *addr, int *addrlen); //為建立好的連接生成一個新的fd
   3 客戶端
   -connect(int sockfd, struct sockaddr *serv_addr, int addrlen); //進行socket連接
   4 通信
   -send(int sockfd, const void *msg, int len, unsigned int flags); //發(fā)送請求
   -recv(int sockfd, void *buf, int len, unsigned int flags); //接收請求



   (2)I/O多路復(fù)用
   I/O多路復(fù)用是指內(nèi)核一旦發(fā)現(xiàn)進程指定的一個或者多個IO條件準備讀取,它就通知該進程。按照《UNIX網(wǎng)絡(luò)編程》的說法,I/O多路復(fù)用用于以下三種情況:
   a)一個TCP服務(wù)器既要處理監(jiān)聽套接口,又要處理已連接套接口;
   b)一個服務(wù)器既要處理TCP,又要處理UDP;
   c)當(dāng)客戶端處理多個描述字(比如處理交互式輸入和網(wǎng)絡(luò)套接口)
   目前被廣泛使用的是select和epoll:
   2.1,select
   int select(int maxfdp1,fd_set *readset,fd_set *writeset,fd_set *exceptset,const struct timeval *timeout)
   第一個參數(shù)指定最大的fd數(shù)目,中間三個分別是被監(jiān)控的讀、寫、異常的fd集,最后一個是超時時間。select函數(shù)會阻塞等待,直到監(jiān)控的fd集中有fd就緒,或者已經(jīng)超時。
   2.2,epoll
   epoll相比于select,主要的好處在于它不像select一樣去輪詢fd集,而是由內(nèi)核去觸發(fā);另外它支持更大的fd個數(shù)

   (3)網(wǎng)絡(luò)服務(wù)器模型
   其實網(wǎng)絡(luò)服務(wù)器模型還是比較復(fù)雜的,有一篇比較經(jīng)典的文章叫做c10K problem,鏈接如下:http://www.kegel.com/c10k.html
   這里記錄的是很簡單的幾種多線程TCP服務(wù)器模型,順便可以比較下:
   2.1 主線程accept,為每個client創(chuàng)建一個線程
   2.2 使用線程池,全部accept,當(dāng)有連接來的時候其中某個線程進行處理
   2.3 使用線程池,主線程accept,當(dāng)有連接來的時候主線程將其放入隊列,由工作線程進行處理(生產(chǎn)者-消費者模型)
   1方案過于頻繁地進行線程創(chuàng)建銷毀,2方案在一個連接過來時會帶來驚群現(xiàn)象,3方案會比前兩個方案要好一些。

posted @ 2013-10-31 00:32 whspecial 閱讀(2759) | 評論 (1)編輯 收藏

2013年10月27日

這是來自于阿里技術(shù)嘉年華的一個分享,因為在百度也考慮過類似的事情,所以聽得比較有感悟,這里把相關(guān)內(nèi)容整理一下。

首先尊重版權(quán),還是把原鏈接和作者貼上:

http://adc.alibabatech.org/carnival/history/schedule/2013/detail/main/286?video=0

來自于阿里吳威工程師的分享

 

首先需要說明一點,跨機房hadoop可能應(yīng)用場景并不是很多,國內(nèi)像BAT這種巨頭也許需要,但是大部分的中小公司也許并不需要這個,也許這是個屠龍之技,呵呵。

把這個問題分三段來講,第一段是問題出現(xiàn)的背景,第二段是解決該問題的難點,第三段是最終的解決方案。

(一) 背景:

先要看下為什么需要做一個跨機房的大集群?

大集群的優(yōu)點在于數(shù)據(jù)管理和授權(quán)容易(這個問題在一個多部門的大公司還是很重要的);跨部門的使用數(shù)據(jù)容易,無需重復(fù)拉取數(shù)據(jù)。

在集群達到一定規(guī)模時,單機房(機房內(nèi)的容量是有限的)已經(jīng)無法滿足集群的需求了,要想一勞永逸的解決問題,需要建設(shè)一個跨機房的hadoop集群。

(二)技術(shù)挑戰(zhàn):

2.1 NameNode的性能問題:

         在管理一個巨大的hadoop集群時,由于原始的Namenode是單節(jié)點,因此會成為一個性能瓶頸,遇到的性能問題主要包括兩方面:存儲容量問題(存儲元數(shù)據(jù))和計算壓力(處理rpc請求,修改內(nèi)存樹時候需要全局鎖)問題。

         其中存儲容量問題可以依賴內(nèi)存的垂直擴展來解決,但是計算壓力卻很難通過提升硬件來解決(因為目前廠商的主要發(fā)展方向是多核,而非提高主頻)

2.2機房之間的網(wǎng)絡(luò)限制:

         機房之間的網(wǎng)絡(luò)永遠是個硬件條件的限制,跨機房的網(wǎng)絡(luò)傳輸帶來了數(shù)據(jù)延時和帶寬限制:

1, 延時一般是在10ms之內(nèi),而hadoop上大部分運行的是離線作業(yè),基本可接受

2, 帶寬限制的問題比較大,因為單機房內(nèi)的點對點帶寬一般是在1Gbps,而機房之間的帶寬確在20Mbps左右,非常有限。

2.3資源組之間的管理

         每個部門可以看做一個資源組,它們可能會互相使用對方的數(shù)據(jù),因此如何規(guī)劃計算和存儲的位置就很重要,否則會在多個機房之間出現(xiàn)大量的數(shù)據(jù)拷貝。

(三)解決方案:

先看下整個跨集群hadoop的架構(gòu)圖:


 

重點介紹里面三點,也就是和上面三個問題相對應(yīng)的:

1, 可以看到這里畫出了兩個NNnamenode),它們實際上還是屬于一個hadoop集群,這是業(yè)界里的一個解決方案:HDFS Fedaration,它為了解決元數(shù)據(jù)節(jié)點性能問題;

2, 可以看到這里有一個cross node節(jié)點,它是用來在兩個機房之間同步數(shù)據(jù)的,它的設(shè)計考慮到了機房間的網(wǎng)絡(luò)限制;

3, 最后是groupA、groupB,這是為了解決數(shù)據(jù)產(chǎn)出方和使用方關(guān)系來用的。

3.1 Federation

Federation相關(guān)資料見:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/Federation.html#HDFS_Federation


為了水平擴展Namenodefederation使用了多個互相獨立的namenode。它們之間互相不需要通信,每個datenode需要向全部namenode注冊并發(fā)送信息。

BlockPool是屬于一個namenodeblock集合,每個blockpool之間也是互相獨立的。

         federation里,有一個需要關(guān)注的問題,就是多個namenode的地址如何對用戶進行透明?它采用的解決方案是目錄樹掛載的方案(社區(qū)有個viewFS,應(yīng)該就是為了解決這個問題):熟悉linux或者nfs的朋友應(yīng)該都知道mount這個概念,目錄樹掛載就是這個意思。

不過使用目錄樹掛載也存在著一個問題,就是各個子目錄下的存儲資源需要人為的介入管理,不能出現(xiàn)嚴重的不均。

3.2 crossNode

         機房間的網(wǎng)絡(luò)限制要求不能出現(xiàn)大規(guī)模、長時間的數(shù)據(jù)拷貝,需要一個專門管理機房間數(shù)據(jù)拷貝的進程,叫做crossNode。它是獨立部署的一個節(jié)點,和元數(shù)據(jù)節(jié)點是分離的。

         它能提供的功能概括來說主要包括以下三點:

a) 根據(jù)預(yù)置的跨機房文件,進行數(shù)據(jù)拷貝

b) 處理實時的數(shù)據(jù)拷貝請求

c) 進行跨機房的數(shù)據(jù)流量控制

如何得知跨機房文件列表?

         由于離線任務(wù)基本都是定時觸發(fā)的,可以根據(jù)對歷史作業(yè)的分析來形成一個跨機房文件列表

3.3   資源組之間的管理

各個資源組之間存在數(shù)據(jù)的依賴,我們希望通過資源組管理,能實現(xiàn)大部分任務(wù)在本機房內(nèi)產(chǎn)出數(shù)據(jù),只有少量跨機房產(chǎn)出數(shù)據(jù);大部分任務(wù)讀取本機房的數(shù)據(jù)副本,只有少量跨機房讀取數(shù)據(jù)。

為了標識資源組之間的數(shù)據(jù)依賴性,定義一個資源組之間的距離概念:一個資源組訪問另一個資源組的數(shù)據(jù)量越多,則兩者的距離越近,應(yīng)該將距離接近的資源組放在同一個機房內(nèi)。

為了讓計算和產(chǎn)出盡可能地靠近,使用一個MRProxy,對于不同類型的任務(wù)做不同處理:

a)            離線計算:跨機房列表中的數(shù)據(jù)正在傳輸中(DC1->DC2),DC2上的 Job 被暫停調(diào)度,等待傳輸完畢

b)            Ad-hoc查詢:DC2上的 Job 需要讀DC1上的數(shù)據(jù),Job暫停調(diào)度,通知 CrossNode,數(shù)據(jù)傳輸完畢后繼續(xù)調(diào)度

c)             特殊情況:跨機房數(shù)據(jù) Join,DC1大表,DC2小表,Job 調(diào)度到DC1上,跨機房直接讀取DC2數(shù)據(jù),無需等待

 

由于是根據(jù)視頻和ppt整理,并沒有代碼或者文檔,所以可能有些地方的理解有偏差,歡迎來提意見~

posted @ 2013-10-27 23:28 whspecial 閱讀(5298) | 評論 (0)編輯 收藏

2013年10月24日

KFS的元數(shù)據(jù)持久化是依賴checkpoint和operation log結(jié)合來工作的,其中checkpoint顧名思義保存的是某個點內(nèi)存的狀態(tài),operation log記錄的是對元數(shù)據(jù)修改的操作日志。

使用checkpoint+log的設(shè)計
(1)    元數(shù)據(jù)信息必須要持久化,否則掉電或者人工重啟之后該信息丟失
(2)    便于快速重啟,可以從最近的一個cp中快速構(gòu)建內(nèi)存狀態(tài),加上該cp之后的log就可以完整地構(gòu)建內(nèi)存

讀寫checkpointlog的過程

Metaserver啟動時的內(nèi)存構(gòu)建:

Startup.cc調(diào)用rebuild函數(shù)

(1)       如果之前已經(jīng)有了checkpoint,從checkpoint里重建內(nèi)存樹,否則新建一棵內(nèi)存樹

(2)       在內(nèi)存中replaycheckpoint之后的所有operation log

MetaServer運行時寫入新的checkpoint

logcompactor_main.ccmain函數(shù)調(diào)用,應(yīng)該是以調(diào)用另一個進程的方式來執(zhí)行,猜想是Metaserver進程會定時調(diào)用該進程

(1)       根據(jù)舊的checkpoint在內(nèi)存中生成狀態(tài)

(2)       在內(nèi)存中replay之后的op log

(3)       將此時的內(nèi)存狀態(tài)寫入新的checkpoint

MetaServer運行時寫入新的log

logger.cc來寫入新log,看了代碼應(yīng)該是每次修改了元信息的操作,都會將這條op log寫入磁盤,雖然性能不高,但是比較可靠(之前也自己寫過日志庫,使用的是兩個buffer交換寫入,這樣比較高效一些)

posted @ 2013-10-24 01:03 whspecial 閱讀(1283) | 評論 (0)編輯 收藏

2013年10月23日

此處的KFS是指Kosmos distributed file system,代碼位于http://sourceforge.net/projects/kosmosfs/,之后會寫幾篇相關(guān)的文章,以供后來者參考。

KFS里Meta的內(nèi)存結(jié)構(gòu)主要是一棵B+樹,保存在內(nèi)存里,具體分析如下:

B-樹,B+樹的定義

關(guān)于這些樹的定義,最好還是參考算法導(dǎo)論等經(jīng)典書,網(wǎng)路上的信息有些不是很準確,為了方便大家還是貼一個鏈接:

http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

KFS為何選用B+樹而非B樹?

這是我個人的理解:

雖然B樹可以在非葉子節(jié)點命中,會縮短一些平均查找長度,但是B+樹在這種應(yīng)用一個優(yōu)勢就是每個節(jié)點都有指向next節(jié)點的指針,對于范圍查詢或者遍歷操作很適合。對于文件系統(tǒng)的一個ls某個子目錄的需求,用B+樹可以較高效的解決。

KFSB+樹的類圖


MetaNode
base class for both internal and leaf nodes

Metabase class for data objects (leaf nodes)

Nodean internal node in the KFS search tree

MetaChunkInfochunk information for a given file offset

MetaDentry Directory entry, mapping a file name to a file id

MetaFattrFile or directory attributes

各節(jié)點的介紹

1Meta類是子節(jié)點的父類,其最主要的成員變量是fid

有三個葉子節(jié)點:MetaChunkInfo,MetaDentry,MetaFattr

2MetaDentry實現(xiàn)從文件名到fid的映射,對于每個文件(目錄)都擁有1MetaDentry

成員變量包括:

dir:文件父目錄的fid

namedentry的名稱,實際就是文件名

3MetaFattr實現(xiàn)從fid到文件屬性的映射,對于每個文件(目錄)都擁有一個MetaFattr。

成員變量包括:

Type:文件還是目錄

numReplicas:文件有幾份副本

mtime:修改時間

ctime:屬性修改時間

crtime:文件創(chuàng)建時間

chunkcount:連續(xù)的chunk數(shù)目

filesize:文件大小

nextChunkOffset:最后一個chunk在文件的所處的offset

mode_t mode:文件屬性(rwx位)

key:由KFS_FATTR,fid來構(gòu)成,可以通過fid直接找到保存文件屬性的節(jié)點。

4MetaChunkInfo標志某個文件對應(yīng)的chunk信息,如果一個文件包含多個chunk,那么需要有多個MetaChunkInfo。

成員變量包括:

offsetchunk在文件中的偏移量,因為一個文件可能由多個chunk組成

chunkIdchunkid

chunkVersionchunkversion

5Node實現(xiàn)的是B+樹的內(nèi)部節(jié)點,這種節(jié)點僅僅作為索引用途,存儲實際元數(shù)據(jù)信息的節(jié)點位于最底部的葉子節(jié)點。

成員變量包括:

NKEY = 32:每個節(jié)點最多擁有的關(guān)鍵字數(shù)目,實際上也就是最多擁有的子節(jié)點數(shù)目,如果多余這個值節(jié)點進行分裂

NSPLIT = NKEY / 2:分裂之后每個節(jié)點的關(guān)鍵字數(shù)目

NFEWEST = NKEY - NSPLIT:每個節(jié)點最少擁有的關(guān)鍵字數(shù)目,如果少于這個值兩個節(jié)點進行合并

count:節(jié)點實際擁有的關(guān)鍵字數(shù)目

Key childKey[NKEY]:節(jié)點存儲的關(guān)鍵字列表

MetaNode *childNode[NKEY]:節(jié)點指向子節(jié)點的指針列表

Node *next:指向下一個同級節(jié)點的指針

實際上每個內(nèi)部節(jié)點的階數(shù)為32,可以有32個子節(jié)點,而每個葉子節(jié)點只保存一個key值。

三類子節(jié)點在B+樹中如何分布?

可以想象,必定是將同一類的節(jié)點聚集在一起。因此對于排序函數(shù)就是先比較節(jié)點類型,然后再對節(jié)點內(nèi)部的成員變量進行比較。MetaDentry是根據(jù)dir(父目錄的id),MetaFattr是根據(jù)fidMetaChunkInfo是根據(jù)idchunkId來排序。

一個不太相關(guān)的思考

看上面的三類子節(jié)點,我們可以發(fā)現(xiàn)chunk的位置信息并沒有保存在B+樹里,它是單獨保存在一個Map數(shù)據(jù)結(jié)構(gòu)里的,也不會在meta server里進行持久化,而是每次chunk啟動時向meta server來報告。之所以不做持久化,可以這樣來理解:

只有Chunk服務(wù)器才能最終確定一個Chunk是否在它的硬盤上。Chunk服務(wù)器的錯誤可能會導(dǎo)致Chunk自動消失(比如,硬盤損壞了或者無法訪問了),亦或者操作人員可能會重命名一個Chunk服務(wù)器,還是由chunk server來報告比較靠譜。

posted @ 2013-10-23 01:36 whspecial 閱讀(1268) | 評論 (0)編輯 收藏

2013年8月14日

    Dremel是google推出的又一神器,paper中宣稱能夠在3s內(nèi)分析1PB的數(shù)據(jù),主要是面向交互式查詢。這篇paper對嵌套類型的存儲方式方面,思維確實有些跳躍,這篇文章主要講講這個,一方面是方便后來者理解,另一方面是讓自己也整理下思路。

    首先Dremel使用的是列存模型,對于基本類型列存較容易做到;但是對于嵌套類型,Dremel也能做到將其拆解成基本類型并進行列存,這是值得我們研究的。

    直觀看下嵌套類型按行存儲和拆解后按列存儲的對比效果:

    然后對于嵌套數(shù)據(jù)類型,Dremel里面定義了里面三種類型的字段

    1,必須出現(xiàn)1次而且僅出現(xiàn)1次的字段:required

    2,可能出現(xiàn)1次或者0次的字段:optional

    3,可能出現(xiàn)0次或者N次字段:repeated

    下面以paper的例子來講述吧:

    其中DocId是required字段,因此在r1,r2中必須出現(xiàn)1次;url字段是optional字段,因此在r1的第三個Name里未出現(xiàn),在r1的前兩個Name里出現(xiàn)了1次;Backward字段是repeated字段,因此在r1的Links里未出現(xiàn),在r2的Links里出現(xiàn)了2次。

    理解了上面這些,直接來看下Dremel是怎么來存它的吧:

    上表中的每條記錄都有兩個屬性,"r"代表repetition level,"d"代表definition level,定義如下:

    repetition level:what repeated field in the field’s path the value has repeated,記錄該字段是在哪個repeated級別上重復(fù)的

    definition level:how many fields inpthat could be undefined (because they are optional or repeated) are actually present,記錄該字段之上有多少個optional或者repeated字段實際是有值的(本來可以為null的)

    看到這里,各位可能已經(jīng)在心里默念了:WTF!別急,可以結(jié)合一個例子來看:

先看repetition level(下面以r替代),以Name.Language.Code為例:

    1)對第1個出現(xiàn)的值,其r始終為0,因此'en-us'的r為0

    2)對于第2個值'en',其上一個值是'en-us',它們是在Language級別發(fā)生的重復(fù),Name.Language是兩級的repeated字段,因此r為2

    3)對于第3個值null,是為了記錄'en-gb'是出現(xiàn)在第三個Name而非第二個Name里,特意占位用的。null的上一個值是'en',它們是在Name級別發(fā)生的重復(fù),因此r是1

    4)對于第4個值'en-gb',其上一個值是null,它們也是在Name級別發(fā)生的重復(fù),因此r是1

    5)對于第5個值null,其上一個值是'en-gb',它們出現(xiàn)在兩個不同Document里,因此r是0

    總結(jié)下,看repetition level注意兩點:1,只比較該值和上一個值;2,只需要看這兩個值的重復(fù)位置上有幾個repeated字段

再看definition level(下面以d替代),也以Name.Language.Code為例:

    1)對于'en-us',其上的Name,Language都出現(xiàn)了,因此d為2(其實對于非null值的字段,其上的optional或者repeated字段肯定是出現(xiàn)了,所以都是相同的,只是null字段的d值有差別)

    2)對于'en',同理d也為2

    3)對于null,其上只出現(xiàn)了Name,沒有出現(xiàn)Language,因此d為1

    4)對于'en-gb',d也為2

    5)對于最后一個null,其上也只出現(xiàn)了Name,沒有出現(xiàn)Language,因此d為1


    以上只是講了dremel怎么去存嵌套類型,至于這種存法是怎么想出來的,真非我輩能理解的了。。。更多內(nèi)容,請參考原著paper及網(wǎng)上解析。

posted @ 2013-08-14 23:17 whspecial 閱讀(1916) | 評論 (1)編輯 收藏

    上篇文章從整體介紹了Orcfile的存儲格式,接下來重點介紹下Orc里用到的幾種編碼格式:

    字典編碼:用于String類型的字段

    Run-Length編碼:用于int,long,short等類型的編碼

    Bit編碼:可以用于各種數(shù)據(jù)類型

1,字典編碼:

    對于String類型的每個字段分別保存一個字典,記錄每個值在字典中的位置,保存字典的數(shù)據(jù)結(jié)構(gòu)采用一棵紅黑樹。對于每個String字段,最終會有三個輸出Stream,分別是StringOuptut(記錄字典中的值),LengthOutput(記錄每個字典值的長度),RowOutput(記錄字段在字典中的位置)。

    思考1:為什么要用紅黑樹?

    因為紅黑樹無論是插入,刪除,查找的性能都比較平均,都是O(logN),而且是平衡查找樹,最壞情況也不會退化成O(N)

    思考2:其實一般存儲時還會使用LZO之類的壓縮,它們本身就是一種字典壓縮,為什么Orc里面要自己做字典壓縮?

    因為LZO之類的壓縮窗口一般比較?。↙ZO默認是64KB),而Orc的字典壓縮是以整個字段為范圍來壓縮的,壓縮率會更好。

2,Run-Length編碼:

    對于int,long,short類型的字段,使用Run-Length編碼。該Run-Length能夠?qū)Φ炔顢?shù)列(完全相等也屬于等差數(shù)列)進行壓縮,該等差數(shù)列需要滿足以下兩個條件:

    1,至少包含3個元素

    2,差值在-128~127之間(因為差值用1Byte來表示)

    對于不滿足等差數(shù)列的數(shù)字,Run-Length編碼也能存儲,但是沒有壓縮效果,Run-Length的具體存儲如下:

    第一個Byte是Control Byte,取值在-128~127之間,其中-1~-128代表后面存儲著1~128個不滿足等差數(shù)列的數(shù)字,0~127代表后面存儲著3~130個等差數(shù)列的數(shù)字;

    如果Control Byte>=0,則后面跟著一個Byte存儲差值,否則不存儲該Byte;

    如果Control Byte>=0,則后面跟著等差數(shù)列的第一個數(shù),否則跟著-Control Byte個數(shù)字。

    例子:

    原始數(shù)字:12,12,12,12,12,10,7,13

    經(jīng)過Run-Length的數(shù)字:2,0,12,-3,10,7,13

    紅色代表Control Byte,黃色代表差值,黑色代表具體的數(shù)字。

3,Bit編碼:

對所有類型的字段都可以采用Bit編碼來表示該值是否為null。在寫任何類型字段之前,先判斷該字段值是夠為null,如果為null則bit值存為0,否則存為1,對于為null的字段在實際編碼時不需要存儲了。經(jīng)過Bit編碼之后,可以對于8個bit組成一個Byte,再對其進行Run-Length編碼。

    其實除了這三種編碼格式之外,Orc對于hive的復(fù)雜類型array,map,list等,將其降維成基本類型來存儲,這個也是值得借鑒的,如果有空之后會進行分析。

posted @ 2013-08-14 23:13 whspecial 閱讀(3539) | 評論 (0)編輯 收藏

    Orcfile(Optimized Row Columnar)是hive 0.11版里引入的新的存儲格式,是對之前的RCFile存儲格式的優(yōu)化。寫這個的哥們來自于HortonWorks,代碼寫的很不錯,比之前的rcfile強多了(據(jù)說rcfile是個中科院的童鞋跑去facebook寫的,看來中國的計算機教育水平還是有限啊。。。囧,跑題了)

    先介紹下Orc的文件格式,截一張官方的圖:

    可以看到每個Orc文件由1個或多個stripe組成,每個stripe250MB大小,這個Stripe實際相當(dāng)于之前的rcfile里的RowGroup概念,不過大小由4MB->250MB,這樣應(yīng)該能提升順序讀的吞吐率。每個Stripe里有三部分組成,分別是Index Data,Row Data,Stripe Footer:

    1,Index Data:一個輕量級的index,默認是每隔1W行做一個索引。這里做的索引應(yīng)該只是記錄某行的各字段在Row Data中的offset,據(jù)說還包括每個Column的max和min值,具體沒細看代碼。

    2,Row Data:存的是具體的數(shù)據(jù),和RCfile一樣,先取部分行,然后對這些行按列進行存儲。與RCfile不同的地方在于每個列進行了編碼,分成多個Stream來存儲,具體如何編碼在下一篇解析里會講。

    3,Stripe Footer:存的是各個Stream的類型,長度等信息。

    每個文件有一個File Footer,這里面存的是每個Stripe的行數(shù),每個Column的數(shù)據(jù)類型信息等;每個文件的尾部是一個PostScript,這里面記錄了整個文件的壓縮類型以及FileFooter的長度信息等。在讀取文件時,會seek到文件尾部讀PostScript,從里面解析到File Footer長度,再讀FileFooter,從里面解析到各個Stripe信息,再讀各個Stripe,即從后往前讀。

    接下來看下ORcfile相對于RCfile做了哪些改進,從Orc作者的ppt里截了張圖,分別解釋下各行:

    Hive type model:RCfile在底層存儲時不保存類型,都當(dāng)做Byte流來存儲

    Separtor complex columns:Orc將復(fù)雜類型拆開存儲

    Splits Found Quickly:不很理解

    Default Column group size:不用解釋了

    Files per a bucket:不很理解

    Store min,max,count,sum:存了這些便于快速地skip掉一個stripe

    Versioned metadata:不很理解

    Run-Length Data-coding:整數(shù)類型做Run-Length變長編碼

    Store Strings in dictionary:String類型做字典編碼

    Store Row Count:每個Stripe會存儲行數(shù)

    Skip Compressed blocks:可以直接skip掉壓縮過的block

    Store internal indexes:存儲了一個輕量級的index


    整個Orc看下來,代碼寫的還是比較清晰明了的,而且我們也進行了測試,壓縮效果比RCfile提升了不少,有興趣的朋友可以來看下,之后會寫第二篇解析,主要是講Orc用到的幾種編碼格式。

posted @ 2013-08-14 23:12 whspecial 閱讀(6771) | 評論 (0)編輯 收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美视频在线一区| 亚洲欧美日韩国产综合| 日韩一级在线观看| 亚洲国产欧美日韩| 亚洲国产欧美一区二区三区久久 | 亚洲一级影院| 亚洲欧美国产不卡| 久久不射中文字幕| 快she精品国产999| 欧美激情视频免费观看| 亚洲精品视频免费在线观看| 99国产精品久久久久久久成人热| 亚洲美女福利视频网站| 亚洲午夜av在线| 久久免费视频这里只有精品| 免费不卡在线观看| 亚洲国产天堂久久综合网| 久久精品夜色噜噜亚洲a∨| 久久偷窥视频| 亚洲日本成人网| 亚洲一区在线观看视频| 久久久久久网站| 欧美日韩精品一区二区天天拍小说| 国产精品成人免费| 影音先锋日韩精品| 亚洲性线免费观看视频成熟| 久久久久国产成人精品亚洲午夜| 老司机午夜精品| 亚洲美洲欧洲综合国产一区| 欧美一区二区视频免费观看| 欧美成人免费va影院高清| 国产精品大全| 国产一区视频网站| 一区二区三区高清在线| 久久亚洲春色中文字幕| 一区二区电影免费观看| 久久久天天操| 国产精品你懂的在线| 亚洲三级视频| 久久久另类综合| 中文一区二区在线观看| 欧美成人免费在线| 国内视频一区| 欧美制服丝袜第一页| 亚洲片国产一区一级在线观看| 性欧美大战久久久久久久久| 欧美精品乱码久久久久久按摩| 国产视频亚洲精品| 亚洲欧美在线观看| 亚洲精品国精品久久99热| 久久婷婷国产综合国色天香| 国产日韩专区| 欧美一区激情| 亚洲欧美日韩精品| 国产精品入口麻豆原神| 亚洲专区欧美专区| 日韩午夜剧场| 欧美色精品在线视频| 这里只有精品视频在线| 最近看过的日韩成人| 猫咪成人在线观看| 亚洲国产精品久久精品怡红院| 久久久久国产一区二区三区四区| 亚洲制服丝袜在线| 国产欧美日韩免费| 久久精品亚洲精品| 久久精品91| 亚洲第一视频| 欧美激情亚洲| 欧美精品久久久久久久| 一区二区三区蜜桃网| 一区二区高清视频| 国产九九视频一区二区三区| 欧美三级视频在线观看| 欧美视频中文在线看| 亚洲午夜影视影院在线观看| 亚洲精品综合久久中文字幕| 欧美日韩三级一区二区| 亚洲免费视频观看| 午夜国产不卡在线观看视频| 国内在线观看一区二区三区| 蜜桃久久精品一区二区| 欧美成ee人免费视频| avtt综合网| 亚洲一区三区视频在线观看| 国产一区二区按摩在线观看| 欧美搞黄网站| 欧美日韩一区二区三区在线看| 亚洲欧美日韩一区二区三区在线观看| 国产精品99久久久久久有的能看| 国产精品三上| 欧美高清视频www夜色资源网| 欧美另类高清视频在线| 亚洲欧美国产三级| 久久久综合精品| 在线视频精品一区| 欧美一区二区三区久久精品| 在线免费不卡视频| 一区二区三区四区国产精品| 国产一区二区三区丝袜| 91久久在线播放| 国产欧美日韩综合| 亚洲黄色免费网站| 国产伦精品一区二区三区视频孕妇 | 久久精品中文| 欧美激情精品久久久久久| 欧美一区二区三区久久精品茉莉花 | 亚洲精品影院在线观看| 亚洲欧美在线一区二区| 一区二区精品国产| 久久综合影视| 久久综合影音| 国产精品亚洲一区| 亚洲精品一区在线| 91久久一区二区| 久久精品免费播放| 欧美一区二区三区在线看| 欧美日韩午夜精品| 亚洲国产一区二区在线| 在线观看成人一级片| 亚洲影院一区| 亚洲综合色丁香婷婷六月图片| 欧美mv日韩mv国产网站| 久久综合精品国产一区二区三区| 欧美图区在线视频| 欧美激情成人在线| 性亚洲最疯狂xxxx高清| 国产日韩欧美中文| 亚洲精品一区二区三区婷婷月 | 亚洲国产va精品久久久不卡综合| 欧美日韩免费| 麻豆国产精品777777在线| 欧美1区3d| 一区二区三区国产精华| 久热综合在线亚洲精品| 影音先锋久久资源网| 久久精品视频免费播放| 午夜精品亚洲| 亚洲欧美日韩一区二区在线| 日韩午夜精品视频| 亚洲国产高清在线| 亚洲国产一二三| 午夜精品999| 亚洲一区免费| 欧美chengren| 久久蜜桃资源一区二区老牛| 国产精品日韩欧美综合| aa级大片欧美| 一区二区三区四区五区精品视频| 久久综合九色综合欧美就去吻| 美国成人毛片| 国产婷婷色一区二区三区| 9久草视频在线视频精品| 亚洲免费观看在线视频| 男人天堂欧美日韩| 一本一本久久a久久精品综合麻豆| 亚洲国产欧美一区| 麻豆精品一区二区综合av| 麻豆精品精华液| 在线观看欧美日韩国产| 欧美日韩三级视频| 日韩午夜电影在线观看| 在线视频一区观看| 欧美日韩午夜剧场| 老司机午夜精品视频在线观看| 亚洲日本视频| 免费在线观看日韩欧美| 美女精品在线| 在线观看一区二区精品视频| 亚洲视频一区二区| 老司机精品导航| 亚洲国产99精品国自产| 免费观看30秒视频久久| 亚洲高清不卡| 久久国产乱子精品免费女| 韩国三级电影久久久久久| 狂野欧美激情性xxxx欧美| 亚洲经典一区| 亚洲宅男天堂在线观看无病毒| 黄色一区二区三区| 你懂的国产精品| 亚洲精品一区中文| 一区二区三区精品视频| 国内伊人久久久久久网站视频| 久久这里有精品15一区二区三区| 欧美激情视频给我| 亚洲愉拍自拍另类高清精品| 在线观看日韩国产| 欧美日韩福利在线观看| 午夜欧美精品| 一区二区三区日韩精品| 国产欧美高清| 欧美中文字幕第一页| 欧美激情欧美激情在线五月| 亚洲一区二区三区在线看 | 欧美激情精品久久久久久黑人| 亚洲欧美国内爽妇网| 欧美va亚洲va香蕉在线| 99成人免费视频| 黑人极品videos精品欧美裸|