我正在编写Hadoop/HBase作业.我需要将Java String转换为字节数组.Java String.getBytes()和Hadoop 之间有什么区别Bytes.toBytes()吗?
我有一个纯文本文件,可能有数百万行需要自定义解析,我想尽快加载到HBase表中(使用Hadoop或HBase Java客户端).
我目前的解决方案是基于没有Reduce部分的MapReduce作业.我FileInputFormat用来读取文本文件,以便每行传递给map我的Mapper类的方法.此时,该行被解析以形成一个Put写入的对象context.然后,TableOutputFormat获取Put对象并将其插入表中.
该解决方案产生的平均插入速率为每秒1,000行,低于我的预期.我的HBase设置在单个服务器上处于伪分布式模式.
一个有趣的事情是,在插入1,000,000行时,会产生25个Mappers(任务),但它们会连续运行(一个接一个); 这是正常的吗?
这是我当前解决方案的代码:
public static class CustomMap extends Mapper<LongWritable, Text, ImmutableBytesWritable, Put> {
protected void map(LongWritable key, Text value, Context context) throws IOException {
Map<String, String> parsedLine = parseLine(value.toString());
Put row = new Put(Bytes.toBytes(parsedLine.get(keys[1])));
for (String currentKey : parsedLine.keySet()) {
row.add(Bytes.toBytes(currentKey),Bytes.toBytes(currentKey),Bytes.toBytes(parsedLine.get(currentKey)));
}
try {
context.write(new ImmutableBytesWritable(Bytes.toBytes(parsedLine.get(keys[1]))), row);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} …Run Code Online (Sandbox Code Playgroud) 我创建了一个表
create 'tablename', 'columnfamily1'
Run Code Online (Sandbox Code Playgroud)
现在可以添加另一个列系列'columnfamily2'吗?方法是什么?
我想获得有关Web UI中显示的表区域的相同信息(即区域名称,区域服务器,开始/结束键,位置),但是通过hbase shell.
(UI是片状/慢速,而且我想将此信息作为脚本的一部分进行处理.)
经过大量的谷歌搜索,我无法找到如何,这让我感到非常惊讶.版本是1.0.0.-cdh5.4.0
最近一直在阅读Hadoop和HBase,并且遇到了这个术语 -
HBase是一个开源,分布式,稀疏,面向列的存储......
稀疏是什么意思?它与稀疏矩阵有关吗?我猜它是可以有效存储的数据类型的属性,因此,想要了解更多.
如果有人对选择HBase作为OpenTSDB的数据存储引擎有所了解,我真的很感激吗?
还考虑了其他选择,例如Whisper(Graphite front-end + Carbon persistence)?
像HBase这样的面向列的数据库如何成为时间序列数据的更好选择?
我只是想知道hbase,cassandra,couchdb和monogodb之间是否存在根本区别?换句话说,他们是否都在完全相同的市场中竞争,并试图解决完全相同的问题.或者它们在不同情况下最适合?
这一切都是问题所在,我应该选择什么时候.品味问题?
谢谢,
费德里科
我们正在尝试使用HBase来存储时间序列数据.我们目前的模型将时间序列存储为单元格中的版本.这意味着单元可能最终存储数百万个版本,并且此时间序列上的查询将使用HBase中 Get类上可用的setTimeRange方法检索一系列版本.
例如
{
"row1" : {
"columnFamily1" : {
"column1" : {
1 : "1",
2 : "2"
},
"column2" : {
1 : "1"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是在HBase中存储时间序列数据的合理模型吗?
将数据存储在多列中的备用模型(可以跨列查询)还是更合适的行?
我正在开发一个大型文本分类项目,我们将文本数据(简单消息)存储在HBase中.
我们有两个问题,首先我们想使用HBase作为Mahout分类器的来源,即Bayers和Random Forests.
其次,我们希望能够存储在HBase中生成的模型,而不是使用内存方法(InMemoryBayesDatastore),但随着我们的集合的增长,我们遇到了内存利用率问题,并希望测试HBase作为一种可行的替代方案.
使用带有Mahout的HBase似乎很少有材料浮动,如果可以将它用作潜在的数据源.我在Java中使用Mahout 0.6核心API,它具有InMemory数据存储区.
做一点挖掘我相信那里有一个HBase Bayers数据存储组件 - org.apache.mahout.classifier.bayes.datastore.HBaseBayesDatastore请参见旧版JavaDoc:http://www.jarvana.com/jarvana/view/org/apache/mahout/mahout-core/0.3/mahout -core-0.3-javadoc.jar!/org/apache/mahout/classifier/bayes/datastore/HBaseBayesDatastore.html
但是,看看最新的文档看起来这个功能已经消失了......?https://builds.apache.org/job/Mahout-Quality/javadoc/
我想知道是否仍然可以使用HBase作为Bayers和RandomForests的数据源,这是否有任何先前的用例?
谢谢!
对于hbase表'test_table'的示例,插入的值为:
Row1 - Val1 => t
Row1 - Val2 => t + 3
Row1 - Val3 => t + 5
Row2 - Val1 => t
Row2 - Val2 => t + 3
Row2 - Val3 => t + 5
Run Code Online (Sandbox Code Playgroud)
扫描'test_table'时应返回version = t + 4
Row1 - Val1 => t + 3
Row2 - Val2 => t + 3
Run Code Online (Sandbox Code Playgroud)
如何在HBase中实现基于时间戳的扫描(基于最新可用值小于或等于时间戳)?