在window系统中的MyEclipse开发基于HBase的MapReduce错误集锦
来源:互联网 发布:做淘宝直通车和刷流量 编辑:程序博客网 时间:2024/05/22 16:54
在windows10中的MyEclipse10上开发基于HBase的MapReduce,运行时报如下错误:java.lang.RuntimeException: Error while running command to get file permissions : java.io.IOException: Cannot run program "ls": CreateProcess error=2,
在网上搜了好多文章,解决方法:
把Linux上面的hbase-site.xml复制到工程中(即src下面)并加入:
<property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
再次运行出现了第二种错误:
java.lang.ClassNotFoundException: org.apache.hadoop.hbase.mapreduce.TableOutputFormat
解决方法:在hadoop-env.sh中加上
export HBASE_HOME=/home/lvyuan/hbase
export HADOOP_CLASSPATH=$HBASE_HOME/hbase-0.94.6.jar:$HBASE_HOME/hbase-0.94.6-tests.jar:$HBASE_HOME/conf:$HBASE_HOME/lib/zookeeper-3.4.5.jar:$HBASE_HOME/lib/protobuf-java-2.4.0a.jar
需要注意的是:如果你是真集群分布式,有多台虚拟机,那么每台都要修改;另外如果不加$HBASE_HOME/lib/protobuf-java-2.4.0a.jar,会报这个错java.lang.ClassNotFoundException:com.google.protobuf.Message
再次运行出现了第三种错误:
java.lang.ClassNotFoundException:Hbase$MyMapper
意思就是找不到mapper类,解决方法:去掉src下面的hbase-site.xml中的
<property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
,去掉以后,改为在java代码中加入这一行,config.set("mapred.job.tracker", "master:9001");//这句非常关键,<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
然后运行成功
下面贴上我的完整代码
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.mapreduce.TableReducer;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
/**
* 基于Hbase的WordCount
* 通过Mr操作Hbase的“word”表,对“content:info”中的短文做词频统计,并将统计结果写入“stat”表的“content:info”中,行键为单词
* @author
*
*/
public class HBaseMr {
static Configuration config=null;
static{
config=HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum","master,slave1,slave3");//这里忘了写master
config.set("hbase.zookeeper.property.clientPort","2181");
config.set("mapred.job.tracker", "master:9001");//这句非常关键
}
public static final String tableName="word";
public static final String colf="content";
public static final String col="info";
public static final String tableName2="stat";
public static class MyMapper extends TableMapper<Text,IntWritable>{
private final static IntWritable one=new IntWritable(1);
private Text word=new Text();
@Override
protected void map(ImmutableBytesWritable key, Result value,
Context context) throws IOException, InterruptedException {
String words=Bytes.toString(value.getValue(Bytes.toBytes(colf),Bytes.toBytes(col)));
String itr[]=words.toString().split(" ");
for(int i=0;i<itr.length;i++){
word.set(itr[i]);
context.write(word, one);
}
}
}
public static class MyReducer extends TableReducer<Text,IntWritable,ImmutableBytesWritable>{
@Override
protected void reduce(Text key, Iterable<IntWritable> values,Context context)
throws IOException, InterruptedException {
int sum=0;
for(IntWritable val:values){
sum+=val.get();
}
Put put=new Put(Bytes.toBytes(key.toString()));
put.add(Bytes.toBytes(colf), Bytes.toBytes(col), Bytes.toBytes(String.valueOf(sum)));
context.write(new ImmutableBytesWritable(Bytes.toBytes(key.toString())),put);
}
}
public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
Job job=new Job(config,"HBaseMr");
job.setJarByClass(HBaseMr.class);
Scan scan=new Scan();
//指定要查询的列族
scan.addColumn(Bytes.toBytes(colf), Bytes.toBytes(col));
//指定Mapper读取的表为word
TableMapReduceUtil.initTableMapperJob(tableName, scan, MyMapper.class,Text.class,IntWritable.class, job);
//指定Reducer写入的表为stat
TableMapReduceUtil.initTableReducerJob(tableName2, MyReducer.class, job);
System.exit(job.waitForCompletion(true)?0:1);
}
}
2 0
- 在window系统中的MyEclipse开发基于HBase的MapReduce错误集锦
- 基于MapReduce的HBase开发
- 基于MapReduce的HBase开发
- 基于MapReduce的HBase开发
- 基于MapReduce的HBase开发(续)
- 基于MapReduce的HBase开发(续)
- (转)基于MapReduce的HBase开发
- (转)基于MapReduce的HBase开发(续)
- Hbase基于Mapreduce的编程
- 在MyEclipse上运行MapReduce发生错误
- Hadoop应用开发--基于MapReduce推荐系统的实现
- Hbase在eclipse中的编译(window环境)
- hbase错误集锦
- 基于HBase Hadoop 分布式集群环境下的MapReduce程序开发
- 基于eclipse开发hadoop2中的MapReduce
- 基于xampp的Tomcat在MyEclipse中的配置
- 基于hadoop0.20.2的mapreduce结果存入Hbase
- MyEclipse 开发 SSH 应用中的两个常见错误的解决方法
- 城市检索并展示图片
- 看代码,学strings包
- while (*p) p++; while (*++p) ; while (*p++)三种循环比较
- 51nod 1298 圆与三角形
- 51nod1027 大数乘法
- 在window系统中的MyEclipse开发基于HBase的MapReduce错误集锦
- react中点击事件简介
- 插入排序
- NOIP 2015 [D2 T3]运输计划
- 浅谈均值、方差、标准差、协方差的概念及意义
- HDU-3966-Aragorn's Story(树链剖分)
- HDU 1058 DP
- 图解单链表逆序
- Hust oj 1608 XianGe的旅途(水题)