我有一个遥远的 Hadoop 机器集群(Cloudera CDH4)。我正在尝试从我的计算机上运行一个猪脚本。这是我的 JAVA 代码:
import org.apache.pig.ExecType;
import org.apache.pig.PigServer;
import org.apache.pig.backend.executionengine.ExecException;
import org.apache.pig.data.Tuple;
public class TestPig {
public static void main(String args[]){
PigServer pigServer;
try {
/** On définit les propriétés */
Properties props = new Properties();
props.setProperty("fs.default.name", "hdfs://master.node.ip.adress:8020");
props.setProperty("mapred.job.tracker", "master.node.ip.adress:8021");
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
/** mapreduce mode */
pigServer = new PigServer(ExecType.MAPREDUCE, props);
/** pig script's path */
pigServer.registerScript("/user/admin/data/script.pig");
/** printing the pig script's output */
Iterator<Tuple> results = pigServer.openIterator("A");
while(results.hasNext())
System.out.println(results.next().toDelimitedString("\t"));
}
catch (ExecException e) { e.printStackTrace(); }
catch (IOException e) { e.printStackTrace(); }
}
}
当我启动这个程序时,我有以下错误:
13/07/19 10:44:02 INFO executionengine.HExecutionEngine:连接到 hadoop 文件系统:hdfs://master.node.ip.adress:8020 13/07/19 10:44:23 INFO ipc.Client:重试连接服务器:master.cs236cloud.internal/master.node.ip.adress:8020。已尝试 0 次;最大重试次数=45
...
13/07/19 10:59:27 INFO ipc.Client:重试连接到服务器:master.cs236cloud.internal/master.node.ip.adress:8020。已尝试 43 次;maxRetries=45 13/07/19 10:59:48 INFO ipc.Client:重试连接到服务器:master.cs236cloud.internal/master.node.ip.adress:8020。已尝试 44 次;最大重试次数=45
8020 在套接字超时异常上失败:java.net.SocketTimeoutException: 20000 毫秒超时,同时等待通道准备好连接。ch : java.nio.channels.SocketChannel[connection-pending remote=master.cs236cloud.internal/master.node.ip.adress:8020] at org.apache.hadoop.ipc.Client.wrapException(Client.java:1140)在 org.apache.hadoop.ipc.Client.call(Client.java:1112) 在 org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.java:229) 在 $Proxy1.getProtocolVersion(Unknown Source) 在sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.hadoop.io.retry.RetryInvocationHandler。254) 在 org.apache.hadoop.fs.FileSystem.get(FileSystem.java:123) 在 org.apache.pig.backend.hadoop.datastorage.HDataStorage.init(HDataStorage.java:72) ... 8 更多由:java.net.SocketTimeoutException:20000 毫秒超时,同时等待通道准备好连接。ch : java.nio.channels.SocketChannel[connection-pending remote=master.cs236cloud.internal/master.node.ip.adress:8020] at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:213)在 org.apache.hadoop.net.NetUtils.connect(NetUtils.java:511) 在 org.apache.hadoop.net.NetUtils.connect(NetUtils.java:481) 在 org.apache.hadoop.ipc.Client$Connection org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:579) 的 org.apache.hadoop.ipc.Client$Connection 的 .setupConnection(Client.java:453)。
我确定master正在监听8020端口。事实上,当我启动这个命令时:
网络统计-an | grep 8020
我得到了这个结果:
tcp 0 0 master.local.ip.adress:8020 0.0.0.0:* LISTEN
我还想给你我的 core-site.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<!--Autogenerated by Cloudera CM on 2013-07-12T10:43:15.666Z-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://Master.cs236cloud.internal:8020</value>
</property>
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>65536</value>
</property>
<property>
<name>io.compression.codecs</name>
<value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DeflateCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.Lz4Codec</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value>
</property>
<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
</property>
<property>
<name>hadoop.security.auth_to_local</name>
<value>DEFAULT</value>
</property>
</configuration>
这是我的主机上 jps 命令的结果:
3250 DataNode
4468 Main
2776 HeadlampServer
2541 RunJar
5496 Jps
4467 EventCatcherService
2502 QuorumPeerMain
2650 JobTracker
3082 RunJar
2597 HRegionServer
2594 TaskTracker
2629 HMaster
2520
3003 SecondaryNameNode
4553 Main
3414 Bootstrap
2549 AlertPublisher
3172 NameNode
2127 Main
4583 Main
3350 Bootstrap
我在互联网上搜索解决方案,但我没有找到任何有效的方法。
你对如何解决这个问题有想法吗?
谢谢。