- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试通过独立的HBase(0.94.11)执行MR代码。
我已经阅读了HBase api,并修改了MR代码以读取数据并向HBase表写入结果,并且在reduce阶段遇到异常。提供部分代码(不包括业务逻辑)
SentimentCalculatorHBase-工具/主类:
package com.hbase.mapreduce;
import java.util.Calendar;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableInputFormat;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.hbase.mapreduce.TableOutputFormat;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
public class SentimentCalculatorHBase extends Configured implements Tool {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
SentimentCalculatorHBase sentimentCalculatorHBase = new SentimentCalculatorHBase();
ToolRunner.run(sentimentCalculatorHBase, args);
}
@Override
public int run(String[] arg0) throws Exception {
// TODO Auto-generated method stub
System.out
.println("***********************Configuration started***********************");
Configuration configuration = getConf();
System.out.println("Conf: " + configuration);
Job sentiCalcJob = new Job(configuration, "HBase SentimentCalculation");
sentiCalcJob.setJarByClass(SentimentCalculatorHBase.class);
sentiCalcJob.setMapperClass(SentimentCalculationHBaseMapper.class);
sentiCalcJob.setCombinerClass(SentimentCalculationHBaseReducer.class);
sentiCalcJob.setReducerClass(SentimentCalculationHBaseReducer.class);
sentiCalcJob.setInputFormatClass(TableInputFormat.class);
sentiCalcJob.setOutputFormatClass(TableOutputFormat.class);
/* Start : Added out of exasperation! */
sentiCalcJob.setOutputKeyClass(ImmutableBytesWritable.class);
sentiCalcJob.setOutputValueClass(Put.class);
/* End : Added out of exasperation! */
Scan twitterdataUserScan = new Scan();
twitterdataUserScan.setCaching(500);
twitterdataUserScan.addColumn("word_attributes".getBytes(),
"TwitterText".getBytes());
TableMapReduceUtil.initTableMapperJob("twitterdata_user",
twitterdataUserScan, SentimentCalculationHBaseMapper.class,
Text.class, Text.class, sentiCalcJob);
TableMapReduceUtil.initTableReducerJob("sentiment_output",
SentimentCalculationHBaseReducer.class, sentiCalcJob);
Calendar beforeJob = Calendar.getInstance();
System.out.println("Job Time started---------------- "
+ beforeJob.getTime());
boolean check = sentiCalcJob.waitForCompletion(true);
if (check == true) {
System.out
.println("*******************Job completed- SentimentCalculation********************");
}
Calendar afterJob = Calendar.getInstance();
System.out
.println("Job Time ended SentimentCalculation---------------- "
+ afterJob.getTime());
return 0;
}
}
public class SentimentCalculationHBaseMapper extends TableMapper<Text, Text> {
private Text sentenseOriginal = new Text();
private Text sentenseParsed = new Text();
@Override
protected void map(
ImmutableBytesWritable key,
Result value,
org.apache.hadoop.mapreduce.Mapper<ImmutableBytesWritable, Result, Text, Text>.Context context)
throws IOException, InterruptedException {
context.write(this.sentenseOriginal, this.sentenseParsed);
}
}
public class SentimentCalculationHBaseReducer extends
TableReducer<Text, Text, ImmutableBytesWritable> {
@Override
protected void reduce(
Text key,
java.lang.Iterable<Text> values,
org.apache.hadoop.mapreduce.Reducer<Text, Text, ImmutableBytesWritable, org.apache.hadoop.io.Writable>.Context context)
throws IOException, InterruptedException {
Double mdblSentimentOverall = 0.0;
String d3 = key + "@12321@" + s11.replaceFirst(":::", "")
+ "@12321@" + mstpositiveWords + "@12321@"
+ mstnegativeWords + "@12321@" + mstneutralWords;
System.out.println("d3 : " + d3 + " , mdblSentimentOverall : "
+ mdblSentimentOverall);
Put put = new Put(d3.getBytes());
put.add(Bytes.toBytes("word_attributes"),
Bytes.toBytes("mdblSentimentOverall"),
Bytes.toBytes(mdblSentimentOverall));
System.out.println("Context is " + context);
context.write(new ImmutableBytesWritable(d3.getBytes()), put);
}
}
13/09/05 16:16:17 INFO mapred.JobClient: map 0% reduce 0%
13/09/05 16:23:31 INFO mapred.JobClient: Task Id : attempt_201309051437_0005_m_000000_0, Status : FAILED
java.io.IOException: wrong key class: class org.apache.hadoop.hbase.io.ImmutableBytesWritable is not class org.apache.hadoop.io.Text
at org.apache.hadoop.mapred.IFile$Writer.append(IFile.java:164)
at org.apache.hadoop.mapred.Task$CombineOutputCollector.collect(Task.java:1168)
at org.apache.hadoop.mapred.Task$NewCombinerRunner$OutputConverter.write(Task.java:1492)
at org.apache.hadoop.mapreduce.TaskInputOutputContext.write(TaskInputOutputContext.java:80)
at com.hbase.mapreduce.SentimentCalculationHBaseReducer.reduce(SentimentCalculationHBaseReducer.java:199)
at com.hbase.mapreduce.SentimentCalculationHBaseReducer.reduce(SentimentCalculationHBaseReducer.java:1)
at org.apache.hadoop.mapreduce.Reducer.run(Reducer.java:176)
at org.apache.hadoop.mapred.Task$NewCombinerRunner.combine(Task.java:1513)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.sortAndSpill(MapTask.java:1436)
at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.flush(MapTask.java:1298)
at org.apache.hadoop.mapred.MapTask$NewOutputCollector.close(MapTask.java:699)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:766)
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:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1149)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
public class SentimentCalculationHBaseReducer extends
TableReducer<Text, Text, Text>{
@Override
protected void reduce(
Text key,
java.lang.Iterable<Text> values,
org.apache.hadoop.mapreduce.Reducer<Text, Text, Text, org.apache.hadoop.io.Writable>.Context context)
throws IOException, InterruptedException {
context.write(new Text(d3.getBytes()), put);
}
13/09/05 15:55:20 INFO mapred.JobClient: Task Id : attempt_201309051437_0004_m_000000_0, Status : FAILED
java.io.IOException: wrong value class: class org.apache.hadoop.hbase.client.Put is not class org.apache.hadoop.io.Text
最佳答案
仅作记录,对于任何好奇的人,我都有完全相同的问题,我的解决方案是删除定义合并器功能的以下行:
sentiCalcJob.setCombinerClass(SentimentCalculationHBaseReducer.class);
关于hadoop - HBase MR-键/值不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628542/
发出时Delete对于 hbase,我知道它不会立即删除数据。但是什么时候删除数据,我的意思是,物理上? 最佳答案 当您向 HBase 写入内容时,它会存储在内存存储 (RAM) 中,然后再写入磁盘。
同一行的列族属于同一个 RegionServer。 那么,这里的问题是一个 RegionServer 会在不同的机器上存储不同的列族吗? 最佳答案 不一定,但在某些时候它会。这是基本 HBase 架构
如果我想插入表格: row | fam:qualifier | timestamp | value 1 | foo:bar | 12345 | 2 1 | foo:bar | 12346 | 3 1
有时我想退出我在 HBase shell 中运行的命令,例如扫描操作通常需要太多时间。 所以我想停止运行这个命令,但我不想退出 HBase shell。 我常用的停止运行命令的方式,我使用了Ctrl+
有没有办法设置 Hbase 以便我们可以在同一个集群中创建多个数据库? 最佳答案 只是为了刷新主题:http://hbase.apache.org/book.html#namespace 5.3.1.
怎么看version的 hbase我在用? 你能下命令吗? 最佳答案 hbase version命令行界面中的命令给出了 version的 hbase正在使用中。 以下是来自 Cloudera 的两个
高级问题: HBase 是否对所有分布(因此不是实现的工件)通用的每行施加了最大大小,无论是在 方面吗?字节存储 或在 方面细胞数 ? 如果是这样: 限制是什么? 极限存在的原因是什么? 限制在哪里记
假设,假设我在数据仓库设置中有一个星型模式。 有一个非常非常长的事实表(想想几十亿到几万亿行)和几个低基数维度表(想想 100 个维度表)。每个事实表外键 指向一个维度表的主键是位图索引的。每个维度表
版本:Hadoop: 2.0.0-cdh4.3.1 HBase: 0.94.6-cdh4.3.1 我正在运行 cloudera quick start vm,这是我的小型远程 HBase Java 客
我正在尝试以完全分布式模式配置 HBase。 (使用 Ubuntu 12.04,Apache Hadoop 2.2(以伪模式运行,HBase 版本 0.98) 以下是我的 bashrc 设置: exp
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我想知道如何正确配置 hbase.zookeeper.quorum 以将 zookeeper 实例指向集群模式。 最佳答案 hbase.zookeeper.quorum 属性是运行 ZooKeeper
我正在尝试对位于 Hbase 中的两个表进行映射连接。我的目的是在hashmap中保留小表的记录并与大表进行比较,一旦匹配,再次将记录写入hbase中的表中。我使用 Mapper 和 Reducer
我正在尝试编写一个程序来连接到 HBase。但是当我执行以下命令时HBaseConfiguration.create();我收到以下错误:. "hbase-default.xml 文件似乎是旧版本的
基于HBase documentation ,再次遵循 Google BigTable 论文的引用,据说这些行是按行键的字典顺序存储的。 很明显,当我们在 rowkey 中有一个字符串或者如果我们将一
我有一个 hbase 表,其中的行键如 row1、row2、row3 .... 和 rowN,我想要的是获取行键从 row100 到 row200 的行,如何编写查询子句或将 hbase 表设计为让查
我正在尝试创建命名空间,但出现类似下面给出的错误 hbase(main):031:0> create namespace 'Aniruddha'
我发现为以下要求建模 HBase 表有困难。 我有一个表“商店”,它存储了商店的详细信息(必胜客)。 我有一个表格“订单”,其中包含交易摘要(总交易金额等...)。 我有另一个表“Order_Item
谁能告诉我如果在不首先禁用表的情况下使用“alter”命令可能影响表结构的可能影响? 据我所知,禁用表意味着关闭与表的所有连接。如果我在不禁用表的情况下使用 alter,可能会发生什么异常情况? 我正
我无法将表从 HBase 导出到 HDFS。下面是错误跟踪。它是相当大的尺寸。还有其他方法可以导出吗? 我使用以下命令导出。我增加了 rpc 超时,但工作仍然失败。 sudo -u hdfs hbas
我是一名优秀的程序员,十分优秀!