我正在开发一个小型社交网络应用程序,面临N+1选择问题
我有两个表,Post和Comment,它们在应用程序中起主要作用
我将所有帖子存储在Post表中,而对帖子的评论存储在Comment表中。我使用部分键扫描功能以以下方式获取数据
Post: Start row = userID | Stop Row = userID +1
Comment: Start row = postID | Stop Row = postID +1
下面是用于获取数据的代码片段
HTable table
我们已经安装了OpenJDK 6,JAVA_HOME目前正指向它。我刚刚安装了hbase-0.94.0,我们无法启动hbase服务器(start hbase.sh),因为它正在寻找Sun Java。如何解决此问题?请打印启动HBase时出现的错误,以及重新检查您的HBase-env.sh并检查您是否设置了正确的JAVA_主页路径。请打印启动HBase时出现的错误,以及重新检查您的HBase-env.sh并检查您是否设置了正确的JAVA_主页路径不是。请将您的日志详细信息粘贴到您的hbase文件夹
标签: Hbase
data-warehousestar-schemadimensional-modelingaggregates
假设我在数据仓库设置中有一个星型模式。
有一个非常非常长的事实表(想想数十亿到万亿行)和几个低基数维表(想想100维表)。每个事实表都有外键
指向维度表主键的是位图索引。每个维度表主键也被位图索引。这是所有的快速连接。都很标准
假设数据仓库开始显示性能下降。时间到了
事实表越长,从位图联接返回结果的时间越长。业务需求是事实表不断增长(我们不能将超过一年的数据移动到存档存储)
我正在考虑以下解决方案:
哈希分区事实表,但这只是暂时搁置了不可避免的增长问题
数据库将物理星型架构数据库划分为多个架构/
有没有办法从hbase shell中删除单元格并使用相同的时间戳添加它
delete 'BNM', '00347bbf5632aa0de0071a', 'PROCESS:TEST', 1374270908284
put 'BNM', '00347bbf5632aa0de0071a', 'PROCESS:TEST', 'debug_prime1', 1374270908284
我正在做这样的事情,但第二次put不起作用。您最终会看到put的结果,但只有在对表进行主要压缩后才能看到结果。通常,
我的要求是更改H base shell中特定行和列的现有时间戳值。
那么,如何更改H BASE shell的时间戳呢?
hbase表级别的IN_MEMORY和CACHE MEMORY属性之间的区别是什么重新对第一部分进行分级您只需在正确的位置重新分配值-
经过一些研究,我相信@user2586498从严格意义上说是正确的。行的特定实例有一个版本,它不必是时间戳。一旦该行被持久化,它就会被锁定。您可以覆盖该值,但必须使用其他版本
另一种解决方案是将您自己的版本号保存在单独的列中
另一种替代解决方案
我的Graph DB返回给我行键,让我们假设300,这是完全随机的。我想根据这些行键从HBase表中获取数据。我不想打hbase 300次。有什么可能的办法吗。
我不能使用过滤器,因为行键是随机的。
提前感谢。表格有一个方法
公共结果[]获取(列表获取)引发IOException
你应该试试这个
顺便说一句
我正在编写一个hbase ORM框架,还提供批处理获取功能。
我正在检查有关端点协处理器的文档,发现协处理器协议已重命名为协处理器服务
见HBASE-6485:
删除协处理器协议支持和实现
现在必须重构动态端点以使用协处理器服务而不是协处理器协议。例如,请参阅协处理器包info javadoc。研究单元测试,寻找我们从旧样式迁移到新样式的例子。如果你需要帮助,写下邮件列表,因为一些人自愿帮助那些需要移民的人
但是我找不到关于BaseEndpointCoprocessor的任何信息,我尝试在我的endpoint类中使用它,但它似乎也被删除并重命名了
有人知道
我有一个3节点Hadoop集群主服务器和2个安装了Hbase的从属服务器。Zookeeper和HMaster安装在Hadoop主节点上。在我通过调用start-HBase.sh启动HBase集群之后,HMaster和2个HRegionServer进程被启动
然而,HBase集群显示:
正在等待区域服务器计数结算
当我检查从属服务器上的日志文件时,它显示了一条错误消息
正在打开到服务器localhost/127.0.0.1:2181的套接字连接。将
未尝试使用SASL进行身份验证未知错误
不知道那
在表扫描期间,我对Hbase中检索行的顺序有疑问。如果我的行键如下所示
id1,id2,id3,id4,id5
我知道它们是按分类顺序储存的,你能告诉我它们是否也是按同样的顺序取回的吗
id1、id2、id3、id4、id5是,它们以相同的顺序恢复。扫描时,有两种方法检索结果
A逐个检索每一行,其中维护一个标记,并在每次获取时递增。
扫描工
B一次检索n行,其中保持顺序。
scannerGetListnumberofrowsreqd。您可以在while循环中完成此操作
while(true)
{
我有两个区域服务器,RS1和RS2。我想确保键以字母小于M开头的所有行进入RS1中的区域,然后进入RS2中的区域
如何做到这一点?你应该看看,HBase的书中有很多关于区域和分割的信息
关于您的问题,您只需要创建一个包含2个区域的表,并将每个区域分配给每个区域服务器。要创建包含2个区域的表,您只需提供一个分割点(默认情况下,仅创建1个区域)
完成后,前往您的主控台检查您的表区域http://my_master:60010/table.jsp?name=my_table
Name | Regio
从任何远程计算机将Apache Phoenix JDBC客户端(我使用sqlline.py进行测试)连接到我的Hbase时出现问题
我的测试方法如下:
我使用ssh连接到另一台运行linux的机器,然后尝试连接到zookeeper仲裁(目前只有一台机器:christianwith KP):
在尝试连接命令行之后,什么也没做,几分钟后我收到了很多java错误消息
这是来自日志文件zookeeper.out的,zookeeper似乎正在接受来自运行sqlline.py的远程客户端的连接,因为IP地址
当我想要获取包含具有特定值的列的所有行时,有人能解释性能有多好吗?
这是线性搜索吗
谢谢是的,这是一个线性搜索,要查找具有特定列的所有行,您需要扫描表中的每一行。在这种情况下,常见的解决方案是创建额外的索引表。在此表中,行键将是数据表中的列名。此表中行中的每一列都将引用主表中包含特定列的行。例如
你的桌子
| Row | Column |
| RA | CA |
| CB |
| CC
在HBase 1.x中,表对象上有一个delete方法,允许您删除整行。但是,无论该行是否实际在表中(没有返回值),它都会“成功”。是否有方法确定某行是否已被HBase中对Table.delete的特定调用删除
我认为checkAndDelete可能适用于此,例如,首先检查行是否存在。大概是这样的:
boolean deleted = false;
try (Table table = getTable(TABLE_NAME)) {
byte[] rowKey = Bytes.toBytes
我是新来这里的。
我有两个表,1:索引表和2:值表,如图所示。
我想知道一种有效的方法来完成以下工作:
扫描表1,并获取索引
对表2进行扫描,获得与给定索引对应的值
然后我有多个这样的(键索引)表和(索引值)表。
请让我知道进行这些扫描的最有效和最简单的方法。
我想知道一种方法:
rdd1=scan'table1'{FILTER=>key='some value'}将获取索引值
rdd2=扫描“表2”,{STARTROW=>表1的结果}
因此,如果rdd1返回10行,那么这10行的索
我的行键的初始开始部分看起来像YYYYMMDDhhmmss,其中“ss”总是00。
示例:20170603162100,对应2017年6月6日16:21
别问我为什么,但时间戳必须在钥匙的开头
这显然是每一分钟,每一分钟都是独一无二的数据
这受到区域热点的影响。
区域服务器上的行键如下所示:
我的阅读模式:获取一分钟的数据,而不是一小时、一天、一个月、一年的数据
假设我有10个区域服务器
这是我正在考虑的一个解决方案,它看起来像一种盐,但是确定性的,而不是随机的:
我看到mm部分-分钟,并根据它
标签: Hbase
phoenixsquirrel-sql
我正在使用Phoenix在我的HBase上运行SQL,但是当我尝试对主键使用bigint时,它在select中为该列返回NULL,但varchar返回正确的结果这显然是因为HBase/Phoenix中的主键存储为整数,根据定义可以是0,1,-1。如果为0,则主键不能为空。因此,我们需要将其保留为VARCHAR
对于每个thrift API调用(在Erlang中使用HBase thrift),API都会返回一个thrift连接:
erlang示例:
这引发了以下相关问题:
我应该始终使用返回的连接还是仅使用第一个连接
这些连接相同吗
这种传递连接方式会导致连接泄漏吗
有没有办法关闭这些连接,或者它们有自己的连接
使用它们的每种类型的API调用的生命周期
我意识到这不是一个连接,而是一个节俭的交通参考。我把它们相互比较,它们是一样的。在Erlang中,打印它们的内容(序列化)关于每个结果的事实表明它们是相
当试图通过JavaAPI向HBase发送消息时,会抛出NoServerForRegionException
代码Snipplet:
Put rowData;
rowData.add(Bytes.toBytes(columnfamilyName),
Bytes.toBytes(key), Bytes.toBytes(val));
table.put(rowData);
table.pu
比如标题,我只有四台机器,所以我把regionServer放在主节点上。
但是,当我向hbase写入大数据时,主机经常会出错。简而言之,Regionserver需要与数据节点在同一台服务器上运行—写入到region server的数据会进入memstore,从那里写入HDFS(磁盘)。第一个HDFS块副本进入本地数据节点,另外两个写入到其他数据节点,这导致regionserver(服务于该区域)获得对数据的本地访问(从而有助于数据局部性) 没有。我个人认为在集群中的主守护进程和从守护进程之间共享
标签: Hbase
clouderaavrosolrcloudmorphline
我正在使用CDH4.4。我目前正在运行一个应用程序,它通过avro将记录序列化到hbase中的一列中。我正在将此表的当前solr索引移动到solrcloud中,因此我正在测试MapReduceIndexerTool,以便对整个表进行批量索引。我有一个非常简单的morphlines文件,它当前使用“extractHBaseCells”从HBase读取记录
我设置了一个跟踪程序概念验证,只对rowkey=>id进行索引,并将avro blob填充到另一个字段中,只是为了验证我是否可以将HBase中的
我使用的是nutch2.2、hbase 0.94和gora 0.4,当我执行以下步骤时
1.nutch inject seed.txt
2.nutch generate -batchId 231
3.nutch fetch 231
4.nutch parse 231
5.nutch updatedb 231
我将获得特定页面的html内容,比如说([),但是当我执行步骤4时
nutch parse 231
请参见我在hbase中创建的网页表格有一个ol(outlink)列系列,但它是空的
如
我在arrayList中存储了一组行键,我想用相同的值批量更新hbase中所有行键的值。是否可以这样做?因此,您希望所有行对特定列具有相同的值?我希望在执行使用该行键的任务后,立即将该行键的值更新为done。我想以10人一组的方式进行批量更新,以提高应用程序的速度。你必须告诉我你是如何访问hbase的,这样我就可以给出一个答案,有一种叫做BatchMutation的方法,速度很快。
我已经下载了适用于Hbase(1.1)和Phoenix(适用于Hbase 1.1)的tar.gz包
在独立模式下设置hbase是可行的,我可以进入hbase外壳
接下来,我将phoenix目录中的所有.jar文件放入Hbase的lib文件夹
但是,每次尝试启动SQLshell时,都会出现以下错误。
我一整天都在做这件事,现在都看不见自己了
Phoenix网站上的安装说明非常简短,他们基本上说,复制JAR,运行.py脚本
更新:如果有人遇到同样的问题,我还没有设法解决这个问题,但是尝试一台新的机器
我的代码如下:
for key,data in table.scan(columns=["raw:dataInfo"]):
count+=1
...
当我运行上面的代码happybase崩溃并抛出以下异常时,raw:dataInfo列可能大到50MB:
Traceback (most recent call last):
File "happybasetestscan.py", line 8, in <module>
for key,data in tabl
我从ORACLE DB获取数据,我希望不使用(convertAvroToJson和putHbaseJSON)将其保存在hbase中
从oracle我得到了如下4个属性:
a:文本
b:文本
c:文本
d:二进制
有没有办法直接从avro文件保存这些属性
注意:阻止我使用JSON的唯一原因是可能包含(“或”)的二进制属性
谢谢。我认为Apache NiFi提供的开箱即用处理器没有办法做到这一点。您需要实现一个新的处理器,如PutHBaseAvro,它可以直接从Avro到HBase,并正确处理二进制
无法将\存储在hbase中
put 'table1','rowKey1','column1','This is \ value.'
存储为
This is \x5C value.
从终端和Java API插入时也是如此
为什么会发生这种情况以及如何解决这种情况?为什么会发生这种情况?
Hbase shell使用org.apache.hadoop.Hbase.util.Bytes::toStringBinary作为默认转换器,我引用了Hbase shell/src/main/ruby/Hbas
我想将本地java/scala进程连接到远程HBase服务器(v1.1.2)(在docker中)。我有以下代码:
val config = HBaseConfiguration.create()
BasicConfigurator.configure()
config.set("hbase.zookeeper.quorum", "192.168.99.100")
config.set("hbase.zookeeper.property.clientPort","2181")
config.set
我正在安装Hbase 0.94.2,但它还不能正常工作。运行日志文件中的启动脚本:
2012-11-23 18:26:37,827 INFO org.apache.zookeeper.ClientCnxn: Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x1
3b2e17842c0002, negotiated timeout = 40000
2012-11-23 18:26:37,
我在Hbase中创建了以下架构
create 'test','lg'
put 'test','row1','lg:htype','get'
put 'test','row1','lg:ip','192.168.12.123'
put 'test','row1','lg:stat','success'
对于这个模式,我想创建一个行键。我的问题是如何在hBase shell中创建行键
使用上述模式,我创建了列族。如何使用hbase外壳定义行键。或者我需要像定义列族一样定义行键。如果是,HBas
如果我使用hbase外壳并发布:
put 'test', 'rowkey1','cf:foo', 'bar'
scan 'test'
import happybase
connection = happybase.Connection('<hostname>')
table = connection.table('test')
table.put('rowkey2', {'cf:foo': 'bar'})
for row in table.scan():
print row
我的列族为cf1,我想访问该行中EqID='Eq1'的所有列,
我使用了ValueFilter,但它只返回EqID列
hbase(main):004:0> scan 'abc', { COLUMNS => ['cf1:Value', 'cf1:EqID'],FILTER => "ValueFilter( =, 'binaryprefix:Eq1' )" }
ROW COLUMN+CELL
我是HBase的新手,在创建表时遇到过这个问题
声明:
create 'table1', {Name=>'info'}
NameError: uninitialized constant Name.
感谢您在这方面的快速帮助
谢谢。通过查看可用的命令,我认为语法应该是:
create 'table1', {NAME =>'info'}
用逗号替换句号。谢谢你的回复,埃琳娜。这是一个打字错误,我用了“,”本身。还有什么我应该找的吗?我有点困惑。我的GoogleFoo在这方面不好-/
我使用phoenix driver 4.0版本来查询数据库。我还尝试将hbase.client.scanner.caching设置为1000和10000
在所有情况下,迭代10000行需要3分钟。我没有在迭代循环中放入任何代码。我必须扫描超过1L的记录,所以需要半个多小时
原因可能是什么
long count = 0;
while (rs.next())
{
if (count % 1000 == 0)
标签: Hbase
time-seriesopentsdb
我正在和OpenTSDB合作一个学校项目。在这个项目中,我应该创建一个存储机器人时间序列数据的结构。每个机器人以每秒5次的速度收集数据,最多可以有100个活动机器人
我已成功设置OpenTSDB并将其链接到HBase群集。然而,在阅读了关于的文档之后,我觉得我对数据模型没有清晰的认识。该网站表示,每个时间序列数据点都需要以下数据:
公制
时间戳
价值观
标签-键/值
这就引出了我的第一个问题。值是多少?为什么需要它
回到机器人;每个机器人由两个ID标识,每个测量值总共包含9个值。因此,每个测
我正在试用一些hbase代码。我意识到,当我使用put命令通过hbase外壳插入数据时,所有内容(数字和字符串)都被放入字符串:
hbase(main):001:0> create 'employee', {NAME => 'f'}
hbase(main):003:0> put 'employee', 'ganesh','f:age',30
hbase(main):004:0> put 'employee', 'ganesh','f:desg','mngr'
hbase(
我试图理解如何将hbase数据库以10条记录为一批地摄取到ApacheBeam/Dataflow中
到目前为止,我已经尝试了下面的方法,为每一行提供触发器
PCollection<KV<Integer,String>> records = p.apply("read",HBaseIO.read()
.withConfiguration(conf)
.withTableId("Data")
我正在使用Eucalyptus,并且正在考虑在我们的节点控制器上安装hdfs和hbase。在我们的一些实例上运行hbase会提高性能吗?还是说它是多余的?视情况而定。一如既往,存在三个基本瓶颈:
1) 中央处理器
2) 网络I/O
3) 磁盘I/O
若您的应用程序当前受CPU限制,或者您的数据具有较高的缓存命中率和额外的节点,那个么额外的HBase节点是有用的。如果您的应用程序大部分是磁盘绑定或网络绑定的,那么额外的HBase节点将不会有多大帮助(除非添加更多节点可以显著提高缓存命中率)
通常,
标签: Hbase
ubuntu-12.04clouderafreezehbase-shell
我已经在Ubuntu 12.04上安装了HBase 0.92.1-cdh4.0.1。
hbase master、hbase regionserver和zookeeper服务器在此计算机上运行;HDFS正在另一台计算机上运行(相应地设置了hbase.rootdir属性)。
现在我对“hbase shell”有一个问题:每当我提交CREATETABLE语句时,比如
create 'tbl1', {NAME => 'd', COMPRESSION => 'GZ'}
shell挂起(
有没有办法设置Hbase以便我们可以在同一集群内创建多个数据库?没有,没有。但是,可以使用表名前缀将一组表与另一组表分开
我以前没有测试过ACL,但我认为您可以在hbase>0.92的最新版本中使用它们,以允许访问某些表,并阻止每个用户访问其他表。名称空间支持将在0.96.0版本中推出。随着时间的推移,将内置越来越多的功能
只需刷新主题:
5.3.1。命名空间管理
可以创建、删除或更改命名空间。命名空间成员身份在表创建过程中通过指定表单的完全限定表名来确定:
:
例5.1。例子
#Create
我知道Stargate希望插入HBase表的值是base64编码的
在为HTTP PUT生成JSON有效负载之前,我们如何对整型和浮点型等数值进行base64编码?我可以自己解决这个问题,下面是我如何对整型和双精度值进行编码的代码片段:
long t = 11;
String e1 = Base64.encodeBase64String(BigInteger.valueOf(t).toByteArray());
t = 78;
String e2 = Base64.encodeBase64
我在StartDate,EndDate:2014010110201
我使用pig读取表格。我知道我可以在读取HBase时使用gt/lt条件,但我想知道是否可以使用模式匹配字符的“like”条件,例如201401014%,而不是-gt 201401014000
问候
Pawel模式匹配的示例:
res = Filter Data By X matches '.*blabla.*';
你为什么不多打四个零呢?另外,您的意思是在-gt的参数中使用%通配符吗?我不明白比较中的通配符是什么意思。好吧,这
标签: Hbase
phoenixambarisqlline
大家好,我在一个大表上运行phoenix count查询时收到以下错误消息
0: jdbc:phoenix:hadoopm1:2181> select Count(*) from PJM_DATASET;
+------------+
| COUNT(1) |
+------------+
java.lang.RuntimeException: org.apache.phoenix.exception.PhoenixIOException: org.apache.phoenix.ex
标签: Hbase
hortonworks-data-platformphoenix
我将HDP2.5与HBase 1.1.2.2.5.3.0-37和phoenix-4.7.0.2.5.3.0-37一起使用
两者都已启动并正在运行,能够从phoenix创建查询hbase数据
Class.forName("org.apache.phoenix.queryserver.client.Driver");
conn = DriverManager.getConnection("jdbc:phoenix:thin:url=http://hostname:8765;serialization
命名空间映射属性不一致。。确保配置
phoenix.schema.isNamespaceMappingEnabled在客户端和
服务器
hbase site.xml
------------------------
phoenix.schema.isNamespaceMappingEnabled
真的
Java代码:
----------------
连接=setupDbConnection()
语句statement=connection.createStatement()
int sta
我正在写一个nutch插件。我正在对获取的网页进行一些分析,结果将存储在网页对应的hbase中。我不知道如何添加额外字段以及如何使用nutch将数据写入该字段。如果您想在Solr中编制索引时添加额外字段::
如果附加字段的值固定(静态),则可以使用Nutch的索引静态插件
它允许您添加许多字段及其内容
第1步:
首先需要在nutch-site.xml中启用index.static属性
第二步:
添加index.static属性
<property>
<name>inde
我是HBase新手,对节点的扩展有一些疑问:
-是否可以在一个区域中扩展单个节点,或者所有节点(区域服务器除外)都必须具有相同的资源。
-是否有任何程序来扩展节点,或者我只是将节点与集群“断开”,然后重新连接
我不能给出任何部署的具体信息,因为我只是在学习
提前感谢。仅扩展HBase集群中的一个节点没有任何意义。假设您的一些区域服务器的负载增加,并且您扩展了这个特定的服务器。在此期间,Master可以执行负载平衡,并将产生最大负载的区域移动到此服务器到另一个RegionServer。你又遇到麻烦
有谁能告诉我,如何列出hbase表中的所有行键吗?这应该快得多(FirstKeyOnlyFilter在服务器上运行,并在将结果发送到客户端之前剥离所有列数据):
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, tableName.getBytes());
System.out.println("scanning full table:");
ResultScanner scann
如果我的列族只保留一个版本,那么每个对同一行的Put键是否都会破坏现有版本,或者它是否会忽略我的Put请求?实际上,您的问题的每个短语都包含在。另外,请参见本章中的详细信息。以下是需要特别注意的事项:
实际上,版本只是带有不同时间戳的列。具有相同TS值的多个put将只产生具有最新put结果的1个单元格(尽管它们都具有相同的版本)
如果您放置了两个不同的版本,然后删除其中最新的版本,您将通过Get看到较旧的版本。但若在put之后您将执行主要压缩,那个么您实际上只有一个版本,而delete将删除最
HBase如何知道行是否包含特定列?例如,考虑以下情况:
假设我们有一个表,它有一个名为“STAT_FAM”的列族,有以下两行:
一行,键为“R1”,包含1000列,命名为S1到S1000
以及另一行,其键为“R2”,其中包含另外1000列,命名范围为S2000到S3000
现在,如果我们正在扫描表,扫描定义如下:
Scan s = new Scan();
s.setStartRow ( Bytes.toBytes(“R1”) );
s.setStopRow ( Bytes.toBytes(
问题:我需要在每小时和每天之后在Hbase中插入一些用户ID(例如:2201201711,这表示2017年1月22日上午11点的数据)。如果我想获取某个日期或数据和时间范围内某个特定小时的所有用户ID,那么表的设计应该是什么
到目前为止,我所做的是将用户ID保留为行键,并在运行时在同一列族中创建列。
文件数据:
用户id |日期时间
1 2201201711
2 2201201711
3 2201201711
我的hbase行键
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 32 页