使用EC2 datastax ami评估 DSE 3.1.3 Cassandra 。
测试设置
- 5 x m1.xlarge 一次测试:4vcpus、15G、4x420G 实例存储。
- 另一个 5 x hi1.4xlarge:16vcpus、60G、2x1TB SSD 实例存储。
数据
- 5000+ apache 日志文件,约 60GB,60MM 行。
工作流程
- 通过 dse hadoop fs -put 加载到 CFS
- 使用 RegexSerDe 从 CFS 加载到 Hive。
- 通过键空间日志中的 CQL 在 Cassandra 中创建事件表。
- 通过 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
我希望这是一个配置问题。我也愿意接受其他建议。但是,如果它可以像在其他堆栈上一样工作,那么这种方法肯定非常简单。