Cassandra Hadoop-是否可以读取和写入同一列族
使用Cassandra 1.1,Hadoop作业可以读取列Family X,同时对其进行“更新”。也就是说,指定X作为输入列族,然后Cassandra Hadoop-是否可以读取和写入同一列族,hadoop,cassandra,Hadoop,Cassandra,使用Cassandra 1.1,Hadoop作业可以读取列Family X,同时对其进行“更新”。也就是说,指定X作为输入列族,然后 在映射步骤中,更新到相同的CF(例如通过Hector) 或者,如果不可能为#1,则在reduce步骤中更新到相同的CF(直接通过Hector,或者通过将CF指定为输出列族) 我们试图做的是:我们有(可能非常宽)行,我们将在其中阅读。在map()方法中,我们迭代该行的列,当处理每一列时,我们不再需要该列,因此我们计划通过在Cassandra中用TTL=1秒更新它来“
那么,是否可以使用#1或#2来执行此操作?首先,您可以在地图中执行任何操作或减少步骤。所以,是的,这是可能的 可以在Reduce步骤中写入同一列族,因为Map和Reduce步骤是按顺序执行的。可以在Reduce步骤中随时更新任何列族 关于Map:可以使用Hector/Thrift API在Map步骤中写入同一列族,但这是一种糟糕的做法。首先,因为Map步骤是专为读取数据而设计的。在映射步骤中,您将继续迭代行—它可以快速地与Hadoop中的快速低级Cassandra reader实现一起工作。有了赫克托,你的地图步骤会慢得多 如果您想在映射步骤中删除的数据永远不会在接下来的步骤中使用,您可以,但我重复一次,在映射步骤中迭代写入数据集是一种糟糕的做法。若映射reduce作业失败(出于任何原因),则映射步骤中垃圾收集的数据可能会损坏(它们在映射步骤中被删除,但由于作业失败,reducer将永远看不到它们) Map Reduce rule:应该以连续方式修改迭代的所有数据。首先迭代数据集,然后修改。不要同时执行此操作 回答你的问题,无论如何在这两种情况下都是可能的,但是#2是有效的。您应该使用Reduce步骤来写入/删除操作 另外,您似乎正在尝试使用Hadoop作为垃圾收集器—这不是它设计的方法