一種基于MapReduce的改進文本輸入方式的并行分詞方法研究_第1頁
一種基于MapReduce的改進文本輸入方式的并行分詞方法研究_第2頁
一種基于MapReduce的改進文本輸入方式的并行分詞方法研究_第3頁
一種基于MapReduce的改進文本輸入方式的并行分詞方法研究_第4頁
一種基于MapReduce的改進文本輸入方式的并行分詞方法研究_第5頁
已閱讀5頁,還剩8頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、    一種基于mapreduce的改進文本輸入方式的并行分詞方法研究    徐宏博+趙文濤+孟令軍摘要:中文分詞方法都屬于串行分詞方法,不能處理海量數據。提出一種基于mapreduce的并行分詞方法。mapreduce編程模型默認使用textinputformat文本輸入方式,該方式不適合處理大量文本文件。首先基于combinefileinputformat父類,自定義文本輸入方式myinputformat,并在實現createrecordreader方法過程中返回recordreader對象。其次自定義myrecordreader類來說明讀取文本鍵值

2、對的具體邏輯。最后自定義mapreduce函數實現不同類別文本的分詞結果。實驗證明,基于改進后的myinputformat文本輸入方式比默認的textinputformat輸入方式,更能處理大量文本文件。關鍵詞:mapreduc;分片;textinputformat;combinefileinputformat:tp311 :a :1009-3044(2016)22-0171-05abstract: method of word segmentation is a serial process and it fails to deal with big data. we put forward

3、 a parallel word segmentation based on mapreduce. textinputformat is the default input class when preprocessing in the programming model of mapreduce, while it fails to process datasets which is made up of many small files. firstly, we define a new class named myinputformat based on the class of com

4、binefileinputformat,and return an object of recordreader class. secondly, we declare myrecordreader class , by which can we write a new logic method to read and split the original data to pairs when implementing the createrecordreader method. last, we define our own mapreduce function, by which can

5、we get the final segmentation results of different categories. the experimental results indicate that, compared with the default textinputformat, myinputformat saves much time to segment the text.key words: mapreduce; split; textinputformat; combinefileinputformat中文分詞是中文文本處理的基礎, 具有十分重要的理論和應用意義1。目前中文

6、分詞算法主要有3類:基于詞典的分詞方法,基于概率的分詞方法和基于人工智能的分詞方法。國內一些大的科研機構都對中文分詞做了研究工作,比如,北京航空航天大學計算機系于設計實現cdws中文分詞系統2,中國科學院組織開發了基于多層隱馬爾科夫模型ictclas分詞系統2。國外成熟的中文分詞工具包是ikanalyzer,它是一個開源基于java語言的輕量級的中文分詞第三方工具包3,采用了特有的“正向迭代最細粒度切分算法”,支持細粒度和智能分詞兩種切分模式。ikanalyzer是以開源項目lucene4為應用主體的,結合詞典分詞和文法分析算法的中文分詞組件。lucene是apache基金會下的一個非常優秀的

7、全文檢索工具軟件包,它可以嵌入在java系統中,通過建立倒排鏈表結構,建立索引實現信息檢索,具有高性能、可擴展的特點。但是這些分詞方法都是傳統的串行分詞方法,不足以處理海量數據,例如微博數據5,它是一種社會化媒體,包含了豐富的特征信息,具有規模大、實時性強、內容口語化、特征屬性多和噪聲大等特征6。由google實驗室提出的mapreduce并行分布式計算模型主要針對海量數據的處理,它能組織集群來處理大規模數據集,成為云計算平臺主流的并行數據處理模型7-8。本文基于mapreduce框架,通過結合使用ikanalyzer和lucene實現并行分詞。mapreduce框架中默認使用textinpu

8、tformat文本輸入方式8,該方式的對行文本的切分方法不適合處理由大量小文本組成的文件。本文基于combinefileinputformat父類,自定義文本輸入方式myinputformat,繼承父類getsplits方法,重寫issplitable方法,并通過定義myrecordreader類實現createrecordreader方法,改進文本分片切割方式。實驗證明,基于改進后的myinputformat文本切片方式比默認的textinputformat切片方式,更能高效地處理大量文本文件。1 相關工作1.1 mapreduce實現框架mapreduce是一種分布式開發的編程模型9-10

