日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何實(shí)現(xiàn)Cassandra與HadoopMapReduce的整合?

在學(xué)習(xí)Hadoop的過程中,你可能會(huì)遇到整合Cassandra與Hadoop MapReduce問題,在這里向大家簡(jiǎn)單介紹一下,希望通過本節(jié)的介紹大家能夠掌握整合Cassandra與Hadoop MapReduce的方法。

成都創(chuàng)新互聯(lián)公司歡迎來電:13518219792,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),成都創(chuàng)新互聯(lián)公司網(wǎng)頁制作領(lǐng)域十年,包括成都石涼亭等多個(gè)方面擁有豐富的網(wǎng)站運(yùn)維經(jīng)驗(yàn),選擇成都創(chuàng)新互聯(lián)公司,為網(wǎng)站錦上添花!

整合Cassandra與Hadoop MapReduce

看到這個(gè)標(biāo)題,大家一定會(huì)問了。這個(gè)整合如何定義?

我個(gè)人認(rèn)為,所謂的整合是指:我們可以編寫MapReduce程序,從HDFS中讀取數(shù)據(jù)然后插入到Cassandra中。也可以是直接從Cassandra中讀取數(shù)據(jù),然后進(jìn)行相應(yīng)的計(jì)算。

從HDFS中讀取數(shù)據(jù)然后插入到Cassandra中

對(duì)于這種類型,我們可以按照以下幾個(gè)步驟來操作。

1將需要插入Cassandra的數(shù)據(jù)上傳到HDFS中。

2啟動(dòng)Hadoop MapReduce程序。

這種類型的整合其實(shí)和Cassandra本身沒有什么聯(lián)系。我們只是運(yùn)行普通的MapReduce程序,然后在Map或者Reduce端將計(jì)算好的數(shù)據(jù)插入到Cassandra中。僅此而已。

直接從Cassandra中讀取數(shù)據(jù),然后進(jìn)行相應(yīng)的計(jì)算

這個(gè)功能是在Cassandra0.6.x版本中添加上去的。其可以從Cassandra直接讀取MapReduce需要的數(shù)據(jù),實(shí)現(xiàn)對(duì)于Cassandra的全表掃描的功能。

操作步驟如下:

1在MapReduce程序中指定使用的KeySpace,ColumnFamily,和SlicePredicate等和Cassandra相關(guān)的參數(shù)。(關(guān)于這些概念,可以參考《大話Cassandra數(shù)據(jù)模型》和《談?wù)凜assandra的客戶端》)

2啟動(dòng)Hadoop MapReduce程序。

這種類型的整合和從HDFS讀取數(shù)據(jù)的整合相比,還是有許多不同的,主要有下面幾點(diǎn)區(qū)別:

1輸入數(shù)據(jù)來源不同:前一種是從HDFS中讀取輸入數(shù)據(jù),后一種是從Cassandra中直接讀取數(shù)據(jù)。

2Hadoop的版本不同:前一種可以使用任何版本的Hadoop,后一種只能使用Hadoop0.20.x

整合Hadoop0.19.x與Cassandra0.6.x

在Cassandra0.6.x中,默認(rèn)實(shí)現(xiàn)的是與Hadoop0.20.x的整合,我們無法直接在Hadoop0.19.x中使用。

所以,要實(shí)現(xiàn)這個(gè)目標(biāo),我們***步需要做的事情是,修改Cassandra的源代碼,提供一個(gè)可以在Hadoop0.19.x中使用的功能。

想要進(jìn)行這項(xiàng)測(cè)試,我們可以按照如下步驟來進(jìn)行:

1下載修改后的代碼。

2在MapReduce中指定如下內(nèi)容(注意,這里的class使用的package都是com.alibaba.dw.cassandra.hadoop下面的):

ConfigHelper.setColumnFamily(conf,Keyspace,MemberCF,"/home/admin/apache-cassandra-0.6.1/conf");SlicePredicatepredicate=newSlicePredicate().setColumn_names(Arrays.asList("CITY".getBytes(UTF8),"EMPLOYEES_COUNT".getBytes(UTF8)));ConfigHelper.setSlicePredicate(conf,predicate);ConfigHelper.setRangeBatchSize(conf,512);ConfigHelper.setSuperColumn(conf,"MemberInfo");
3確保每一臺(tái)運(yùn)行MapReduce的機(jī)器的指定目錄與MapReduce程序中設(shè)定的storage-conf.xml文件路徑一致。

4運(yùn)行 Hadoop MapReduce程序。

存在的問題與改進(jìn)
在實(shí)際的使用中,我們會(huì)發(fā)現(xiàn)Map端會(huì)出現(xiàn)這樣的錯(cuò)誤信息:

 
 
 
  1. java.lang.RuntimeException:TimedOutException()atcom.alibaba.dw.cassandra.
  2. hadoop.ColumnFamilyRecordReader$RowIterator.maybeInit(ColumnFamilyRecordReader.java:125)atcom.
  3. alibaba.dw.cassandra.hadoop.ColumnFamilyRecordReader$RowIterator.
  4. computeNext(ColumnFamilyRecordReader.java:164)atcom.alibaba.dw.cassandra.hadoop.
  5. ColumnFamilyRecordReader$RowIterator.computeNext(ColumnFamilyRecordReader.java:1)atcom.google.
  6. common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:135)atcom.google.common.collect.
  7. AbstractIterator.hasNext(AbstractIterator.java:130)atcom.alibaba.dw.cassandra.hadoop.ColumnFamilyRecordReader.
  8. next(ColumnFamilyRecordReader.java:224)atcom.alibaba.dw.cassandra.hadoop.ColumnFamilyRecordReader.
  9. next(ColumnFamilyRecordReader.java:1)atorg.apache.hadoop.mapred.MapTask$TrackedRecordReader.
  10. moveToNext(MapTask.java:192)atorg.apache.hadoop.mapred.MapTask$TrackedRecordReader.
  11. next(MapTask.java:176)atorg.apache.hadoop.mapred.MapRunner.run(MapRunner.java:48)atorg.apache.
  12. hadoop.mapred.MapTask.run(MapTask.java:342)atorg.apache.hadoop.mapred.Child.main(Child.java:158)
  13. Causedby:TimedOutException()atorg.apache.cassandra.thrift.Cassandra$get_range_slices_result.read
  14. (Cassandra.java:11015)atorg.apache.cassandra.thrift.Cassandra$Client.recv_get_range_slices
  15. (Cassandra.java:623)atorg.apache.cassandra.thrift.Cassandra$Client.get_range_slices(Cassandra.java:597)
  16. atcom.alibaba.dw.cassandra.hadoop.ColumnFamilyRecordReader$RowIterator.maybeInit(ColumnFamilyRecordReader.java:108)...11more  

引起這樣的問題的原因就在于使用ThriftAPI從Cassandra讀取數(shù)據(jù)失敗了。所以我們可以優(yōu)化這段代碼,提供想要的錯(cuò)誤處理功能來提供程序的可用性。本節(jié)關(guān)于Cassandra與Hadoop MapReduce整合方面的知識(shí)介紹到這里。


當(dāng)前名稱:如何實(shí)現(xiàn)Cassandra與HadoopMapReduce的整合?
本文網(wǎng)址:http://www.dlmjj.cn/article/djjoeco.html