cassandra和mapreduce-最低设置要求

t40tm48m  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(392)

我需要在我的cassandra集群上执行mapreduce,包括数据局部性,即每个作业只查询属于该作业运行的本地cassandra节点的行。
关于如何在旧的cassandra版本(0.7)上为mr设置hadoop的教程已经存在。我找不到这样的版本。
在这方面,自0.7以来发生了什么变化?
最小设置(hadoop+hdfs+…)需要哪些软件模块?
我需要Cassandra企业号吗?

amrnrhlw

amrnrhlw1#

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 -基本上我们得开始了 TaskTracker 在cassandra主机上,这将保证数据的局部性。 ColumnFamilyOutputFormat -这将为reduce函数配置上下文。这样结果就可以存储在cassandra中
所有map函数的结果必须组合在一起,然后才能传递给reduce函数-这称为shuffle。它使用本地文件系统-从cassandra的Angular 来看,这里什么都不用做,我们只需要配置本地临时目录的路径。此外,也不需要用其他方法(比如持久化cassandra)替换此解决方案—此数据不必复制,Map任务是幂等的。
基本上,使用提供的hadoop集成放弃了在数据驻留的主机上执行map作业的可能性,reduce函数可以将结果存储回cassandra—这就是我所需要的。
执行map reduce有两种可能: org.apache.hadoop.mapreduce.Job -这个类在一个进程中模拟hadoop。它执行map resuce任务,不需要任何额外的服务/依赖项,它只需要访问temp目录来存储map job的结果以进行无序排列。基本上,我们必须在job类上调用一些setter,当设置完成时,这些setter包含map task、reduce task、input format、cassandra connection的类名 job.waitForCompletion(true) 必须调用-它启动map reduce任务并等待结果。这个解决方案可以用于快速进入hadoop世界,并用于测试。它不会扩展(单个进程),它将通过网络获取数据,但仍然可以开始。
真正的hadoop集群-我还没有设置它,但据我所知,前面示例中的map reduce jobs可以正常工作。我们还需要额外的hdfs,用于在hadoop集群中分发包含map reduce类的jar。

ulydmbyx

ulydmbyx2#

是的,我也在找同样的东西,似乎企业有一个简化的hadoop集成,读这个http://wiki.apache.org/cassandra/hadoopsupport

相关问题