9、,用戶可以根據多種語言來進行應用程序的編寫。它提供了簡潔的編程接口,底層框架可以自動并行化基于這些接口開發的程序。由于用戶不需要處理與并行化相關的工作,可以其中精力編寫業務邏輯,開發效率較高。 mapreduce作為hadoop的核心計算模型11-13,它通過將輸入數據切割為若干個inputsplit來實現并行化。其工作流程如下圖1所示:1.2 默認textinputformat輸入方式實現并行分詞inputformat類是mapreduce框架中輸入方式的最頂級的抽象類,該類從兩個不同的角度設定定義了getsplits和createrecordreader兩個方法。 getsplits方法負

10、責切分輸入文件,它把很多的輸入文件切割成很多的輸入分片inputsplit,每個inputsplit分片都將被交給一個單獨的mapper處理; createrecordreader方法提供了一個recordreader對象,該對象從inputsplit分片中解析出鍵值對。這兩個方法都是抽象方法,由其子類對方法進行具體實現。fileinputformat抽象類繼承于inputformat類,用來專門處理文件類型的數據。該類只實現了getsplits方法,并沒有實現createrecordreader方法。getsplits方法返回的分片類型是filesplit。fileinputformat在默

11、認情況下為文件在hdfs上的每一個block(128mb)都生成一個分片,可以通過設置作業的配置參數mapred.min.split.size和mapred.max.split.size來設置分片大小的最小值和最大值,但是一個分片只能包含來自于一個文件的block。textinputformat 類繼承于fileinputformat類,是mapreduce框架默認的文件輸入格式。它繼承了父類getsplits方法。因此,它的分片內容只能來自于一個文件的block。如果輸入文件有上萬個,那么就會產生上萬個分片,進而需要調用至少上萬個mapper,這對于大量小文件而言是工作效率極其低下。該類實現

12、了createrecordreader方法,該方法返回的是linerecordreader對象,該對象將輸入數據每行都解析成一條記錄。其中key代表每個數據的記錄在數據分片中字節偏移量,類型是longwritable。 value代表每行的內容,類型是text。每個分片都只包含來自于一個文件的block。每個split分片都將交由mapper處理,mapper端的run方法通過調用textinputformat方法中返回的linerecordreader對象,將分片解析成鍵值對,并進行并行分詞,分詞任務是將輸入數據的文件夾名(類別)作為key,文件的行文本作為value,并行分詞流程圖如圖2所

13、示:2 改進數據輸入方式實現并行分詞textinputformat的切分方法默認情況下為文件在hdfs上的每一個block(128mb)都生成一個分片,并且一個分片包含的block只能來自一個文件。當數據集由大量的小文件組成時,這種輸入格式是極其低效的。2.1 自定義myinputformat類首先,自定義繼承于combinefileinputformat抽象類的myinputformat類。combinefileinputformat類繼承于fileinputformat類,它重載父類的getsplits方法,返回的分片類型是combinefilesplit。combinefilesplit

14、類中定義的paths數組用來記錄每一個文件的路徑,即它可包含多個文件的路徑,這是與textinputformat類在分片邏輯上的最大不同之處。myinputformat繼承父類的getsplits方法,使得一個分片可以包含多個文件的block內容。假如file1,file2兩個文件各有3個數據塊組成,則這兩個文件的切分結果示意圖如圖3所示:其次,myinputformat重載父類的issplitable方法,返回false值來保證文件不被分割。第三,myinputformat實現父類createrecordreader方法并返回combinerecordreader對象,在該對象類的構造函數中

15、,定義myrecordreader來處理分片內的每個文件。輸出的每條對應一個完整的文本文件。其中key代表文件所屬的類別名,類型是text。 value代表文本分詞結果,類型是text.2.2 自定義myrecordreader類combinefilerecordreader是hadoop中繼承于recordreader的可以遍歷包含多個文件的分片內容的框架9,在其構造函數的中聲明自定義myrecordreader類來說明將文件解析成鍵值對的具體邏輯,方法返回自定義recordreader對象。首先,在myrecordreader類中,定義的變量如表1,重載的方法如表2:其中,nextkeyv

