Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nosql Hbase性能_Nosql_Hadoop_Hbase_Datanucleus - Fatal编程技术网

Nosql Hbase性能

Nosql Hbase性能,nosql,hadoop,hbase,datanucleus,Nosql,Hadoop,Hbase,Datanucleus,我使用的是Spring+DataNucleusJDO+Hbase。Hbase采用两个节点的完全分布式模式。我在这里面临着严重的性能问题 我的webapp可以被认为是一个pinger,它只会不断ping url并存储它们的响应。Hnce我的应用程序运行多个线程以插入数据库。我观察到,一旦并发写入的数量超过20个左右,插入就开始占用大量时间(有些甚至需要1000秒)。当这种情况发生时,读取也开始失败,并且我的webapp无法从数据库中提取任何数据(我的webapp挂起)。我不是一个喜欢NoSQL d

我使用的是Spring+DataNucleusJDO+Hbase。Hbase采用两个节点的完全分布式模式。我在这里面临着严重的性能问题

我的webapp可以被认为是一个pinger,它只会不断ping url并存储它们的响应。Hnce我的应用程序运行多个线程以插入数据库。我观察到,一旦并发写入的数量超过20个左右,插入就开始占用大量时间(有些甚至需要1000秒)。当这种情况发生时,读取也开始失败,并且我的webapp无法从数据库中提取任何数据(我的webapp挂起)。我不是一个喜欢NoSQL db的人,因此不知道从哪里开始寻找性能

我的主要配置是: Zookeeper仲裁大小:1 Hbase区域服务器:2个 数据节点:2 hbase.zookeeper.property.maxClientCnxns:400 复制因子:3

我是否需要增加Hbase的堆大小?高写吞吐量应该对读产生影响吗


我的配置有问题吗?似乎向文件写入数据比向Hbase写入数据要快。这是我在Hbase的最后一次尝试。请提供帮助

如果要使用多个线程写入HBase,则需要确保尽可能频繁地重用HBaseConfiguration。否则,每个线程都会创建一个新连接,ZK最终将停止提供连接,直到旧的连接关闭


一个快速的解决方案是让单例处理将配置传递给HTable对象。这将保证使用相同的配置,并将最大限度地减少您的并发连接。

我看到的一个大问题是,您在复制因子为3的2个节点上运行HBase(实际上只有2个节点需要复制)。这意味着所有写操作都必须复制到两个节点。HBase至少需要5个左右的节点才能运行

听起来你正在填充你的第一个区域,它正在分裂,在分裂过程中,一旦MemStore填满,你就会开始阻塞。您应该考虑创建预拆分为多个区域的表,以使写入分布均匀

我建议看一下,特别是上的部分


您还应该使用,确保本机压缩正常工作(gzip、lzo或snappy)-不要使用纯Java压缩,否则您的速度会非常慢,链接对此进行了一些讨论。

@cftrnas似乎我必须做很多工作才能使其具有生产价值。不过有一个问题。除了hbase,我还需要在hadoop上做任何优化吗?我已经做了最小的事情,比如增加ulimit和所有的。我目前无法在两个以上的节点上运行hbase,将复制系数降低到1会有帮助吗?如果这只是一个开发/测试安装,那么是-一定要将复制系数降低到1。在生产中,您将需要(需要)更多节点和3的复制。我也不能强调当你创造它们时,它是多么重要。也考虑压缩和增加你的区域大小。谢谢链接。实际上,我做了其中提到的大部分事情,现在能够获得良好的阅读性能。我的应用程序挂起(读取时)的主要问题是我的区域服务器的hbase.regionserver.handler.count的默认值(10)。当我写了将近30封信时,我无法阅读。我没有对表进行预拆分,因为我的最大表大小为19MB,Hbase在默认情况下会在达到256MB时对其进行拆分。您是否仍然建议预拆分,因为我的直写吞吐量非常低。我观察到,在我最大的表(约19MB)上,写操作需要7秒到63秒的时间。我观察到的另一件事是,写入时间从7秒线性增加到63秒,然后又下降到7秒,然后以相同的方式振荡。这样行吗?我目前只有一个区域服务器和一个区域用于我最大的表(其他表小于1MB)。增加区域服务器数量和预拆分表是否会增加我的直写吞吐量?即使是写入我最小的表也需要很多时间(7-63秒之间)。您插入的密钥是否顺序一致?如果不是,那么是-创建两个拆分将允许两个节点都工作。如果它们是连续的(考虑到您的数据,听起来它们可能是连续的),那么您应该考虑更改行键。另外,请看一看-这听起来可能对您正在做的事情非常有用。我使用datanucleus作为ORM,并使用PersistenceManagerFactory。这是我工作的抽象级别,我不访问HTable和相关的hbase对象。我猜PMF将重用这些连接。但我找不到一种方法,可以通过hbase指定datanuceus的连接池(与RDBMS不同)。连接池在我工作的抽象级别上可能吗?我真的不熟悉Datanucleus。因此,我无法评论如何处理这些连接。但是,您可以转到HBase master的web控制台(类似于ipofhbasemaster:60010)并查看ZK转储。这将列出到ZK的所有活动连接。如果超过400(您的限制),它将拒绝新连接。