Cassandra和MapReduce - 最小的设置要求

Mac*_*las 5 hadoop mapreduce cassandra

我需要在我的Cassandra集群上执行MapReduce,包括数据局部性,即.每个作业仅查询属于运行作业的本地Casandra节点的行.

关于如何在较旧的Cassandra版本(0.7)上设置Hadoop for MR的教程已经存在.我找不到当前版本的内容.

在这方面,自0.7以来发生了什么变化?

最小化设置需要哪些软件模块(Hadoop + HDFS + ...)?

我需要Cassandra Enterprise吗?

Mac*_*las 14

Cassandra包含一些足以与Hadoop集成的类:

  • ColumnFamilyInputFormat - 这是Map函数的输入,当使用Cassandra的随机分区器时,它可以读取单个CF中的所有行,或者当与Cassandra的有序分区器一起使用时,它可以读取行范围.Cassandra集群具有环形形式,其中每个环部分负责具体的关键范围.输入格式的主要任务是将Map输入划分为可以并行处理的数据部分 - 这些部分被称为InputSplits.在Cassandra的情况下,这很简单 - 每个环范围都有一个主节点,这意味着输入格式将为InputSplit每个环元素创建一个,并且它将导致一个Map任务.现在我们想在存储数据的同一主机上执行Map任务.每个都InputSplit记住其环部分的IP地址 - 这是负责此特定密钥范围的Cassandra节点的IP地址.JobTracker将创建Map任务表单InputSplits并将其分配给TaskTracker执行.JobTracker将尝试找到TaskTracker哪个具有相同的IP地址InputSplit- 基本上我们必须从TaskTrackerCassandra主机开始,这将保证数据的本地性.
  • ColumnFamilyOutputFormat - 这为Reduce功能配置上下文.这样结果就可以存储在Cassandra中
  • 所有Map函数的结果必须在它们被传递到reduce函数之前组合在一起 - 这称为shuffle.它使用本地文件系统 - 从Cassandra的角度来看,这里没什么必须做的,我们只需要配置本地临时目录的路径.此外,没有必要用其他东西替换这个解决方案(比如坚持使用Cassandra) - 这些数据不必复制,Map任务是幂等的.

基本上使用提供的Hadoop集成可以在数据所在的主机上执行Map作业,而Reduce函数可以将结果存储回Cassandra - 这就是我所需要的.

执行Map-Reduce有两种可能性:

  • org.apache.hadoop.mapreduce.Job - 这个类在一个进程中模拟Hadoop.它执行Map-Resuce任务并且不需要任何其他服务/依赖项,它只需要访问临时目录来存储来自shuffle的map job的结果.基本上我们不得不呼吁招聘类几制定者,其中包含的东西像Map任务类名,Reduce任务,输入格式,卡桑德拉连接,当安装结束后job.waitForCompletion(true)已被称为-它开始的map-reduce任务和结果等待.该解决方案可用于快速进入Hadoop世界,并进行测试.它不会扩展(单个进程),它将通过网络获取数据,但仍然 - 它可以开始.
  • 真正的Hadoop集群 - 我还没有设置它,但据我所知,上一个示例中的Map-Reduce作业可以正常工作.我们还需要HDFS,它将用于在Hadoop集群中分发包含Map-Reduce类的jar.