敏捷、分布式、ALM過程自動化、企業(yè)應(yīng)用架構(gòu)
          posts - 14, comments - 0, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2012年5月22日

          Hadoop實施已經(jīng)有快一個月了,對Hadoop的概念理解、使用,Linux與shell腳本,甚至mysql都有了更多的理解。


          項目背景:用于互聯(lián)網(wǎng)信息收集后的關(guān)鍵詞匹配與內(nèi)容提取。

          主要系統(tǒng)架構(gòu)分為互聯(lián)網(wǎng)爬蟲、分析、業(yè)務(wù)應(yīng)用三塊:

          簡單架構(gòu)描述

          由于我在當(dāng)中的角色主要負(fù)責(zé)分析架構(gòu)的搭建,所以其他兩塊都畫得簡單,下面也不會過多的描述。


          Hadoop理解:提到Hadoop都想到的是云、分布式計算,在一段時間的實施之后有了一些具體的理解。

          Hadoop的優(yōu)勢:

          針對性能指標(biāo),當(dāng)業(yè)務(wù)數(shù)據(jù)量總量或增速上升到一定級別,依靠關(guān)系型數(shù)據(jù)庫一定無法支持。對于非關(guān)系型數(shù)據(jù)庫,包括Nosql和Solr一類存儲方式,稍顯復(fù)雜,對于機器集群性能要求偏高(相對于文件系統(tǒng))。從數(shù)據(jù)使用模式上來講,目前海量數(shù)據(jù)的常常是不包含復(fù)雜邏輯的簡單統(tǒng)計整理(比如上述系統(tǒng)中的關(guān)鍵詞匹配)。這時候文件系統(tǒng)的優(yōu)勢反而比較明顯(結(jié)構(gòu)簡單,邏輯簡單)。

          如上述系統(tǒng)的應(yīng)用場景是怎么樣的呢,在一個強大的爬蟲系統(tǒng)之下,每個小時的數(shù)據(jù)增量在G到10G的級別,需要搜索所有的文件,獲取關(guān)鍵字的匹配,并且對匹配內(nèi)容進(jìn)行摘要。很類似我們windows里面的搜索功能,需要解決的就是如何在這樣增幅的文件系統(tǒng)之下,如何滿足業(yè)務(wù)系統(tǒng)的需求。

          分析系統(tǒng)有什么要求呢?

          能夠建立集群,分布式的保存數(shù)據(jù)文件內(nèi)容(統(tǒng)一控制,可配置)。

          有一定的保護(hù)機制,保證數(shù)據(jù)或節(jié)點丟失不會影響系統(tǒng)使用。

          如果有一個任務(wù)腳本執(zhí)行框架機制就好了(用于并行計算)。

          能夠進(jìn)行節(jié)點間的數(shù)據(jù)均衡。

          能夠簡單的查看所有的狀態(tài)與日志(web客戶端)

          可能主要是這些了。若自己實現(xiàn),確實是個復(fù)雜而龐大的工程,現(xiàn)在我們有了Hadoop。


          系統(tǒng)物理架構(gòu):

          我們使用了一臺服務(wù)器,利用虛擬化,安裝了7套64x位的CentOS。一個Namenode,6個Datanode,復(fù)制數(shù)設(shè)置為3。每個系統(tǒng)分配到一個cpu,2G內(nèi)存,Datanode掛載了500G的存儲空間。

          理想的Hadoop的搭建環(huán)境,參照《Best Practices for Selecting Apache Hadoop Hardware》(http://hortonworks.com/blog/best-practices-for-selecting-apache-hadoop-hardware/)一文,以及一些其他的文章。

          CPU:最好是雙CPU,8核左右。不用太高了。

          內(nèi)存:推薦48G,但是4G應(yīng)該就可以運行Hadoop了。

          硬盤:7200轉(zhuǎn)的SATA硬盤即可,Hadoop很占空間,所以盡量加。

          網(wǎng)絡(luò):內(nèi)部的數(shù)據(jù)交換要求非常高,內(nèi)網(wǎng)最好是千兆網(wǎng)卡,帶寬為1GB。

          理想與現(xiàn)實,有錢與沒錢,呵呵。


          系統(tǒng)軟件架構(gòu):

          Hadoop:版本使用的是1.0.3,再下來就是2了,為了盡量簡化應(yīng)用,所以不考慮2的新特性。對Hadoop沒有做太多的設(shè)置,基本基于默認(rèn)。70為Namenode,71-76為Datanode。

          JDK:1.6.0_33 (64x)


          系統(tǒng)實施過程:

          HDFS部分:

          爬蟲抓取數(shù)據(jù),整理后存放在50文件服務(wù)器,70以外部掛載的形式讀取。網(wǎng)頁文件比較小,假如直接寫入Hadoop對Namenode負(fù)載過大,所以入庫前合并,將每小時網(wǎng)頁整合成為一個文件寫入HDFS,由于區(qū)分類別,所以每小時基本寫入10個文件左右,總量在5-8G,耗時在40-50分鐘。(這個過程中,由于爬蟲的IO過于頻繁,導(dǎo)致文件讀取困難,所以做了定時任務(wù),每小時啟動一次,將需要處理的文件先拷貝到臨時區(qū)域,合并入庫之后再刪除。此處應(yīng)該是受到單核cpu的限制,所有操作均是串行,包括拷貝(cp)和合并入庫(java),所以Namenode嚴(yán)重建議配置稍高。)

          此處沒有太多問題。

          MapReduce部分:

          寫入完成后,進(jìn)行分析工作,MapReduce。此處的工作過程為:數(shù)據(jù)庫定時生成關(guān)鍵詞列表文件。Job執(zhí)行時會讀取列表文件,匹配指定范圍內(nèi)的HDFS文件(過去一小時),匹配出對應(yīng)的表達(dá)式與HTML,Map過程結(jié)束。在Reduce階段,會將Map的所有數(shù)據(jù)入數(shù)據(jù)庫(Mysql)。

          此處出現(xiàn)過一些問題,記錄下來。

          1. Reduce階段需要加載Mysql的第三方驅(qū)動包。我在三個環(huán)境測試過(公司、家里、發(fā)布環(huán)境),使用 -libjars 一定可以,有的地方不需要也可以。不明確,懷疑與HADOOP_HOME環(huán)境變量有關(guān)。

          2. MR過程中使用log4j打印日志,在Hadoop臨時目錄(如果你沒有配置dfs.name.dir,dfs.data.dir,mapred.local.dir.mapred.system.dir等目錄,這些都會在hadoop.tmp.dir當(dāng)中,我就偷懶都沒配置)mapred文件夾中查看一下。

          整個過程實際上還是比較簡單的,基本編碼量就在Job的部分,但是一個Java文件就夠了。在目前初級階段應(yīng)該還是比較好用的。現(xiàn)在還沒有測試Job的執(zhí)行效率。完成后會繼續(xù)記錄下來。有什么問題可以提出。我想到什么也會在本文繼續(xù)更新。

          posted @ 2012-08-08 20:21 一酌散千憂 閱讀(586) | 評論 (0)編輯 收藏

          硬件資源:

          三臺CentOS5.6虛擬機(Vmware

          本機 windows7 64x

           

          基本資源配置:

          三臺虛擬機均是克隆自同一個鏡像

          已經(jīng)安裝了Java環(huán)境(jdk1.6.0_25

          Hadoop路徑在/usr/hadoop/hadoop-0.20.205.0

           

          操作步驟:

          1、機器名稱規(guī)范

          ip分別為128129、130,將128設(shè)置為master,其他設(shè)置為slave

          修改

          /etc/sysconfig/network

          /etc/hosts

          兩處配置,名稱分別為hadoop-master\hadoop-slave01\hadoop-slave02

          注意:此處名稱最好不用使用下劃線,有可能引發(fā)namenode的啟動異常。

           

          2、修改Hadoop配置 

          master節(jié)點的conf中修改masterslave文件,分別為機器的ip地址

           

          修改master節(jié)點的conf中:

          core-site.xml

          <property>

          <name>fs.default.name</name>

          <value>hdfs://ip-master:9000</value>

          </property>

           

          mapred-site.xml

          <property>

          <name>mapred.job.tracker</name>                                   

          <value>master:9001</value>                                

          </property>

           

          hdfs-site.xm

          <property>

          <name>dfs.replication</name>

          <value>2</value>

          </property>

          注意此處的端口號均為默認(rèn)。

           

           

          3、建立m-s之間的ssh連接

          首先masterslave機器都需要進(jìn)行ssh信任文件生成,執(zhí)行如下命令:

          $ ssh-keygen -t rsa

          中間需要輸入的地方直接回車,接受缺省值即可

           

          由于使用root用戶登錄,所以密鑰文件生成在 /root/.ssh/文件夾下,存有一對密鑰id_dsaid_dsa.pub。

          此處id_dsa(私鑰)必須為其他用戶不可讀,所以文件屬性應(yīng)當(dāng)是600

           

          master機器執(zhí)行:

          id_dsa.pub(公鑰)復(fù)制為 authorized_keys

          $ cp id_dsa.pub authorized_keys

          如果是多臺機器需要,無密碼登陸,則各自機器產(chǎn)生公鑰追加到authorized_keys即可.

           

          使用scp協(xié)議覆蓋slave端的密鑰文件夾,使得slave機器信任來自master的連接:

          $ scp /root/.ssh/* ip-slave:/root/.ssh

           

           

          4、啟動服務(wù) 

          建議將$HADOOP_HOME/bin下的所有文件給與執(zhí)行權(quán)限:

          $ chmod 777 bin

           

          master作為namenod需要執(zhí)行如下腳本:

          $HADOOP_HOME/bin/hadoop namenode –format

           

          完成后執(zhí)行 $HADOOP_HOME/bin/start-all.sh

           

          5、問題檢查

          Hadoop根目錄下的logs文件中,檢查各個服務(wù)日志的啟動情況

           

           

          6、其他情況說明:

          Q: $HADOOP_HOME is deprecated

          A: 基本不會產(chǎn)生任何影響。由于腳本啟動時設(shè)置了該環(huán)境變量,就會提示用戶原有環(huán)境變量失效??梢匀∠h(huán)境變量設(shè)置,或者直接去bin/hadoop中找到這句話,去掉即可

           

          Q: 無效的選項 -jvm / Unrecognized option: -jvm

          A: 在使用root用戶登錄時 bin/hadoop 腳本就會進(jìn)行判斷,加上-jvm參數(shù)。此處是為了進(jìn)入jsvchttp://commons.apache.org/daemon/jsvc.html),此處并不確定是否bug,也不再進(jìn)行詳細(xì)的追溯,解決方法就是進(jìn)入 bin/hadoop 腳本中 找到 jvm 參數(shù)并去掉。

           

           

           

           

           

           

           

          posted @ 2012-07-04 07:38 一酌散千憂 閱讀(591) | 評論 (0)編輯 收藏

          公司里有同事時常抱怨,項目的用戶體驗太差,常常挨領(lǐng)導(dǎo)的罵。大家都認(rèn)為是在用戶體驗的設(shè)計方面,公司人員的能力和經(jīng)驗都不足引起的。發(fā)牢騷的時候也會說,如果公司能夠請得起“淘寶”的UI設(shè)計師,咱們的系統(tǒng)肯定會更上一層樓。我之前也一直認(rèn)為如此,即我們的設(shè)計是影響項目體驗的重要原因。最近被領(lǐng)導(dǎo)調(diào)動去協(xié)助一個項目,產(chǎn)生了一些不一樣的體會。

          項目背景,一個新的產(chǎn)品,小型項目,純開發(fā)人員3-4人,2名熟練開發(fā)人員,1名新手,偶爾會有協(xié)助人員。沒有技術(shù)經(jīng)理,項目經(jīng)理身負(fù)多個項目,對項目進(jìn)度關(guān)心不足,部門經(jīng)理會協(xié)助進(jìn)行工作和進(jìn)度管理??梢钥吹焦芾磉€是比較混亂。

          由于項目進(jìn)度太慢,領(lǐng)導(dǎo)要求從我這邊調(diào)一個熟練人員協(xié)助開發(fā)。我也基本了解他們的項目狀況,為了不讓我的人進(jìn)去抓瞎,我就和他一起去了解項目情況。

          項目狀況比較糟糕,介入項目時已經(jīng)開發(fā)了一段時間,保留的文檔只有兩份,一副數(shù)據(jù)庫說明,一份非常粗略的需求說明,而且還與開發(fā)進(jìn)度不同步,就是沒有維護(hù)。

          我了解了一下項目目前的難度,開發(fā)人員和我反映一個是人員熟練程度的問題,二是需求變更的問題。我整體了解了一下項目目前的需求和設(shè)計,以及進(jìn)度。就挑了一個模塊詢問他們的變更情況,這個模塊是一個關(guān)鍵詞匹配功能。結(jié)果是領(lǐng)導(dǎo)看了他們的頁面之后,嫌信息量太少,就要求提供一些更細(xì)化的數(shù)據(jù)展示。開發(fā)人員問我有什么意見,我就簡單講了一下頁面大概怎么構(gòu)建。其中有一個點,是用于變更數(shù)據(jù)范圍,即查詢的表變更,我一開始覺得使用下拉框就可以,產(chǎn)生了一些意見。有人建議分為不同子模塊,或者tab頁,或者分為多塊并列展示。我想了想,就給他們講了我認(rèn)為幾種方案的優(yōu)點缺點及適用范圍。

           

          1.       多塊并行展示:

          多個不同范圍的數(shù)據(jù)在同一頁面中分為不同區(qū)域以相同形式展示。原因是由于多塊數(shù)據(jù)之間有一定的關(guān)聯(lián)因果關(guān)系,或值得對比。適用范圍:如購物網(wǎng)站中的多個物品比較。

          2.       Tab頁:

          同一個頁面的多個tab頁,表示多個tab頁中的數(shù)據(jù)可能在一定的領(lǐng)域概念之下有一定的關(guān)聯(lián),但關(guān)聯(lián)度不強。因為tab頁更重要的是強調(diào)一個同步工作的狀態(tài),即A tab頁查看一定信息,會打開B tab頁查看其他信息,中途還會切回A tab頁。適用范圍:如郵箱中,收件箱和草稿箱。

          3.       下拉框

          下拉框作為查詢條件的一部分,常用于有著常規(guī)或固定的可選擇內(nèi)容中(如性別,月份),更多是以過濾的形態(tài)出現(xiàn),即下拉框更適合針對某表的某個字段過濾,如果針對的是數(shù)據(jù)范圍或是對用戶需要直觀了解的重要業(yè)務(wù)條件則不太合適。適用范圍:如在考試成績中使用下拉框過濾“男女”或“及格不及格”。

          4.       單選框

          單選框與下拉框的作用范圍相似,但是不同之處在于將被選項全部展示,目的在于能夠讓用戶清楚的了解當(dāng)前數(shù)據(jù)顯示的實際范圍或條件,以及備選的其他范圍或條件。更適用于選項與實際業(yè)務(wù)及當(dāng)前展示數(shù)據(jù)關(guān)系重要,不同選項可能會引發(fā)用戶的不同行為。適用范圍:如銀行系統(tǒng)顯示了當(dāng)前用戶下綁定多個帳號時,使用單選框。

           

          經(jīng)過上述討論,我們仔細(xì)分析了這個模塊中用戶的實際需求,以及可能后續(xù)操作,最終選擇的單選框的方案。

          目前還沒有后續(xù),但是我想我們基于用戶真是需求的挖掘和后續(xù)操作的認(rèn)真分析,會讓我們在與領(lǐng)導(dǎo)進(jìn)行需求討論的時候有更加充分合理的依據(jù)。

          回來之后我又看了看淘寶的搜索頁面,比如就搜索“鞋子”來講,將品牌這欄設(shè)置為單選和下拉將是完全不同的效果,而確定方案的理由則是對于用戶的需求和實際行為的深入研究。這個應(yīng)該是需求分析和調(diào)研的結(jié)果。將搜索條件以tag的形式標(biāo)注于頁面上,并且可以直接點擊X按鈕進(jìn)行刪除,我覺得更加可以傾向為用戶體驗。滿足并充分考慮了用戶實際需求的是好的需求分析,能夠簡化并引導(dǎo)用戶行為的是好的用戶體驗。

          當(dāng)我們面臨的系統(tǒng)感覺非常難用的時候,往往這時候并非是用戶體驗差,我們應(yīng)該檢討的是我們對用戶需求有沒有好好挖掘,做出來的是不是用戶想要、用戶能用的系統(tǒng)。

          posted @ 2012-05-22 05:02 一酌散千憂 閱讀(265) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 仙桃市| 安岳县| 县级市| 德阳市| 台江县| 商南县| 龙南县| 蓬莱市| 广灵县| 杂多县| 舞钢市| 辉南县| 六安市| 东乡县| 安阳市| 徐州市| 东海县| 东阳市| 旅游| 城市| 武定县| 磐安县| 南投县| 汉中市| 长顺县| 海林市| 延长县| 拜泉县| 宝坻区| 邹平县| 洛南县| 沂源县| 博湖县| 巴林左旗| 江川县| 乌恰县| 平阳县| 明溪县| 鄂州市| 谷城县| 惠水县|