我有一个应用程序需要针对不同级别的聚合进行分析,这就是OLAP工作负载.我也想经常更新我的数据库.
例如,这是我的更新看起来像(架构看起来像:时间,目标,源IP,浏览器 - >访问)
(15:00-1-2-2010, www.stackoverflow.com, 128.19.1.1, safari) --> 105
(15:00-1-2-2010, www.stackoverflow.com, 128.19.2.1, firefox) --> 110
...
(15:00-1-5-2010, www.cnn.com, 128.19.5.1, firefox) --> 110
Run Code Online (Sandbox Code Playgroud)
然后我想问一下上个月从firefox浏览器访问www.stackoverflow.com的访问量是多少.
我知道Vertica系统可以以相对便宜的方式实现这一点(明智的性能和可扩展性,但可能不是成本方面的).我这里有两个问题.
1)是否有可以构建的开源产品来解决这个问题?特别是,蒙德里安系统的运作情况如何?(可扩展性和性能)2)是否有HBase或Hypertable基础解决方案(显然,裸HBase/Hypertable不能这样做)? - 但如果有基于HBase/Hypertable的项目,可扩展性可能不会成为IMO的问题)?
谢谢!
我是hadoop的新手.我有一个MapReduce作业,应该从Hdfs获取输入并将reducer的输出写入Hbase.我没有找到任何好的例子.
这是代码,运行此示例的错误是map中的Type mismatch,期望ImmutableBytesWritable收到IntWritable.
映射器类
public static class AddValueMapper extends Mapper < LongWritable,
Text, ImmutableBytesWritable, IntWritable > {
/* input <key, line number : value, full line>
* output <key, log key : value >*/
public void map(LongWritable key, Text value,
Context context)throws IOException,
InterruptedException {
byte[] key;
int value, pos = 0;
String line = value.toString();
String p1 , p2 = null;
pos = line.indexOf("=");
//Key part
p1 = line.substring(0, pos);
p1 = p1.trim();
key = Bytes.toBytes(p1);
//Value part
p2 …Run Code Online (Sandbox Code Playgroud) 众所周知,hbase具有一个特定行和特定列可以按时间戳记录最近更改值的功能.所以我的问题是,如何使用任何HBase命令列出所有更改的值?我google了很多,但没有找到任何有用的链接.
它主要监视每个受监视设备上以每个受监视值的Timestamp:Value形式传递的数据.它经常通过许多设备和许多监控值收集.
此外,它具有许多这些数据值的奇特特征,这些数据值是在源处导出的,计算会不时变化.这意味着我的数据有效版本化,我需要能够只调用最新版本的计算数据. 注意:这不是旧值被覆盖的版本控制.我只是有时间戳截止,超出该截止时间数据会改变其含义.
在下游,我将对数据进行各种未定义的数据挖掘/机器学习用途.目前尚不清楚这些用途是什么,但很明显我将用Python编写所有下游代码.此外,我们是一个非常小的商店,所以我真的只能处理下游应用程序的设置,维护和接口这么多的复杂性.我们没有那么多人.
我不允许使用SQL RDBMS来存储这些数据,所以我必须找到合适的NoSQL解决方案.这是我到目前为止所发现的:
那么,NoSQL数据库实际上可以帮我解决我的需求呢?它可以是我的清单中的任何东西.我只是想了解哪个平台实际上有代码,而不仅仅是使用模式,这些代码支持我的超级特定,易于理解的需求.我不是问哪一个最好或哪一个更酷.我试图了解哪种技术可以最本地存储和操作此类数据.
有什么想法吗?
HBase可以使用HDFS作为后端分布式文件系统.但是,它们的默认块大小完全不同.HBase采用64KB作为默认块大小,而HDFS采用至少64MB作为默认块大小,至少比HBase大1000倍.
我知道HBase是为随机访问而设计的,所以较小的块大小是有帮助的.但是当访问HBase中的64K块时,是否仍然需要访问HDFS中的一个64MB块?如果是真的,HBase可以处理极其随机的访问吗?
我正在尝试设置Hbase的多节点集群.当我做奴隶的jps我得到
5780 Jps
5558 HQuorumPeer
5684 HRegionServer
1963 DataNode
2093 TaskTracker
Run Code Online (Sandbox Code Playgroud)
同样在主人身上我得到了
4254 SecondaryNameNode
15226 Jps
14982 HMaster
3907 NameNode
14921 HQuorumPeer
4340 JobTracker
Run Code Online (Sandbox Code Playgroud)
一切都运行正常.但是当我尝试在hbase shell上创建表时.它给出了一个错误
ERROR: org.apache.hadoop.hbase.PleaseHoldException: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
Run Code Online (Sandbox Code Playgroud)
我的slave的regionserver log(区域服务器正在运行):
2013-06-11 13:09:53,119 INFO org.apache.hadoop.hbase.regionserver.HRegionServer: Attempting connect to Master server at localhost,60000,137093$
2013-06-11 13:10:53,190 WARN org.apache.hadoop.hbase.regionserver.HRegionServer: Unable to connect to master. Retrying. Error was:
org.apache.hadoop.hbase.ipc.HBaseClient$FailedServerException: This server is in the failed servers list: localhost/127.0.0.1:60000
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:425)
at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:1124)
at org.apache.hadoop.hbase.ipc.HBaseClient.call(HBaseClient.java:974)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine$Invoker.invoke(WritableRpcEngine.java:86)
at $Proxy8.getProtocolVersion(Unknown Source)
at org.apache.hadoop.hbase.ipc.WritableRpcEngine.getProxy(WritableRpcEngine.java:138) …Run Code Online (Sandbox Code Playgroud) 在Python模块happybase中,我可以检索具有以给定字符串开头的行键的所有行(即,使用部分行键进行搜索).
假设我有一个格式为(ID | TYPE | DATE)的rowkey,我可以通过以下方式找到ID为1且TYPE为A的所有行:
import happybase
connection = happybase.Connection('hmaster-host.com')
table = connection.table('table_name')
for key, data in table.scan(row_prefix="1|A|"):
print key, data
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是一个完全客户端的Java程序,适用于任何尝试使用Java HBase API进行基础操作的人,但我只能使用完整的行键搜索一行:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
//class foo {
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.addResource(new Path("C:\\core-site.xml"));
conf.addResource(new Path("C:\\hbase-site.xml"));
HTable table = new HTable(conf, "table_name");
Result row = table.get(new Get(Bytes.toBytes("1|A|2014-01-01 00:00")));
printRow(row);
}
public static void printRow(Result result) {
String …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Ubuntu上安装OpenTSDB,我正在关注此文档.但运行这些命令后:
git clone git://github.com/OpenTSDB/opentsdb.git
cd opentsdb
Run Code Online (Sandbox Code Playgroud)
运行此命令是提供以下控制台输出:
./build.sh
Run Code Online (Sandbox Code Playgroud)
控制台输出:
seed-admin@seedadmin-Inspiron-3847:~/Abharthan/opentsdb$ sudo ./build.sh
+ test -f configure
+ ./bootstrap
./bootstrap: 17: exec: autoreconf: not found
Run Code Online (Sandbox Code Playgroud)
有人可以建议问题是什么.