众所周知,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 shell中,帮助文件向我们显示了创建表的几种允许语法:
create 'tableName', {NAME => 'colFamily', VERSIONS => 5 }
create 'tableName', {NAME => 'cf1'}, {NAME => 'cf2'}
create 'tableName', 'cf1', 'cf2', 'cf3'
create 'tableName', 'cf1', {SPLITS => ['10','20','30','40']}
Run Code Online (Sandbox Code Playgroud)
我想创建一个表格,我指定一个Split和一些表格选项,如COMPRESSION =>'SNAPPY'和VERSIONS,但我似乎无法弄清楚语法或找到有用的文档.
我正在尝试设置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) 我已经阅读了一些关于设置JAVA_HOME的评论.由于我是这方面的初学者,所以在没有了解我在做什么的情况下,我没有编辑任何内容.我不想把事情搞得更糟.所以如果你能指导我完成这个并告诉我编码有什么问题,我会非常感激.
我一直在尝试安装Hadoop然后安装HBase.经过很多困难和错误解决后,我终于可以安装Hadoop,并在运行时得到这个输出start-all.sh,一切似乎都没问题.
> hduser@CSLAP106:~$ /usr/local/hadoop/bin/start-all.sh
> hduser@CSLAP106:~$ jps
> 3005 NameNode
> 3404 JobTracker
> 5570 Jps
> 3554 TaskTracker
> 3311 SecondaryNameNode
Run Code Online (Sandbox Code Playgroud)
我也有这个Java版本,当我输入时echo JAVA_HOME,我得到这个输出:
> hduser@CSLAP106:~$ java -version
>
> java version "1.7.0_25" OpenJDK Runtime Environment (IcedTea 2.3.12)
> (7u25-2.3.12-4ubuntu3) OpenJDK Server VM (build 23.7-b01, mixed
> mode)
> hduser@CSLAP106:~$ echo JAVA_HOME JAVA_HOME
Run Code Online (Sandbox Code Playgroud)
在此之后,我尝试安装HBase(我认为我即将放弃),并且不断地我得到错误 JAVA_HOME is not set and java cannot be found
这就是我试图启动Hbase的原因:
hduser@CSLAP106:~$ /usr/local/hbase/hbase-0.94.6.1/bin/start-hbase.sh
+======================================================================+
| Error: JAVA_HOME is not set and Java …Run Code Online (Sandbox Code Playgroud) 我知道模糊行滤波器首先将两个参数作为行键,第二个作为模糊逻辑.我从相应的java类FuzzyRowFilter中理解的是,过滤器评估当前行并尝试计算与模糊逻辑匹配的下一个更高的行键,并跳转非匹配键.
我无法理解以下事情
扫描如何跳转某些行键?它是否使用Get获取并比较当前行键.扫描如何知道下一个匹配的行键存在的位置?没有进行全扫描(如果它跳转)
在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) 我已在hive 的内部表中成功创建并添加了动态分区.即通过使用以下步骤:
1创建了一个源表
从本地到源表的2个加载数据
3-创建了另一个包含分区的表 - partition_table
4-从源表中将数据插入此表,从而动态创建所有分区
我的问题是,如何在外部表中执行此操作?我读了这么多文章,但我很困惑,我是否必须指定已存在的分区的路径来为外部表创建分区?
示例:第1步:
create external table1 ( name string, age int, height int)
location 'path/to/dataFile/in/HDFS';
Run Code Online (Sandbox Code Playgroud)
第2步:
alter table table1 add partition(age)
location 'path/to/already/existing/partition'
Run Code Online (Sandbox Code Playgroud)
我不知道如何在外部表中进行分区.有人可以通过一步一步的描述来帮助吗?
提前致谢!