热点使用蜂巢插入卡桑德拉



使用 EC2 datastax ami 评估 DSE 3.1.3 Cassandra。

测试设置

  1. 一次测试中的 5 个 m1.xlarge:4vcpus、15G、4x420G 实例商店。
  2. 5 x hi1.4xlarge in 另一个:16vCPU、60G、2x1TB 固态硬盘实例存储。

数据

  • 5000+ 阿帕奇日志文件,~ 60GB,60MM 行。

工作流程

  1. 通过 dse hadoop fs 加载到 CFS 中
  2. 从 CFS 加载到 Hive 中,带 RegexSerDe。
  3. 通过密钥空间日志中的 CQL 在 Cassandra 中创建事件表。
  4. 通过 INSERT INTO logs.event 从 hive 插入 Cassandra。

总体而言,前两个步骤的性能以及基本查询与其他Hadoop堆栈相当。 能够直接从 hive 简单地引用 Cassandra 表,而不必显式定义外部表,这很棒。

但是,INSERT 操作比其他常见的 Hadoop堆栈花费的时间长 3-4 倍。 我一定设置错了什么,正在寻求帮助或建议。

从基本的角度来看,很明显,我运行 hive INSERT 命令的节点的 cpu 以 12-16 的速度运行,其他 4 个节点显示 1-2 个 CPU。 此外,写入请求都发送到同一节点,没有发送到其他节点。

我的假设是hive会将工作分发(下推(到每个节点,这似乎与常见的Hadoop堆栈有关。

否则,密钥是随机的,并且数据负载在节点之间以平衡的方式增长。 密钥空间是用以下方法创建的:

CREATE KEYSPACE logs WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

查看作业跟踪器/任务详细信息,作业在节点之间拆分。 但从状态列来看,似乎所有对 cfs 的调用都通过启动作业的节点进行路由。

cfs://10.0.0.21/user/hive/warehouse/event/1:2483027968+67108864

我希望这是一个配置问题。 我也愿意接受其他建议。 但是这种方法肯定非常简单,如果它可以像在其他堆栈上一样工作的话。

感谢您的发现,我认为这是代码中的缺陷,我们将修复它。我们可能会添加一些配置,以便 Hive 可以使用不同的连接策略。例如随机、ROUND_ROBIN、粘性

最新更新