2 shaguayidianhong shaguayidianhong 于 2014.04.22 14:36 提问

hive数据批量导入hbase过程中遇到分区文件不存在异常

在做一个hive数据批量导入hbase的方法,根据官方文档一步一步的做下来,但是在生成HFILE文件时却报了一个比较让人纠结的错误,在网上找了很长时间,都木有合适的答案,在hive命令行中执行的代码如下:
SET mapred.reduce.tasks=5;
SET hive.mapred.partitioner=org.apache.hadoop.mapred.lib.TotalOrderPartitioner;
SET total.order.partitioner.path=/ws/hbasetest/hbase_splits;
INSERT OVERWRITE TABLE hbase_hfiles SELECT * FROM pgc CLUSTER BY rowkey;

然后报了如下异常:
Error: java.lang.IllegalArgumentException: Can't read partitions file

    at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:116)
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73)
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)
    at org.apache.hadoop.mapred.MapTask$OldOutputCollector.<init>(MapTask.java:569)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:430)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:342)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

Caused by: java.io.FileNotFoundException: File file:/inm/app/cdh5/cdhworkspace/yarn/local/usercache/hadoop/appcache/application_1397722576517_0053/container_1397722576517_0053_01_000005/_partition.lst does not exist
at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:511)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileLinkStatusInternal(RawLocalFileSystem.java:724)
at org.apache.hadoop.fs.RawLocalFileSystem.getFileStatus(RawLocalFileSystem.java:501)
at org.apache.hadoop.fs.FilterFileSystem.getFileStatus(FilterFileSystem.java:402)
at org.apache.hadoop.io.SequenceFile$Reader.(SequenceFile.java:1749)
at org.apache.hadoop.io.SequenceFile$Reader.(SequenceFile.java:1773)
at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.readPartitions(TotalOrderPartitioner.java:301)
at org.apache.hadoop.mapreduce.lib.partition.TotalOrderPartitioner.setConf(TotalOrderPartitioner.java:88)
... 10 more

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Job 0: Map: 1 Reduce: 5 HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0
这个异常说是找不到分区文件,但我的明明存在分区文件,但却找不着,有点郁闷了;
网上常见一种解答方式说是job运行在本地,但是这个异常和网上说的似乎不一样,有一样的,但没有答案,求高手指教

2个回答

Mrknowledge
Mrknowledge   2014.04.29 17:57

SET total.order.partitioner.path=/ws/hbasetest/hbase_splits;
分区文件必须存在于hdfs中,本地文件不能被读取。

shaguayidianhong
shaguayidianhong 额,但是分区文件生成的时候本身就是在hdfs上面啊,我们现在测试的是官网提供的一种方法https://cwiki.apache.org/confluence/display/Hive/HBaseBulkLoad是直接通过hive生成的分区文件,就在hdfs上,而且分区文件还分别拷贝了一下,但就一用到这个分区文件进行插入数据的时候就找不到,就有点郁闷了
3 年多之前 回复
Mrknowledge
Mrknowledge 先把分区文件上传到hdfs中
3 年多之前 回复
shaguayidianhong
shaguayidianhong 我也试过SET total.order.partitioner.path=hdfs://node014:9000/tmp/hbase_splits;这种方式,但还是报同样的错误,就搞得纳闷了,我们用的是hive0.12+hbase0.96进行整合的,如果不对,请问这个正确的路径应该是怎么写呢?
3 年多之前 回复
heyongluoyao8
heyongluoyao8   2014.05.09 13:26

请问这个问题怎么解决?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!