问题标签 [phoenix]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4196 浏览

sql - phoenix 映射现有 HBase 表

我有一个 Hbase 表“http_access_log”,现在我想在上面使用 Apache phoenix for SQL。

我应该创建凤凰视图或表来映射 hbase 表吗?而如果hbase api 更新了hbase table,phoenix view 或者table 会更新吗?

0 投票
2 回答
7754 浏览

hbase - HBase 扫描很慢

问题

我正在尝试使用 Phoenix 建立二级索引。创建索引需要几个小时。这似乎是由于 HBase 扫描缓慢,因为我注意到以下性能:

  • 我可能需要 2 个小时来扫描表,而其他开发人员报告说对于较大的表(1 亿行)需要几分钟。
  • HBase shell 能够以大约的行数计算行数。每秒 10.000 的速率,这意味着 3800 秒(> 1 小时!)计算此表的所有行。

都带有 HBase shell 和 Java 扫描器。

注意:GET(by rowkey) 操作具有良好的性能(大约 0.5 秒)。


语境

  • 3800 万行/1000 列/单列族/96Go,GZ 压缩。
  • 集群有 6 个节点(126Go RAM,24 核)和 5 个区域服务器。
  • Hortonworks 数据平台 2.2.0

故障排除

基于 HBase 书(http://hbase.apache.org/book.html#performance),这是我已经检查过的内容:

1) 硬件

  • IO(磁盘)
    • NMon 表示磁盘的繁忙程度永远不会超过 80%,最常见的是在 0 到 20% 之间
    • Top 说 HBase JVM 没有交换(检查 2 of 5 RS)
  • IO(network):每个节点的主动接口都在同一个交换机上(所有第二个被动接口都插在不同的交换机上)

2) 虚拟机

  • GC 暂停 OK(每分钟左右暂停几毫秒)
  • 堆看起来不错(接近极限的峰值不会太长)
  • CPU 出奇的低:从不超过 10%
  • 线程:
    • 活动线程(10“RpServe.reader=N”+其他几个)显示没有争用
    • 很多停放的线程什么都不做(60“DefaultRpcServer.handler=n”,大约 15 个其他)
    • 没有任何线程状态的大量 IPC 客户端列表

3) 数据

  • 使用 Hive + completebulkload 批量加载。
  • 地区数量:
    • 13 个区域意味着每个 RS 有 2 到 3 个大区域,这是预期的。
    • 强制执行主要压缩后,扫描性能保持不变。
    • 区域大小相当均匀:11 个区域为 4,5Go (+/-0.5),2 个区域为 2,5Go

4)HBase配置

  • 大多数配置保持不变。

    • HBase env 仅指示 JMX 控制台的端口
    • HBase-site 对 Phoenix 的设置很少
  • 一些对我来说看起来不错的参数

    • hbase.hregion.memstore.block.multiplier
    • hbase.hregion.memstore.flush.size:134217728 字节(134Go)
    • Xmx 的 Xmn 比率:.2 Xmn 最大值:512 Mb Xms:6144m
    • hbase.regionserver.global.memstore.lowerLimit:0.38
    • hbase.hstore.compactionTreshold:3
    • hfile.block.cache.size : 0.4(块缓存大小占堆的百分比)
    • 最大 HStoreFile (hbase.hregion.max.filesize) : 10 go (10737418240)
    • 客户端扫描器缓存:100 行 Zookeeper 超时:30 秒
    • 客户端最大键值大小:10mo
    • hbase.regionserver.global.memstore.lowerLimit:0.38
    • hbase.regionserver.global.memstore.upperLimit:0.40
    • hstore 阻止存储文件:10
    • hbase.hregion.memstore.mslab.enabled :
    • 启用 hbase.hregion.majorcompaction.jitter :0.5
  • 在不影响性能的情况下尝试了以下配置更改

    • hbase-env.sh :尝试增加 HBASE_HEAPSIZE=6144(因为它默认为 1000)
    • hbase-site.xml:
      • hbase.ipc.server.callqueue.read.ratio:0.9
      • hbase.ipc.server.callqueue.scan.ratio:0.9

5)日志没什么用

猫 hbase-hbase-master-cox.log | grep "2015-05-11.*错误"

cat hbase-hbase-regionserver-*.log | grep "2015-05-11.*错误"

不打印

打印警告显示不相关的错误

2015-05-11 17:11:10,544 WARN [B.DefaultRpcServer.handler=8,queue=2,port=60020] shortcircuit.ShortCircuitCache: ShortCircuitCache(0x2aca5fca): 无法加载 1074749724_BP-2077371184-184.10.17.645-14237578 到期到 InvalidToken 异常。

2015-05-11 17:09:12,848 警告 [regionserver60020-smallCompactions-1430754386533] hbase.HBaseConfiguration:配置选项“hbase.regionserver.lease.period”已弃用。相反,使用“hbase.client.scanner.timeout.period”

0 投票
1 回答
1085 浏览

hbase - Google Cloud Bigtable 协处理器支持

Google Cloud BigTable 不支持协处理器:

不支持协处理器。您不能创建实现接口 org.apache.hadoop.hbase.coprocessor 的类。

https://cloud.google.com/bigtable/docs/hbase-differences

我可以理解协处理器需要在每个 Tablet (RS) 节点上部署客户代码(jar)。尽管如此,Endpoint 协处理器对于 HBase 应用程序在某些情况下确保数据局部性至关重要。Apache Phoenix 等 HBase 扩展依赖于 Observer 协处理器来维护二级索引,因此缺乏协处理器支持对我来说似乎是一个主要的不兼容领域。

将来是否可能支持协处理器?在 BigTable 平板电脑上执行自定义 Java“存储过程”有哪些变通方法?

更新 1: Apache Phoenix coprosessors 列表:

  • GroupedAggregateRegionObserver
  • 索引器
  • 元数据端点实现
  • 元数据区域观察者
  • 扫描区域观察者
  • 序列区域观察者
  • 服务器缓存端点实现
  • UngroupedAggregateRegionObserver
0 投票
0 回答
1292 浏览

hbase - Apache Phoenix:关于 write-heavy table 上的二级索引 upsert 性能

我想大致了解具有二级索引的写入重表的 upsert 性能。

索引有表的所有字段(其实非行键字段的个数是1,就是varbinary类型)。

我进行了粗略的测试,结果如下:

  • 具有二级索引的表:4.3 分钟
  • 没有二级索引的表:53 秒

测试是使用带有 PhoenixInputFormat 的 Apache Spark 程序完成的。

二级索引是全局可变的。

对我来说,与没有二级索引的表相比,结果有点太慢了。

它慢了大约 4.7 倍。我希望它会在 2 ~ 2.5 倍左右。(因为它实际上写入 2 个表)

这是典型的性能损失吗?

如果是这样,我认为我必须为写繁重的表放弃一个(全局的、可变的)二级索引。

更新

我的测试集群由 1 个名称节点和 3 个数据节点组成。(很小)

数据节点机器规格如下:(绝不强大)

  • CPU:Core i7-4790(核心数:4,线程数:8)
  • 内存:32GB(8GB x 4)
  • 硬盘:8TB (2TB x 4)
  • 网络:1Gb

软件规格:

  • Hadoop:Hortonworks HDP 2.2(Hadoop 2.6)
  • 阿帕奇星火:1.3.0
  • 阿帕奇凤凰:4.3.1

更新的记录数约为 600 万。它只有一列(数据类型为 varbinary)而且很小。(远低于1k)

0 投票
1 回答
524 浏览

phoenix - Apache Phoenix 的行为有限制

如果有人可以帮助我解决有关 pheonix 功能的问题,我将不胜感激。

创建了一个凤凰表并插入了 100,000 条记录(假设这些记录分布在不同的区域服务器上)。

现在,当我发出一个限制为 n.. 的选择查询时,像这样

凤凰的行为是什么?

  • 它是否在服务器端读取所有数据(来自所有区域服务器),然后对数据集应用限制并将 1000 条记录发送到客户端?

或者

  • 它是否将所有数据集带到客户端然后应用限制?
0 投票
2 回答
774 浏览

apache - 使用 Apache Phoenix 查询 Hbase

我是 Apache Phoenix 的新手,

是否可以在 Phoenix 中使用“正则表达式”查询 Hbase 表。我的 Apache Phoenix 位于 Hbase 之上(无 MapReduce)。例如,我需要查询以Er*

保罗

0 投票
1 回答
209 浏览

java - 从 Phoenix 4.0.0 升级到 4.3.1 时出现连接错误

  1. 目前使用 phoenix 4.0.0 孵化客户端和服务器。
  2. 升级到 4.3.1(最新)
  3. 尝试在命令行中使用客户端(使用 ./sqlline.py)进行连接时,连接无法成功并引发以下错误。

    错误:错误 1013 (42M04):表已存在。tableName=SYSTEM.CATALOG (state=42M04,code=1013) org.apache.phoenix.schema.NewerTableAlreadyExistsException: ERROR 1013 (42M04): 表已经存在。表名=SYSTEM.CATALOG

删除 SYSTEM.CATALOG 表有效,但这不是预期的解决方案。

问题的解决方案/解决方法是什么?

0 投票
1 回答
42 浏览

java - 关于 sql 生成更新

我们正在尝试使用我们想要在 xml 文件中给出的逻辑生成 phoenix 的 upsert 语句。我们正在考虑使用 antlr 或字符串模板,请告诉我们哪个更好用。或者我们可以使用的任何其他方法 输入数据被认为是从 xml 文件中给出的。Antlr 或字符串模板将读取该 xml,然后生成 upsert 语句。我们想到的IN xml

0 投票
2 回答
3570 浏览

hbase - 凤凰的盐桶数量如何选择?

Apache Phoenix 允许创建将数据分布在区域服务器上的加盐表。例如

为了使用此功能,必须选择多个盐桶。这个盐桶数量怎么选?它应该基于区域服务器的数量吗?如果我打算稍后添加更多区域服务器怎么办?

0 投票
1 回答
752 浏览

java - nodejs 通过 phoenix 和 druid 连接到 hbase

我有 Phoenix 安装了 phoenix-4.3.1 并通过 sqline 成功将其连接到 hbase 既在属于集群一部分的机器上,也在不属于集群且没有 hadoop 组件的机器上;只需访问zookeeper sqlline访问就可以了,但是通过druid通过app(npm)连接会出错

我找到了 npm https://github.com/gaodazhu/phoenix-client

我得到以下