您的位置:首页 > 编程语言 > Go语言

文本数据导入HBASE库找不到类com/google/common/collect/Multimap

2013-12-15 21:00 399 查看
文本数据导入HBASE库找不到类com/google/common/collect/Multimap

打算将文本文件导入HBASE库,在运行命令的时候找不到类com/google/common/collect/Multima

[hadoop@hadoop1 lib]$ hadoop jar /home/hadoop/hbase-0.94.6/hbase-0.94.6.jar importtsv

Warning: $HADOOP_HOME is deprecated.

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/collect/Multimap

at org.apache.hadoop.hbase.mapreduce.Driver.main(Driver.java:43)

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: com.google.common.collect.Multimap

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 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)

at java.lang.ClassLoader.loadClass(ClassLoader.java:356)

... 6 more

后来将$HBASE_HOME/lib下的包guava-11.0.2.jar 复制到 $HADOOP_HOME/lib 下, 问题搞定。

[hadoop@hadoop1 lib]$ pwd

/home/hadoop/hadoop-1.0.4/lib

[hadoop@hadoop1 lib]$ cp /home/hadoop/hbase-0.94.6/lib/guava-11.0.2.jar .

[hadoop@hadoop1 lib]$ hadoop jar /home/hadoop/hbase-0.94.6/hbase-0.94.6.jar importtsv

Warning: $HADOOP_HOME is deprecated.

ERROR: Wrong number of arguments: 0

Usage: importtsv -Dimporttsv.columns=a,b,c <tablename> <inputdir>

Imports the given input directory of TSV data into the specified table.

The column names of the TSV data must be specified using the -Dimporttsv.columns

option. This option takes the form of comma-separated column names, where each

column name is either a simple column family, or a columnfamily:qualifier. The special

column name HBASE_ROW_KEY is used to designate that this column should be used

as the row key for each imported record. You must specify exactly one column

to be the row key, and you must specify a column name for every column that exists in the

input data. Another special column HBASE_TS_KEY designates that this column should be

used as timestamp for each record. Unlike HBASE_ROW_KEY, HBASE_TS_KEY is optional.

You must specify atmost one column as timestamp key for each imported record.

Record with invalid timestamps (blank, non-numeric) will be treated as bad record.

Note: if you use this option, then 'importtsv.timestamp' option will be ignored.

By default importtsv will load data directly into HBase. To instead generate

HFiles of data to prepare for a bulk data load, pass the option:

-Dimporttsv.bulk.output=/path/for/output

Note: if you do not use this option, then the target table must already exist in HBase

Other options that may be specified with -D include:

-Dimporttsv.skip.bad.lines=false - fail if encountering an invalid line

'-Dimporttsv.separator=|' - eg separate on pipes instead of tabs

-Dimporttsv.timestamp=currentTimeAsLong - use the specified timestamp for the import

-Dimporttsv.mapper.class=my.Mapper - A user-defined Mapper to use instead of org.apache.hadoop.hbase.mapreduce.TsvImporterMapper

For performance consider the following options:

-Dmapred.map.tasks.speculative.execution=false

-Dmapred.reduce.tasks.speculative.execution=false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: