2011-08-25 35 views
0

我是Cassandra的新手。我想在3個節點上安裝cassandra-0.8.4並運行從HDFS上傳數據到Cassandra的Map/Reduce作業。多節點cassandra安裝以「UnknownHostException」結尾

我已經在3安裝Cassnadra(199.168.0.3)&(199.168.0.4)分別lab04節點lab02(199.168.0.2),lab03並且可以創建一個密鑰空間&列族,他們得到了跨集羣分佈。

當我運行我的map/reduce程序時,它以「UnknownHostException」結束。同一個map/reduce程序在單節點集羣上運行良好。

以下是我所遵循的步驟。

  1. cassandra.yaml細節

lab02(199.168.0.2): (seed node)

auto_bootstrap: false seeds: "199.168.0.2" listen_address: 199.168.0.2 rpc_address: 199.168.0.2

lab03(199.168.0.3): auto_bootstrap: true seeds: "199.168.0.2" listen_address: 199.168.0.3 rpc_address: 199.168.0.3

lab04(199.168.0.4): auto_bootstrap: true seeds: "199.168.0.2" listen_address: 199.168.0.4 rpc_address: 199.168.0.4

2. 當我跑我的map/reduce程序就結束了 「的UnknownHostException」

錯誤:的java.net.UnknownHostException:/ 199.168.0.2 at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)at java.net.InetAddress $ 1.lookupAllHostAddr(InetAddress.java:849)at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1200)at java.net .InetAddress.getAllByName0(InetAd java.net.InetAddress.getAllByName(InetAddress.java:1083)at java.net.InetAddress.getAllByName(InetAddress.java:1019)at java.net.InetAddress.getByName(InetAddress.java:969) )在org.apache.cassandra.client.RingCache.refreshEndpointMap(RingCache.java:93)at org.apache.cassandra.client.RingCache。(RingCache.java:67)at org.apache.cassandra.hadoop.ColumnFamilyRecordWriter。( (org.apache.cassandra)的org.apache.cassandra.hadoop.ColumnFamilyOutputFormat.getRecordWriter(ColumnFamilyOutputFormat.java:132)的org.apache.cassandra.hadoop.ColumnFamilyRecordWriter。(ColumnFamilyRecordWriter.java:92)中的ColumnFamilyRecordWriter.java:98)。 hadoop.ColumnFamilyOutputFormat.getRecordWriter(ColumnFamilyOutputFormat.java:62)at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:553)at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:408) at org.apache.hadoop.mapred.Child.main(Child.java:170)

這是map/reduce的配置行。我已經驗證

job4.setReducerClass(TblUploadReducer.class); 
    job4.setOutputKeyClass(ByteBuffer.class); 
    job4.setOutputValueClass(List.class); 
    job4.setOutputFormatClass(ColumnFamilyOutputFormat.class); 
    ConfigHelper.setOutputColumnFamily(job4.getConfiguration(), args[1],args[3]); 
    ConfigHelper.setRpcPort(job4.getConfiguration(), args[7]); // 9160 
    ConfigHelper.setInitialAddress(job4.getConfiguration(), args[9]); // 199.168.0.2 
    ConfigHelper.setPartitioner(job4.getConfiguration(), "org.apache.cassandra.dht.RandomPartitioner"); 

步驟是

  • 有一種密碼的ssh已配置的B/W lab02,lab03 & lab04。所有的節點都可以互相ping通而無任何問題。
  • 當我跑 「InetAddress.getLocalHost()」 從Java程序上lab02它 打印 「lab02/199.168.0.2」。
  • 當我查看bin/cassandra的「o/p」時,它會打印幾條 消息,並在InetAddress字段「/199.168.0.3」等處打印出「」不打印「主機名/ IP」。那是問題嗎?

請幫助我解決上述問題。

問候, Thamizhannal

回答

1

它試圖查找文本字符串「/199.168.0.2」作爲地址,這確實是無效的。如果這是來自您的配置,請刪除斜槓。否則,它可能來自RingCache,這將是一個錯誤。如果是這樣,首先升級到0.7.8,以確保它尚未修復。如果問題仍然存在,請打開https://issues.apache.org/jira/browse/CASSANDRA上的錯誤。

編輯:Nate是對的,這是0.8.4中的一個已知錯誤,固定爲0.8.5。