在执行BulkLoad的时候报了如下的错误:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Exception in thread "main" java.lang.IllegalArgumentException: Can not create a Path from a null string at org.apache.hadoop.fs.Path.checkPathArg(Path.java:122) at org.apache.hadoop.fs.Path.<init>(Path.java:134) at org.apache.hadoop.fs.Path.<init>(Path.java:88) at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configurePartitioner(HFileOutputFormat2.java:591) at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:440) at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:405) at org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:386) at com.talkingdata.campaign.dev.hbase.BulkDriver.run(BulkDriver.java:42) at com.talkingdata.campaign.dev.hbase.BulkDriver.main(BulkDriver.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136) |
使用的HBase版本是1.1.2.
从错误日志中可以看到导致这个问题的是HFileOutputFormat2类中的这一行:
1 |
Path partitionsPath = new Path(conf.get("hbase.fs.tmp.dir"), "partitions_" + UUID.randomUUID()); |
关键是“hbase.fs.tmp.dir”这个配置信息。注意这个配置不是“hbase.tmp.dir”。“hbase.tmp.dir”是本地文件系统上的一个目录,“hbase.fs.tmp.dir”是HDFS上的一个目录。
在hbase-default.xml中找到的对应配置信息如下:
1 2 3 4 5 6 |
<property > <name>hbase.fs.tmp.dir</name> <value>/user/${user.name}/hbase-staging</value> <description>A staging directory in default file system (HDFS) for keeping temporary data. </description> </property> |
问题在于这个配置对应的目录并不存在,根据一些建议手动设置了下这个配置:
1 |
conf.set("hbase.fs.tmp.dir", "/tmp/hbase-staging"); |
就这样,问题修复了。
下面是一些关于这个问题的讨论:
Set default value for hbase.fs.tmp.dir rather than fully depend on hbase-default.xml
Use HDFS for HFileOutputFormat2 partitioner’s path
############
发表评论