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

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

2015年4月27日

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

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

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

2014年3月11日

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

log4j本來(lái)設(shè)置了要打印行號(hào)與文件名的,結(jié)果有的能打印出來(lái),有的卻是亂碼,查了些文檔之后才發(fā)現(xiàn),原來(lái)打印問(wèn)題是因?yàn)榫幚[時(shí)沒(méi)有編繹進(jìn)去調(diào)試信息,所以沒(méi)辦法打印.
但是我用的是Ant,如果在Ant編繹時(shí),編繹進(jìn)去調(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) | 評(píng)論 (0)編輯 收藏

2014年1月3日

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

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

2013年10月31日

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

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



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

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

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

2013年10月27日

這是來(lái)自于阿里技術(shù)嘉年華的一個(gè)分享,因?yàn)樵诎俣纫部紤]過(guò)類似的事情,所以聽(tīng)得比較有感悟,這里把相關(guān)內(nèi)容整理一下。

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

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

來(lái)自于阿里吳威工程師的分享

 

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

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

(一) 背景:

先要看下為什么需要做一個(gè)跨機(jī)房的大集群?

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

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

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

2.1 NameNode的性能問(wèn)題:

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

         其中存儲(chǔ)容量問(wèn)題可以依賴內(nèi)存的垂直擴(kuò)展來(lái)解決,但是計(jì)算壓力卻很難通過(guò)提升硬件來(lái)解決(因?yàn)槟壳皬S商的主要發(fā)展方向是多核,而非提高主頻)

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

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

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

2, 帶寬限制的問(wèn)題比較大,因?yàn)閱螜C(jī)房?jī)?nèi)的點(diǎn)對(duì)點(diǎn)帶寬一般是在1Gbps,而機(jī)房之間的帶寬確在20Mbps左右,非常有限。

2.3資源組之間的管理

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

(三)解決方案:

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


 

重點(diǎn)介紹里面三點(diǎn),也就是和上面三個(gè)問(wèn)題相對(duì)應(yīng)的:

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

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

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

3.1 Federation

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

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


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

BlockPool是屬于一個(gè)namenodeblock集合,每個(gè)blockpool之間也是互相獨(dú)立的。

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

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

3.2 crossNode

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

         它能提供的功能概括來(lái)說(shuō)主要包括以下三點(diǎn):

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

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

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

如何得知跨機(jī)房文件列表?

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

3.3   資源組之間的管理

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

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

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

a)            離線計(jì)算:跨機(jī)房列表中的數(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)             特殊情況:跨機(jī)房數(shù)據(jù) JoinDC1大表,DC2小表,Job 調(diào)度到DC1上,跨機(jī)房直接讀取DC2數(shù)據(jù),無(wú)需等待

 

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

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

2013年10月24日

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

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

讀寫checkpointlog的過(guò)程

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

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

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

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

MetaServer運(yùn)行時(shí)寫入新的checkpoint

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

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

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

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

MetaServer運(yùn)行時(shí)寫入新的log

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

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

2013年10月23日

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

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

B-樹(shù),B+樹(shù)的定義

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

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

KFS為何選用B+樹(shù)而非B樹(shù)?

這是我個(gè)人的理解:

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

KFSB+樹(shù)的類圖


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é)點(diǎn)的介紹

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

有三個(gè)葉子節(jié)點(diǎn):MetaChunkInfoMetaDentryMetaFattr

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

成員變量包括:

dir:文件父目錄的fid

namedentry的名稱,實(shí)際就是文件名

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

成員變量包括:

Type:文件還是目錄

numReplicas:文件有幾份副本

mtime:修改時(shí)間

ctime:屬性修改時(shí)間

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

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

filesize:文件大小

nextChunkOffset:最后一個(gè)chunk在文件的所處的offset

mode_t mode:文件屬性(rwx位)

key:由KFS_FATTRfid來(lái)構(gòu)成,可以通過(guò)fid直接找到保存文件屬性的節(jié)點(diǎn)。

4MetaChunkInfo標(biāo)志某個(gè)文件對(duì)應(yīng)的chunk信息,如果一個(gè)文件包含多個(gè)chunk,那么需要有多個(gè)MetaChunkInfo

成員變量包括:

offsetchunk在文件中的偏移量,因?yàn)橐粋€(gè)文件可能由多個(gè)chunk組成

chunkIdchunkid號(hào)

chunkVersionchunkversion

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

成員變量包括:

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

NSPLIT = NKEY / 2:分裂之后每個(gè)節(jié)點(diǎn)的關(guān)鍵字?jǐn)?shù)目

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

count:節(jié)點(diǎn)實(shí)際擁有的關(guān)鍵字?jǐn)?shù)目

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

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

Node *next:指向下一個(gè)同級(jí)節(jié)點(diǎn)的指針

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

