我开发了一个基于resteasy框架的Rest api服务。在服务中,我将数据存储到HBase数据库。然后,执行某些条件触发的map / reduce进程(例如插入一条记录)。
在Map类中,我导入了一些第三方库。我不想将这些库打包到war文件中。
TableMapReduceUtil.initTableMapperJob(HBaseInitializer.TABLE_DATA, // input HBase table name
scan, // Scan instance to control CF and attribute selection
LuceneMapper.class, // mapper
null, // mapper output key
null, // mapper output value
job);
FileOutputFormat.setOutputPath(job, new Path("hdfs://master:9000/qin/luceneFile"));
job.submit();
如果将war文件中的所有库打包并将部署到jetty容器中,那么它运行良好。如果没有包装第三部分库到战争,但将这些库上传到hdfs并将它们添加到类路径,它不起作用。如下所示
conf.set("fs.defaultFS","hdfs://master:9000");
FileSystem hdfs = FileSystem.get(conf);
Path classpathFilesDir = new Path("bjlibs");
FileStatus[] jarFiles = hdfs.listStatus(classpathFilesDir);
for (FileStatus fs : jarFiles) {
Path disqualified = new Path(fs.getPath().toUri().getPath());
DistributedCache.addFileToClassPath(disqualified, conf);
}
hdfs.close();
答案 0 :(得分:0)
尝试使用TableMapReduceUtil.addHBaseDependencyJars()