0

使用EC2 datastax ami评估 DSE 3.1.3 Cassandra 。

测试设置

  1. 5 x m1.xlarge 一次测试:4vcpus、15G、4x420G 实例存储。
  2. 另一个 5 x hi1.4xlarge:16vcpus、60G、2x1TB SSD 实例存储。

数据

  • 5000+ apache 日志文件,约 60GB,60MM 行。

工作流程

  1. 通过 dse hadoop fs -put 加载到 CFS
  2. 使用 RegexSerDe 从 CFS 加载到 Hive。
  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 };

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

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

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

4

1 回答 1

2

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

于 2013-10-03T18:47:17.987 回答