Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra Hadoop-是否可以读取和写入同一列族_Hadoop_Cassandra - Fatal编程技术网

Cassandra Hadoop-是否可以读取和写入同一列族

Cassandra Hadoop-是否可以读取和写入同一列族,hadoop,cassandra,Hadoop,Cassandra,使用Cassandra 1.1,Hadoop作业可以读取列Family X,同时对其进行“更新”。也就是说,指定X作为输入列族,然后 在映射步骤中,更新到相同的CF(例如通过Hector) 或者,如果不可能为#1,则在reduce步骤中更新到相同的CF(直接通过Hector,或者通过将CF指定为输出列族) 我们试图做的是:我们有(可能非常宽)行,我们将在其中阅读。在map()方法中,我们迭代该行的列,当处理每一列时,我们不再需要该列,因此我们计划通过在Cassandra中用TTL=1秒更新它来“

使用Cassandra 1.1,Hadoop作业可以读取列Family X,同时对其进行“更新”。也就是说,指定X作为输入列族,然后

  • 在映射步骤中,更新到相同的CF(例如通过Hector)
  • 或者,如果不可能为#1,则在reduce步骤中更新到相同的CF(直接通过Hector,或者通过将CF指定为输出列族) 我们试图做的是:我们有(可能非常宽)行,我们将在其中阅读。在map()方法中,我们迭代该行的列,当处理每一列时,我们不再需要该列,因此我们计划通过在Cassandra中用TTL=1秒更新它来“终止”它

    如果在map步骤中不可能或不建议这样做,那么我们准备在reduce步骤中这样做。但是,我们更喜欢在map步骤中执行,因为在reduce步骤中执行这项操作意味着我们需要为reduce()方法提供足够的信息来识别我们试图过期的行+列。这意味着我们的映射步骤需要在输出中包含这些信息,如果可能的话,这是我们试图避免的


    那么,是否可以使用#1或#2来执行此操作?

    首先,您可以在地图中执行任何操作或减少步骤。所以,是的,这是可能的

    可以在Reduce步骤中写入同一列族,因为Map和Reduce步骤是按顺序执行的。可以在Reduce步骤中随时更新任何列族

    关于Map:可以使用Hector/Thrift API在Map步骤中写入同一列族,但这是一种糟糕的做法。首先,因为Map步骤是专为读取数据而设计的。在映射步骤中,您将继续迭代行—它可以快速地与Hadoop中的快速低级Cassandra reader实现一起工作。有了赫克托,你的地图步骤会慢得多

    如果您想在映射步骤中删除的数据永远不会在接下来的步骤中使用,您可以,但我重复一次,在映射步骤中迭代写入数据集是一种糟糕的做法。若映射reduce作业失败(出于任何原因),则映射步骤中垃圾收集的数据可能会损坏(它们在映射步骤中被删除,但由于作业失败,reducer将永远看不到它们)

    Map Reduce rule:应该以连续方式修改迭代的所有数据。首先迭代数据集,然后修改。不要同时执行此操作

    回答你的问题,无论如何在这两种情况下都是可能的,但是#2是有效的。您应该使用Reduce步骤来写入/删除操作

    另外,您似乎正在尝试使用Hadoop作为垃圾收集器—这不是它设计的方法