我在配置单元中创建了一个hbase视图,其中有10百万行,当我在下面运行查询时,调用distcp并抛出下面的错误。
INSERT OVERWRITE DIRECTORY '/mapred/INPUT' select hive_cdper1.cid,hive_cdper1.emptyp,hive_cdper1.ethtyp,hive_cdper1.gdtyp,hive_cdseg.mrtl from hive_cdper1 join hive_cdseg on hive_cdper1.cnm=hive_cdseg.cnm;
output:map 100% 减少100%
2016-10-17 15:05:34688信息[main]:exec.task(会话状态。java:printinfo(951))-将数据移动到:/mapred/input fromhdfs://mycluster/mapred/input/.hive-staging_hive_2016-10-17_14-57-48_620_6609613978089243090-1/-ext-10000 2016-10-17 15:05:34693信息[main]:common.fileutils(fileutils。java:copy(551))-源是483335659字节(最大值:4000000)2016-10-17 15:05:34693信息[main]:common.fileutils(fileutils。java:copy(552))—启动分布式复制(distcp)作业。2016-10-17 15:05:34,695错误[main]:exec.task(sessionstate。java:printerror(960))-失败,出现异常无法移动源hdfs://mycluster/mapred/input/.hive-staging_hive_2016-10-17_14-57-48_620_6609613978089243090-1/-ext-10000 目标/mapred/input org.apache.hadoop.hive.ql.metadata.hiveexception:无法移动源hdfs://mycluster/mapred/input/.hive-staging_hive_2016-10-17_14-57-48_620_6609613978089243090-1/-ext-10000 到org.apache.hadoop.hive.ql.metadata.hive.movefile(hive)的destination/mapred/input。java:2644)在org.apache.hadoop.hive.ql.exec.movetask.movefile(movetask。java:105)位于org.apache.hadoop.hive.ql.exec.movetask.execute(movetask.exe)。java:222)在org.apache.hadoop.hive.ql.exec.task.executetask(任务。java:160)位于org.apache.hadoop.hive.ql.exec.taskrunner.runsequential(taskrunner)。java:88)在org.apache.hadoop.hive.ql.driver.launchtask(driver。java:1653)在org.apache.hadoop.hive.ql.driver.execute(driver。java:1412)在org.apache.hadoop.hive.ql.driver.runinternal(driver。java:1195)在org.apache.hadoop.hive.ql.driver.run(驱动程序。java:1059)在org.apache.hadoop.hive.ql.driver.run(driver。java:1049)在org.apache.hadoop.hive.cli.clidriver.processlocalcmd(clidriver。java:213)在org.apache.hadoop.hive.cli.clidriver.processcmd(clidriver。java:165)在org.apache.hadoop.hive.cli.clidriver.processline(clidriver。java:376)在org.apache.hadoop.hive.cli.clidriver.executedriver(clidriver。java:736)在org.apache.hadoop.hive.cli.clidriver.run(clidriver。java:681)位于org.apache.hadoop.hive.cli.clidriver.main(clidriver。java:621)在sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl)。java:62)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:43)在java.lang.reflect.method.invoke(方法。java:498)在org.apache.hadoop.util.runjar.run(runjar。java:221)在org.apache.hadoop.util.runjar.main(runjar。java:136)原因:java.io.ioexception:无法获取distcp构造函数:org.apache.hadoop.tools.distcp.()org.apache.hadoop.hive.shimmes.hadoop23shimmes.rundistcp(hadoop23shimmes。java:1160)在org.apache.hadoop.hive.common.fileutils.copy(fileutils。java:553)在org.apache.hadoop.hive.ql.metadata.hive.movefile(hive。java:2622) ... 21个以上
我想知道的是:我正在写同一个集群,那么为什么它调用distcp而不是普通cp。
在这里,我将hive1.2.1与hadoop2.7.2一起使用,我的集群名称是mycluster。
note:i have 尝试设置 hive.exec.copyfile.maxsize=4000000
但没有起作用。
谢谢你的建议。。
2条答案
按热度按时间qeeaahzv1#
在hive-site.xml中设置以下属性解决了我的问题。
crcmnpdw2#
1) 检查目标路径/mapred/input的权限
2) 如果其他用户没有写入权限,则
hadoop fs -chmod a+w /mapred/INPUT