2012-09-06 6 views
0

저는 Hbase에 처음 왔으므로 파일의 데이터를 Htable로로드하는 몇 가지 예제를 시도하고 있습니다. 나는 이클립스에서 항아리를 만든 항아리와 HDFS 디렉토리에있는 입력 파일을 저장하고, 단지 실행 시작 :ClassNotFound HbaseMapreduce 프로그램을 실행할 때 예외가 발생했습니다.

:

hadoop jar $HADOOP_HOME/CSV2HBASE.jar /home/hbaseuser/input.csv csv_table 

그때 내가

Warning: $HADOOP_HOME is deprecated. 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration 
     at com.stratapps.hbase.CSV2HBase.main(CSV2HBase.java:67) 
     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:601) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:156) 
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.HBaseConfiguration 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
     ... 6 more 

내 입력 파일이 Exeption로 실행을

row1 f1 cl1 0.12 
row2 f1 cl1 0.35 
row3 f1 cl1 1.58 
row4 f1 cl1 2.73 
row5 f1 cl1 0.93 

그리고 클래스 :

import java.io.IOException; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.hbase.HBaseConfiguration; 
import org.apache.hadoop.hbase.client.Put; 
import org.apache.hadoop.hbase.io.ImmutableBytesWritable; 
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil; 
import org.apache.hadoop.hbase.util.Bytes; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.Mapper; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; 
import org.apache.hadoop.util.GenericOptionsParser; 
public class CSV2HBase { 

    private static final String NAME = "CSV2HBase"; 

    static class Uploader extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> { 

    @Override 
    public void map(LongWritable key, Text line, Context context)throws IOException 
    { 

     String [] values = line.toString().split(","); 
     if(values.length != 4) { 
    System.out.println("err values.length!=4 len:"+values.length); 
    System.out.println("input string is:"+line); 
     return; 
     } 
     // Extract each value 
     byte [] row = Bytes.toBytes(values[0]); 
     byte [] family = Bytes.toBytes(values[1]); 
     byte [] qualifier = Bytes.toBytes(values[2]); 
     byte [] value = Bytes.toBytes(values[3]); 
     Put put = new Put(row); 
     put.add(family, qualifier, value); 

     try { 
     context.write(new ImmutableBytesWritable(row), put); 
     } catch (InterruptedException e) { 
     e.printStackTrace(); 
     } 


    } 
    } 
    public static Job configureJob(Configuration conf, String [] args) 
    throws IOException { 
    Path inputPath = new Path(args[0]); 
    String tableName = args[1]; 
    Job job = new Job(conf, NAME + "_" + tableName); 
    job.setJarByClass(Uploader.class); 
    FileInputFormat.setInputPaths(job, inputPath); 
    job.setInputFormatClass(TextInputFormat.class); 
    job.setMapperClass(Uploader.class); 

    TableMapReduceUtil.initTableReducerJob(tableName, null, job); 
    job.setNumReduceTasks(0); 
    return job; 
    } 

    public static void main(String[] args) throws Exception { 
    Configuration conf = HBaseConfiguration.create(); 
    conf.set("hbase.zookeeper.quorum","172.16.17.55"); 
    conf.set("hbase.zookeeper.property.clientPort","2181"); 
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); 
    if(otherArgs.length != 2) { 
     System.err.println("Wrong number of arguments: " + otherArgs.length); 
     System.err.println("Usage: " + NAME + " <input> <tablename>"); 
     System.exit(-1); 
    } 
    Job job = configureJob(conf, otherArgs); 
    System.exit(job.waitForCompletion(true) ? 0 : 1); 
    } 
} 

제발 내가 직면 한 내 문제를 해결할 수 있습니다. $ {HADOOP_HOME}에서도 jar 파일을 kept하지만 여전히 classnotfound 예외로 실행 중입니다.

답변

0

이러한 클래스를 CLASSPATH에 추가하거나 내 보내면 Eclipse를 사용하여 JAR 파일로 패키지화해야합니다.

+0

jar 파일을 내보내고 생성 할 때 classpath에 추가했으나 여전히 오류가 발생했습니다 –

+0

(Eclipse 버전에 따라 다름) Eclipse를 실행 가능한 JAR 파일로 내보낼 때 라이브러리 처리에서 어떤 옵션을 선택합니까? – Charles

+0

추출 생성 된 jars에 필요한 라이브러리를 선택했습니다. –

관련 문제