转载

hbase.fs.tmp.dir 导致的错误

在执行BulkLoad的时候报了如下的错误:

Exceptionin thread "main" java.lang.IllegalArgumentException: Cannot create a Pathfrom a null string
 atorg.apache.hadoop.fs.Path.checkPathArg(Path.java:122)
 atorg.apache.hadoop.fs.Path.<init>(Path.java:134)
 atorg.apache.hadoop.fs.Path.<init>(Path.java:88)
 atorg.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configurePartitioner(HFileOutputFormat2.java:591)
 atorg.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:440)
 atorg.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:405)
 atorg.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.configureIncrementalLoad(HFileOutputFormat2.java:386)
 atcom.talkingdata.campaign.dev.hbase.BulkDriver.run(BulkDriver.java:42)
 atcom.talkingdata.campaign.dev.hbase.BulkDriver.main(BulkDriver.java:60)
 atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
 atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 atjava.lang.reflect.Method.invoke(Method.java:606)
 atorg.apache.hadoop.util.RunJar.run(RunJar.java:221)
 atorg.apache.hadoop.util.RunJar.main(RunJar.java:136)

使用的HBase版本是1.1.2.

从错误日志中可以看到导致这个问题的是HFileOutputFormat2类中的这一行:

PathpartitionsPath = 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中找到的对应配置信息如下:

  <property >
    <name>hbase.fs.tmp.dir</name>
    <value>/user/${user.name}/hbase-staging</value>
    <description>A stagingdirectoryin default filesystem (HDFS) for keepingtemporarydata.
    </description>
  </property>

问题在于这个配置对应的目录并不存在,根据一些建议手动设置了下这个配置:

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

############

原文  http://www.zhyea.com/2017/02/08/hbase-hbase-fs-tmp-dir.html
正文到此结束
Loading...