环境:hadoop 1.0.3、hbase 0.94.1、pig 0.11.1
我在java程序中运行一个pig脚本,有时会出现以下错误,但不是每次都会。该程序所做的是从hdfs加载一个文件,进行一些转换并将其存储到hbase中。我的程序是多线程的。我已经使pigserver线程安全,并且在hdfs中创建了“/user/root”目录。这是程序的片段和我得到的异常。请告知。
pigServer = PigFactory.getServer();
URL path = getClass().getClassLoader().getResource("cfg/concatall.py");
LOG.info("CDNResolve2Hbase: reading concatall.py file from " + path.toString());
pigServer.getPigContext().getProperties().setProperty(PigContext.JOB_NAME,
"CDNResolve2Hbase");
pigServer.registerQuery("A = load '" + inputPath + "' using PigStorage('\t') as (ip:chararray, do:chararray, cn:chararray, cdn:chararray, firsttime:chararray, updatetime:chararray);");
pigServer.registerCode(path.toString(),"jython","myfunc");
pigServer.registerQuery("B = foreach A generate myfunc.concatall('"+ extractTimestamp (inputPath)+"',ip,do,cn), cdn, SUBSTRING(firsttime,0,8);");
outputTable = "hbase://" + outputTable;
ExecJob job = pigServer.store ("B",outputTable,"org.apache.pig.backend.hadoop.hbase.HBaseStorage('d:cdn d:dtime')");
我的养Pig厂有以下代码
private static ThreadLocal<PigServer> pigServer = new ThreadLocal<PigServer>();
public static synchronized PigServer getServer() {
if (pigServer.get() == null) {
try
{ printClassPath(); Properties prop = SystemUtils.getCfg(); pigServer.set(new PigServer (ExecType.MAPREDUCE, prop)); return pigServer.get(); }
catch (Exception e)
{ LOG.error("error in starting PigServer:", e); return null; }
}
return pigServer.get();
}
org.apache.pig.impl.logicalayer.frontendexception:错误1000:解析期间出错。无法检查名称hdfs://dc-001:9000/user/root位于org.apache.pig.pigserver$graph.parsequery(pigserver。java:1607)在org.apache.pig.pigserver$graph.registerquery(pigserver。java:1546)在org.apache.pig.pigserver.registerquery(pigserver。java:516)在org.apache.pig.pigserver.registerquery(pigserver。java:529)在com.hugedata.cdnserver.dataanalysis.cdnresolve2hbase.execute(未知源),位于com.hugedata.cdnserver.dataanalysis.cdnresolve2hbase(未知源),位于com.hugedata.cdnserver.task.handleDomainNameTask.execute(未知源),位于sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl。java:39)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:25)在java.lang.reflect.method.invoke(方法。java:597)在org.springframework.util.methodinvoker.invoke(methodinvoker。java:273)在org.springframework.scheduling.quartz.methodinvokingjobdetailfactorybean$methodinvokingjob.executeinternal(methodinvokingjobdetailfactorybean)。java:264)在org.springframework.scheduling.quartz.quartzjobbean.execute(quartzjobbean。java:86)在org.quartz.core.jobrunshell.run(jobrunshell。java:203)在org.quartz.siml.simplethreadpool$workerthread.run(simplethreadpool。java:520)
原因:未能分析:pig脚本未能分析:pig脚本未能验证:org.apache.pig.backend.datastorage.datastorageexception:错误6007:无法检查名称hdfs://dc-001:9000/user/root位于org.apache.pig.parser.queryparserdriver.parse(queryparserdriver)。java:191)在org.apache.pig.pigserver$graph.parsequery(pigserver。java:1599)
... 另有15个原因:pig脚本未能验证:org.apache.pig.backend.datastorage.datastorageexception:错误6007:无法检查名称hdfs://dc-001:9000/user/root位于org.apache.pig.parser.logicalplanbuilder.buildloadop(logicalplanbuilder)。java:835)在org.apache.pig.parser.logicalplangerator.load\子句(logicalplangerator。java:3236)在org.apache.pig.parser.logicalplangerator.op\子句(logicalplangerator。java:1315)在org.apache.pig.parser.logicalplangerator.general\语句(logicalplangerator。java:799)位于org.apache.pig.parser.logicalplangerator.statement(logicalplangerator。java:517)在org.apache.pig.parser.logicalplangerator.query(logicalplangerator。java:392) 在org.apache.pig.parser.queryparserdriver.parse(queryparserdriver。java:184)
... 16更多原因:org.apache.pig.backend.datastorage.datastorageexception:错误6007:无法检查名称hdfs://dc-001:9000/user/root位于org.apache.pig.backend.hadoop.datastorage.hdatastorage.iscontainer(hdatastorage)。java:207)位于org.apache.pig.backend.hadoop.datastorage.hdatastorage.aselement(hdatastorage)。java:128)在org.apache.pig.backend.hadoop.datastorage.hdatastorage.aselement(hdatastorage)。java:138)在org.apache.pig.parser.queryparserutils.getcurrentdir(queryparserutils。java:91)位于org.apache.pig.parser.logicalplanbuilder.buildloadop(logicalplanbuilder)。java:827)
... 22更多原因:java.io.ioexception:文件系统在org.apache.hadoop.hdfs.dfsclient.checkopen(dfsclient)关闭。java:264)在org.apache.hadoop.hdfs.dfsclient.getfileinfo(dfsclient。java:873)在org.apache.hadoop.hdfs.distributedfilesystem.getfilestatus(distributedfilesystem)。java:513)位于org.apache.hadoop.fs.filesystem.exists(filesystem。java:768) 位于org.apache.pig.backend.hadoop.datastorage.hdatastorage.iscontainer(hdatastorage。java:200)
... 26个以上
2条答案
按热度按时间j91ykkif1#
您得到的错误表明您使用的hadoop客户机与服务器中的hadoop客户机不同。你能检查一下本地安装的hadoop版本吗?
cotxawn72#
这看起来像一个
HDFSClient
问题。据我所知,问题是FileSystem
对象已缓存。所以我猜一个线程正在关闭它,而另一个线程仍在使用它。Caused by: java.io.IOException: Filesystem closed at
请看另一篇关于多个文件系统示例的文章。多个hadoop文件系统示例