java - Import data from MapReduce to HBase (TableOutputFormat error) -


a trying save data mapreduce job hbase. made script work great on older versions of hadoop (cdh3u4). upgraded newest version (cdh 5.0.2) , script not working.

when run program on newest version, following error:

exception in thread "main" java.lang.runtimeexception: java.io.ioexception: java.lang.reflect.invocationtargetexception         @ org.apache.hadoop.hbase.mapreduce.tableoutputformat.setconf(tableoutputformat.java:211)         @ org.apache.hadoop.util.reflectionutils.setconf(reflectionutils.java:73)         @ org.apache.hadoop.util.reflectionutils.newinstance(reflectionutils.java:133)         @ org.apache.hadoop.mapreduce.jobsubmitter.checkspecs(jobsubmitter.java:455)         @ org.apache.hadoop.mapreduce.jobsubmitter.submitjobinternal(jobsubmitter.java:343)         @ org.apache.hadoop.mapreduce.job$10.run(job.java:1295)         @ org.apache.hadoop.mapreduce.job$10.run(job.java:1292)         @ java.security.accesscontroller.doprivileged(native method)         @ javax.security.auth.subject.doas(subject.java:415)         @ org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation.java:1548)         @ org.apache.hadoop.mapreduce.job.submit(job.java:1292)         @ org.apache.hadoop.mapreduce.job.waitforcompletion(job.java:1313)         @ com.nrholding.t0_mr.main.eloghbaseimport.main(eloghbaseimport.java:89)         @ sun.reflect.nativemethodaccessorimpl.invoke0(native method)         @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)         @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)         @ java.lang.reflect.method.invoke(method.java:606)         @ org.apache.hadoop.util.runjar.main(runjar.java:212) caused by: java.io.ioexception: java.lang.reflect.invocationtargetexception         @ org.apache.hadoop.hbase.client.hconnectionmanager.createconnection(hconnectionmanager.java:389)         @ org.apache.hadoop.hbase.client.hconnectionmanager.createconnection(hconnectionmanager.java:366)         @ org.apache.hadoop.hbase.client.hconnectionmanager.getconnection(hconnectionmanager.java:247)         @ org.apache.hadoop.hbase.client.htable.<init>(htable.java:188)         @ org.apache.hadoop.hbase.client.htable.<init>(htable.java:150)         @ org.apache.hadoop.hbase.mapreduce.tableoutputformat.setconf(tableoutputformat.java:206)         ... 17 more caused by: java.lang.reflect.invocationtargetexception         @ sun.reflect.nativeconstructoraccessorimpl.newinstance0(native method)         @ sun.reflect.nativeconstructoraccessorimpl.newinstance(nativeconstructoraccessorimpl.java:57)         @ sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45)         @ java.lang.reflect.constructor.newinstance(constructor.java:526)         @ org.apache.hadoop.hbase.client.hconnectionmanager.createconnection(hconnectionmanager.java:387)         ... 22 more caused by: java.lang.noclassdeffounderror: org/cloudera/htrace/trace         @ org.apache.hadoop.hbase.zookeeper.recoverablezookeeper.exists(recoverablezookeeper.java:195)         @ org.apache.hadoop.hbase.zookeeper.zkutil.checkexists(zkutil.java:479)         @ org.apache.hadoop.hbase.zookeeper.zkclusterid.readclusteridznode(zkclusterid.java:65)         @ org.apache.hadoop.hbase.client.zookeeperregistry.getclusterid(zookeeperregistry.java:83)         @ org.apache.hadoop.hbase.client.hconnectionmanager$hconnectionimplementation.retrieveclusterid(hconnectionmanager.java:801)         @ org.apache.hadoop.hbase.client.hconnectionmanager$hconnectionimplementation.<init>(hconnectionmanager.java:633)         ... 27 more caused by: java.lang.classnotfoundexception: org.cloudera.htrace.trace         @ java.net.urlclassloader$1.run(urlclassloader.java:366)         @ java.net.urlclassloader$1.run(urlclassloader.java:355)         @ java.security.accesscontroller.doprivileged(native method)         @ java.net.urlclassloader.findclass(urlclassloader.java:354)         @ java.lang.classloader.loadclass(classloader.java:424)         @ java.lang.classloader.loadclass(classloader.java:357)         ... 33 more 

it seams problem in tableoutputformat. checked that:

  • proper library in libpath.
  • zookeeper quorum , zookeeper port set in hbase-site.xml
  • table wp_json exists in hbase

here code makes problems:

public static void main(string args[]) throws exception {      configuration conf = new configuration();     conf.set("hbase.zookeeper.quorum", "zookeeper_server1,zookeeper_server2,zookeeper_server3");     conf.set(tableoutputformat.output_table, "wp_json");      string[] otherargs = new genericoptionsparser(conf, args).getremainingargs();     string input = otherargs[0];     job job = job.getinstance(conf, "eloghbaseimport");     // input text files in hdfs     fileinputformat.addinputpath(job, new path(input));     job.setjarbyclass(eloghbaseimport.class);     job.setmapperclass(map.class);     job.setnumreducetasks(0);     job.setoutputformatclass(tableoutputformat.class);     job.waitforcompletion(true); } 

when use nulloutputformat, works great nothing written hbase.

the part of tableoutputformat responsible error here:

163   /** 164    * returns output committer. 165    * 166    * @param context  current context. 167    * @return committer. 168    * @throws ioexception when creating committer fails. 169    * @throws interruptedexception when job aborted. 170    * @see org.apache.hadoop.mapreduce.outputformat#getoutputcommitter(org.apache.hadoop.mapreduce.taskattemptcontext) 171    */ 172   @override 173   public outputcommitter getoutputcommitter(taskattemptcontext context) 174   throws ioexception, interruptedexception { 175     return new tableoutputcommitter(); 176   } 177  178   public configuration getconf() { 179     return conf; 180   } 181  182   @override 183   public void setconf(configuration otherconf) { 184     this.conf = hbaseconfiguration.create(otherconf); 185  186     string tablename = this.conf.get(output_table); 187     if(tablename == null || tablename.length() <= 0) { 188       throw new illegalargumentexception("must specify table name"); 189     } 190  191     string address = this.conf.get(quorum_address); 192     int zkclientport = this.conf.getint(quorum_port, 0); 193     string serverclass = this.conf.get(region_server_class); 194     string serverimpl = this.conf.get(region_server_impl); 195  196     try { 197       if (address != null) { 198         zkutil.applyclusterkeytoconf(this.conf, address); 199       } 200       if (serverclass != null) { 201         this.conf.set(hconstants.region_server_impl, serverimpl); 202       } 203       if (zkclientport != 0) { 204         this.conf.setint(hconstants.zookeeper_client_port, zkclientport); 205       } 206       this.table = new htable(this.conf, tablename); 207       this.table.setautoflush(false, true); 208       log.info("created table instance "  + tablename); 209     } catch(ioexception e) { 210       log.error(e); 211       throw new runtimeexception(e); 212     } 213   } 

error caused message:

caused by: java.lang.classnotfoundexception: org.cloudera.htrace.trace*

probably, missing jar in classpath. class mentioned above may indirectly referred code. try put jar containing class in classpath.

hope helps!!!


Comments

Popular posts from this blog

Linux vanilla kernel on QEMU and networking with eth0 -

rdbms - what exactly the undo information lives in oracle? -

clojure - 'get' replacement that throws exception on not found? -