2011-08-25 59 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。