Все,
Я следую приведенным ниже инструкциям, чтобы настроить одноузловой кластер hadoop в Amazon EC2. И namenode, и датодель работают на одном экземпляре Amazon EC2.
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/
http://www.slideshare.net/benjaminwootton/configuring-your-first-hadoop-cluster-on-ec2
У меня есть клиентская программа hdfs на C ++, и она не запускается на экземпляре EC2.
Когда моя клиентская программа пытается записать данные в кластер, я получил следующее исключение:
2014-02-13 14:37:01,027 INFO hdfs.DFSClient(DFSOutputStream.java:createBlockOutputStream(1175)) - Exception in createBlockOutputStream
org.apache.hadoop.net.ConnectTimeoutException: 60000 millis timeout while waiting for channel to be ready for connect. ch : java.nio.channels.SocketChannel[connection-pending remote=/10.168.15.63:50010]
at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:532)
at org.apache.hadoop.hdfs.DFSOutputStream.createSocketForPipeline(DFSOutputStream.java:13
Файл создан на hdfs, но пустой. Кажется, исключение говорит о том, что оно не может создать блок данных на датоделе из-за использования частного IP-адреса (10.168.15.63:50010) вместо общедоступного (либо ec2-54-xxx-xxx-233.us-xxx -1.compute.amazonaws.com или 54.xxx.xxx.233). У меня нет фиксированного IP-адреса (то есть эластичного IP-адреса).
Вот как я определяю адрес datanode в hdfs-site.xml.
<property>
<name>dfs.datanode.address</name>
<value>ec2-54-xxx-xxx-233.us-xxx-1.compute.amazonaws.com:50010</value>
<description>The host and port that the MapReduce job tracker runs at. If "local", then jobs are run in-process as a single map and reduce task.
</description>
</property>
Что еще нужно настроить, чтобы удаленный клиент мог получить доступ к кластеру Hadoop на EC2?
Заранее спасибо за помощь!
Задача ещё не решена.
Других решений пока нет …