我想使用Hbase存储网络事件,rowkey将是事件的时间戳。这将在Hbase中创建热点,为了避免这种情况,我将在rowkey中添加一个salt前缀。这将在所有区域中均匀分布行。 到目前为止没有问题。
但我也想使用Cloudera Impala用SQL查询这些数据。是否可以使用Impala与咸腌鸡排?或者我需要* sql查询才能获得所有结果?
答案 0 :(得分:1)
不幸的是,Impala不支持这一点。我还发现Impala对HBase的性能非常差。我仍在尝试调整配置,以便提高性能。我的实验中的镶木地板似乎是最快的(x的100s)。事实上,没有压缩的平坦tsv文件比HBase表现更好。下面介绍了使用HBase进行Impala的用例(直接来自Cloudera文档):
通过Impala查询HBase的用例
以下是使用Impala查询HBase表的常见用例:
在Impala中保留大型事实表,在HBase中保留较小的维度表。事实表使用Parquet或针对扫描操作优化的其他二进制文件格式。连接查询扫描大型Impala事实表,并使用HBase中的高效单行查找交叉引用维度表。 使用HBase存储快速递增的计数器,例如网页被查看的次数,或社交网络,用户拥有的连接数或帖子收到的票数。 HBase可以有效地捕获这些可更改的数据:仅附加存储机制可以有效地将每个更改写入磁盘,并且查询始终返回最新值。应用程序可以从HBase查询这些特定总计,并将结果与从Impala查询的更广泛的数据集合。 在HBase中存储非常宽的表。宽表具有许多列,可能是数千列,通常为诸如在线服务的用户之类的重要主题记录许多属性。这些表通常也是稀疏的,也就是说,大多数列值都是NULL,0,false,空字符串或其他空白或占位符值。 (例如,任何特定网站用户可能从未使用过某些网站功能,填写了他们个人资料中的某个字段,访问过该网站的特定部分,等等。)针对此类表格的典型查询是查看向上一行以检索有关特定主题的所有信息,而不是像典型的Impala管理表中那样对数百万行进行求和,平均或过滤。
或者HBase表可以与更大的Impala管理表连接。例如,分析表示站点的Web流量的大型Impala表,并挑选出查看最多页面的50个用户。使用HBase中的宽用户表加入该结果,以查找这些用户的属性。连接的HBase端将导致HBase中50个有效的单行查找,而不是扫描整个用户表。
特别是针对HBase运行SQL查询。你看过Pheonix了吗?它支持salted表并提供SQL语法。我不知道它的速度有多快或与Dremel实现相比如何。