配置单元插入覆盖查询未写入hdfsdirectory:cannot get distcp构造函数

gwbalxhn  于 2021-06-10  发布在  Hbase
关注(0)|答案(2)|浏览(315)

我在配置单元中创建了一个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 但没有起作用。
谢谢你的建议。。

qeeaahzv

qeeaahzv1#

在hive-site.xml中设置以下属性解决了我的问题。

<property>
<name>hive.exec.copyfile.maxsize</name>
<value>3355443200</value>
<description>Maximum file size (in Mb) that Hive uses to do single HDFS copies between directories.Distributed copies (distcp) will be used instead for bigger files so that copies can be done faster.</description>
</property>
crcmnpdw

crcmnpdw2#

1) 检查目标路径/mapred/input的权限
2) 如果其他用户没有写入权限,则 hadoop fs -chmod a+w /mapred/INPUT

相关问题