使用MR读取HBases数据进行计算,然后输出到HDFS,在输出到HDFS时遇到了路径问题,让我纠结了好久,今天终于理解解决了,记录一下,希望对遇到同样问题的人有所帮助。
原始代码如下,出现了下面的异常,开始我百思不解,HDFS的路径怎么会和window本地路径有冲突呢?怎么会读取的是本地的路径?最后从网上查找资料和HBase源码发现HBSAE的TableMapReduceUtil.initTableMapperJob方法默认的路径是本地,所以只要把它改一下就可以了,解决方法在最下面,只需要将原来的true改为false即可。
public class Origin_job {
public static void main(String[] args) throws ClassNotFoundException, InterruptedException, IOException {
long starttime = System.currentTimeMillis();
String tablename = "test";
Path outpath = new Path("/user/sky/output/");
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum","node1");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("dfs.permissions.enabled", "false");
conf.set("fs.defaultFS", "hdfs://node1:8020");
conf.set("yarn.resourcemanager.hostname", "node1");
FileSystem fs =FileSystem.get(conf);
Job job =Job.getInstance(conf);//实例化一个Job
job.setJobName("ReadHbase");//Job任务名称
job.setJarByCla