16、alue方法是將文件解析成鍵值對的具體邏輯,是最重要的一個函數,在該函數中設置key值為文件的類別名,fsdatainputstream是hadoop的輸入流類,通過該類對象的readfully方法可以將讀取的文本內容存放在一個與文本內容長度相等大小的字節數組中,并設置文本內容作為value.2.3 自定義并行分詞mymapper類mapper端的run方法通過調用myinputformat方法中返回的myrecordreader對象,將分片解析成鍵值對,key指的是文件的類別,value指的是文件內容,并行分詞流程圖如圖4所示: mapreduce最終實現文本文件的分詞。文本分詞是特征項提取

17、中最關鍵的一步,鑒于中英文編碼格式的不同,兩者的分詞格式也不一樣,本文結合使用ikanalyzer2012和lucene實現分詞。設置輸出key為輸入key,定義stringbuilder對象存儲分詞結果,并作為輸出value.由于自定義的myrecordreader的解析邏輯是將文件的類別作為key,文件內容作為value,因此分詞過程只需要經過一個map方法就可以得到結果,mapreduce流程圖如下所示:3 實驗3.1 實驗環境本文實驗環境:聯想z470機器,intel core i3-2410m,2.3 ghz cpu,2gb內存,200 gb硬盤,windows xp 操作系統, j

18、ava編程語言,eclipse-4.3.2開發環境,虛擬機vmware workstation 10,centos 6.4,jdk1.6.0_24,apache hadoop 1.1.2。在單機偽分布式環境下即可證明該實驗的有效性,hadoop具體環境如圖7:3.2 文本數據準備本文使用的實驗數據集是從搜狗實驗室提供的中文文本分類語料庫(http:/3.3 并行分詞步驟1:分別將在eclipse上編寫的兩種并行分詞程序打成jar包,使用textinputformat方式的jar包命名為textinputformat.jar,使用myinputformat方式的jar包命名為myinputfor

19、mat.jar,并都存放在/usr/local/目錄下;步驟2: 在終端執行命令”hadoop fs put /usr/local/sogou /sogou”將數據集上傳至hadoop的sogou目錄下;步驟3: 在終端執行命令”hadoop jar /usr/local/textinputformat.jar /usr/local/sogou /sogou /usr/local/sogou /seg1”對數據集按照textinputformat方式并行分詞;步驟4: 在終端執行命令”hadoop jar /usr/local/myinputformat.jar /usr/local/sogo

20、u /sogou /usr/local/sogou /seg2”對數據集按照myinputformat方式并行分詞;4 結果對比與分析4.1 分詞結果對比在剛開始執行時,記錄job總共的input paths,并通過web界面(mlj:50030)查看job的工作狀態,記錄job運行時間,實驗結果如下表4:圖7是兩種輸入方式并行分詞時間對比柱狀圖,橫坐標表示數據集,縱坐標表示運行時間,由于兩種方式花費時間相差較大,縱坐標采用對數坐標。由圖7可知,運行時間與數據集的大小成正相關,體育和軍事數據集花費時間增加相對較少,說明hadoop更能處理較大的數據。4.2 結果分析默認輸入方式對輸入數據產生至

21、少與文件個數相等的分片,每個數據分片都交給一個mapper處理,而且在進行過map之后需要合并到reduce端,這會大大增加網絡擁堵。因為每個job從建立、 處理、 提交到寫到本地都需要一定的時間,并且在單機環境下只有一個mapper, 它只能順序地執行每一個job。這樣分片的數目越多,job需要花費的時間也就越長。因此處理大量小文件的速度就會非常慢。而myinputformat文件輸入格式則將所有文件作為一個分片進行處理,輸入方式則允許一個分片包含多個文件塊,大大減少了map個數,并且改進后并不需要reduce合并處理,省去了建立多個job所消耗的時間,這大大提高了并行分詞的效率。5 結束語

22、由于mapreduce默認的textinputformat輸入方式非常不適合處理大量小文件組成的數據。本文首先基于combinefileinputformat父類,自定義文本輸入方式myinputformat,繼承父類getsplits方法,重載父類的issplitable方法保證文件不被分割,并在重載createrecordreader方法時返回一個combinefilerecordreader對象。第三,自定義myrecordreader類,指明解析文件的邏輯。最后,通過使用一個map函數實現分詞。實驗證明,在進行并行分詞時,基于改進后的myinputformat文本切片方式處理時間遠比默認的textinputformat切片方式要少得多。參考文獻:1 韓冬煦, 常寶寶. 中文分詞模型的領

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論