hbase入库问题!!!求高手帮忙。(hadoop mapreduce)

yangwen_2007 2012-08-14 02:37:06
小弟最近开始接触hbase,最近编写了用mapreduce的入库程序,在eclipse下运行没有问题,但用命令行运行总是提示org.hadoop.hbase.*的类找不到,我再jar包里的MENIFEST.MF文件里已经加入了需要用到的hbase包的classpath。
程序如下:
import java.io.IOException;

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.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MasterNotRunningException;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.mapreduce.lib.output.NullOutputFormat;


public class cdrDump {

public static class cdrMapper extends Mapper<Object,Text,NullWritable,NullWritable>
{
public static Configuration conf;
Put put = null;
HTable table = null;
private boolean wal = true;
String tableName = "cdrtable";
HTablePool pool = null;
@Override
public void setup(Context context)
{
System.out.println("create cdr table......");
try
{
// conf = context.getConfiguration();
HBaseAdmin admin = new HBaseAdmin(conf);
if(admin.tableExists(tableName))
{
admin.disableTable(tableName);
admin.deleteTable(tableName);
System.out.println("table exists......");
}
HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
tableDescriptor.addFamily(new HColumnDescriptor("cdr"));
// tableDescriptor.addFamily(new HColumnDescriptor("phoneNumber"));
tableDescriptor.addFamily(new HColumnDescriptor("IP"));
tableDescriptor.addFamily(new HColumnDescriptor("IMSI"));
admin.createTable(tableDescriptor);
pool = new HTablePool(conf,1000);
table = (HTable)pool.getTable(tableName);
table.setAutoFlush(false);
// table.setWriteBufferSize(12*1024*1024);
admin.close();
}
catch(MasterNotRunningException e)
{
e.printStackTrace();
}
catch(ZooKeeperConnectionException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
@Override
public void map(Object key,Text value,Context context)throws IOException
{
String[] cutStr = value.toString().split("\t",-1);
// System.out.println(cutStr.length);
try
{
put = new Put(Bytes.toBytes(cutStr[0]));
put.add(Bytes.toBytes("cdr"), null, value.toString().getBytes());
// put.add(Bytes.toBytes("phoneNumber"), null, cutStr[4].getBytes());
put.add(Bytes.toBytes("IP"), null, cutStr[27].getBytes());
put.add(Bytes.toBytes("IMSI"), null, cutStr[6].getBytes());
if(!wal)
{

put.setWriteToWAL(wal);
}
// System.out.println("insert table......");
table.put(put);
}
catch (ArrayIndexOutOfBoundsException e)
{
e.printStackTrace();
}


}
@Override
public void cleanup(Context context)throws IOException
{
table.close();
// pool.putTable(table);
pool.close();
}
}

public static void main(String[] args)throws Exception
{
Configuration conf = HBaseConfiguration.create();
String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
if(otherArgs.length != 1)
{
System.err.println("Usage: cdrDup input");
System.exit(2);
}
Job job = new Job(conf,"cdrdump");
job.setJarByClass(cdrDump.class);
job.setMapperClass(cdrMapper.class);
job.setOutputFormatClass(NullOutputFormat.class);
job.setNumReduceTasks(0);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
long startTime = System.currentTimeMillis();
job.waitForCompletion(true);
long endTime = System.currentTimeMillis();
System.out.println("Time used: " + (endTime - startTime));
System.exit(job.waitForCompletion(true)?0:1);
}
}

命令行运行报错如下:
12/07/29 01:50:22 INFO input.FileInputFormat: Total input paths to process : 1
12/07/29 01:50:22 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
12/07/29 01:50:22 WARN snappy.LoadSnappy: Snappy native library not loaded
12/07/29 01:50:23 INFO mapred.JobClient: Running job: job_201207290035_0001
12/07/29 01:50:24 INFO mapred.JobClient: map 0% reduce 0%
12/07/29 01:50:40 INFO mapred.JobClient: Task Id : attempt_201207290035_0001_m_000000_0, Status : FAILED
Error: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.MasterNotRunningException
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:820)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:865)
at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1093)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

不知道是什么原因,望高手相助,不胜感激!!!
...全文
299 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cranley 2013-01-08
  • 打赏
  • 举报
回复
hbase包没有分发出去。或者没有打包在分发的JAR里面
shihailong123 2012-10-16
  • 打赏
  • 举报
回复
你好,我是向你请教的,我用eclipse客户端往hbase里写数据,持续段时间就中断了,分析是io瓶颈的原因,于是用lzo压缩试试,可是装好lzo后,写数据持续更短的时间就中断了,发现regionserver都挂了,请问你知道为啥吗,谢啦
yangwen_2007 2012-08-14
  • 打赏
  • 举报
回复
我在伪分布式环境测试的,classpath都已添加了必要的jar包,出现这个问题,集群模式下我也测试过也不行,集群下每台机器都有相同的环境,感觉上不缺少classpath和jar包,不过还是感谢您的意见。
jackydai987 2012-08-14
  • 打赏
  • 举报
回复
个人拙见:
master 节点 会把你写好的代码打成jar包,分发到多台机器去执行。如果你想在你的代码中使用别的jar包(这里就是HBase*.jar)需要自己把三方jar包封装到执行的jar包中去。让master帮你提交到多台机器上去执行。

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