三類子節(jié)點(diǎn)在B+樹(shù)中如何分布?

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

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

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

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

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

2013年8月14日

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

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

    直觀看下嵌套類型按行存儲(chǔ)和拆解后按列存儲(chǔ)的對(duì)比效果:

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

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

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

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

    下面以paper的例子來(lái)講述吧:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

    上篇文章從整體介紹了Orcfile的存儲(chǔ)格式,接下來(lái)重點(diǎn)介紹下Orc里用到的幾種編碼格式:

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

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

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

1,字典編碼:

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

    思考1:為什么要用紅黑樹(shù)?

    因?yàn)榧t黑樹(shù)無(wú)論是插入,刪除,查找的性能都比較平均,都是O(logN),而且是平衡查找樹(shù),最壞情況也不會(huì)退化成O(N)

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

    因?yàn)長(zhǎng)ZO之類的壓縮窗口一般比較小(LZO默認(rèn)是64KB),而Orc的字典壓縮是以整個(gè)字段為范圍來(lái)壓縮的,壓縮率會(huì)更好。

2,Run-Length編碼:

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

    1,至少包含3個(gè)元素

    2,差值在-128~127之間(因?yàn)椴钪涤?Byte來(lái)表示)

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

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

    如果Control Byte>=0,則后面跟著一個(gè)Byte存儲(chǔ)差值,否則不存儲(chǔ)該Byte;

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

    例子:

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

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

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

3,Bit編碼:

對(duì)所有類型的字段都可以采用Bit編碼來(lái)表示該值是否為null。在寫任何類型字段之前,先判斷該字段值是夠?yàn)閚ull,如果為null則bit值存為0,否則存為1,對(duì)于為null的字段在實(shí)際編碼時(shí)不需要存儲(chǔ)了。經(jīng)過(guò)Bit編碼之后,可以對(duì)于8個(gè)bit組成一個(gè)Byte,再對(duì)其進(jìn)行Run-Length編碼。

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

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

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

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

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

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

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

    3,Stripe Footer:存的是各個(gè)Stream的類型,長(zhǎng)度等信息。

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

    接下來(lái)看下ORcfile相對(duì)于RCfile做了哪些改進(jìn),從Orc作者的ppt里截了張圖,分別解釋下各行:

    Hive type model:RCfile在底層存儲(chǔ)時(shí)不保存類型,都當(dāng)做Byte流來(lái)存儲(chǔ)

    Separtor complex columns:Orc將復(fù)雜類型拆開(kāi)存儲(chǔ)

    Splits Found Quickly:不很理解

    Default Column group size:不用解釋了

    Files per a bucket:不很理解

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

    Versioned metadata:不很理解

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

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

    Store Row Count:每個(gè)Stripe會(huì)存儲(chǔ)行數(shù)

    Skip Compressed blocks:可以直接skip掉壓縮過(guò)的block

    Store internal indexes:存儲(chǔ)了一個(gè)輕量級(jí)的index


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

posted @ 2013-08-14 23:12 whspecial 閱讀(6772) | 評(píng)論 (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>
            在线观看国产日韩| 亚洲一区二区少妇| 一区二区自拍| 久久精品系列| 久久成人av少妇免费| 亚洲乱码国产乱码精品精可以看 | 欧美成人四级电影| 国产精品久久午夜夜伦鲁鲁| 欧美日韩国产色站一区二区三区| 欧美粗暴jizz性欧美20| 在线视频精品| 午夜电影亚洲| 国产精品老牛| 久热国产精品| 蜜臀久久99精品久久久久久9| 国产婷婷色综合av蜜臀av| 欧美中文字幕不卡| 欧美成人69av| 久久综合色88| 亚洲人成人一区二区三区| 欧美日本三级| 日韩网站在线| 亚洲精品五月天| 久久久久久九九九九| 欧美激情亚洲综合一区| 欧美凹凸一区二区三区视频| 最近看过的日韩成人| 伊人男人综合视频网| 亚洲欧美清纯在线制服| 日韩网站在线看片你懂的| 久久精品亚洲一区二区三区浴池| 伊人久久大香线| 亚洲视频电影图片偷拍一区| 国产日韩欧美中文| 欧美一级视频精品观看| 欧美国产一区二区三区激情无套| 日韩视频欧美视频| 国产亚洲成年网址在线观看| 欧美电影免费观看高清| 久久国产精品亚洲77777| 亚洲第一区色| 理论片一区二区在线| 欧美在线地址| 久久久精品国产一区二区三区| 久久久精品免费视频| 亚洲视频一二三| 在线亚洲免费视频| 欧美日韩在线精品| 欧美激情一区二区三区在线视频| 亚洲国产精品www| 久久久亚洲成人| 欧美日韩精品免费观看视频| 欧美日韩在线观看一区二区三区 | 久久青草欧美一区二区三区| 久久亚洲免费| 久久成人免费日本黄色| 国内精品久久久久伊人av| 久久久久欧美精品| 性伦欧美刺激片在线观看| 午夜精品久久久久99热蜜桃导演| 亚洲一区二区欧美| 欧美粗暴jizz性欧美20| 欧美一区二区视频观看视频| 国产精品h在线观看| 蜜桃av一区二区在线观看| 亚洲精品之草原avav久久| 日韩亚洲在线| 久久久在线视频| 亚洲毛片av在线| 久热精品在线| 麻豆成人精品| 激情另类综合| 久热爱精品视频线路一| 香蕉视频成人在线观看| 亚洲第一在线| 国产日产欧美a一级在线| 欧美二区在线看| 久久青青草综合| 久久av资源网站| 在线观看视频一区二区| 国产精品网红福利| 欧美精品大片| 欧美激情一二区| 欧美88av| 欧美成人资源网| 在线观看视频亚洲| 亚洲国产日韩在线一区模特| 欧美1区2区3区| 国产午夜精品视频免费不卡69堂| 国产精品每日更新| 欧美成人一品| 蜜臀av性久久久久蜜臀aⅴ| 久久婷婷国产麻豆91天堂| 久久久久久久91| 久久一区精品| 欧美wwwwww| 亚洲电影免费在线观看| 欧美成人免费小视频| 欧美日韩大片一区二区三区| 亚洲自拍偷拍色片视频| 亚洲第一级黄色片| 这里只有精品视频| 一本色道久久综合精品竹菊 | 一区在线播放视频| 国产偷国产偷精品高清尤物| 国产一区二区精品在线观看| 亚洲第一精品久久忘忧草社区| 一本久久a久久免费精品不卡| 欧美视频在线视频| 国产精品电影观看| 国产乱码精品| 好吊色欧美一区二区三区视频| 亚洲国产日韩欧美在线动漫| 亚洲成人自拍视频| 亚洲精品久久久久久久久| 亚洲高清视频在线观看| 免费日本视频一区| 久久经典综合| 在线成人av网站| 在线视频免费在线观看一区二区| 一区二区三区高清在线观看| 久久精品官网| 亚洲丝袜av一区| 久久国产日韩| 国产精品久久久久7777婷婷| 国内外成人免费激情在线视频| 一区二区国产在线观看| 亚洲经典在线| 蜜桃视频一区| 国内揄拍国内精品久久| 性欧美xxxx视频在线观看| 麻豆精品在线视频| 久久婷婷国产麻豆91天堂| 亚洲天堂av综合网| 日韩午夜在线观看视频| 麻豆精品一区二区av白丝在线| 国产精品乱人伦一区二区 | 在线视频成人| 一区二区国产日产| 欧美国产亚洲视频| 久久精品一区二区| 韩国福利一区| 亚洲国产精品久久久久婷婷老年 | 欧美日韩亚洲成人| 欧美一级在线播放| 麻豆91精品91久久久的内涵| 国产精品美女久久久久久免费| 在线激情影院一区| 欧美日韩一级片在线观看| 国产尤物精品| 久久午夜精品一区二区| 久久一区二区三区av| 国产精品美女在线| 欧美激情第4页| 欧美精品在线一区| 国产一区二区三区在线观看免费| 亚洲一区免费视频| 亚洲激情视频网| 欧美男人的天堂| 久久av一区二区| 久久综合精品国产一区二区三区| 久久在线视频在线| 国产无遮挡一区二区三区毛片日本| 久久一区中文字幕| 欧美成人精品影院| 久久躁日日躁aaaaxxxx| 久久伊人一区二区| 亚洲一级网站| 免费精品99久久国产综合精品| 一区二区三区欧美| 另类av一区二区| 国产精品久久久久免费a∨| 亚洲无限乱码一二三四麻| 欧美久久影院| 久久漫画官网| 国产视频精品xxxx| 午夜精品亚洲| 亚洲国产美女久久久久| 国产人成一区二区三区影院| 在线色欧美三级视频| 久久一区二区三区av| 欧美成人免费一级人片100| 欧美国产日韩二区| 欧美日韩一区二区三区四区在线观看 | 久久久久久久久岛国免费| 欧美日韩国产成人精品| 久久久之久亚州精品露出| 国产精品福利片| 久久精品盗摄| 亚洲国产成人av| 欧美日韩国产一区二区三区| 欧美二区在线| 日韩网站在线看片你懂的| 国产美女精品免费电影| 亚洲一区免费| 亚洲自拍高清| 亚洲一区三区电影在线观看| 国产九色精品成人porny| 久久久无码精品亚洲日韩按摩| 久久亚洲精品伦理|