草庐IT

hadoop - Hive QL - 在另一个表中使用键的子集行

我想用表B中出现的键对表A的所有行进行子集化。表A-IdnXY...12**13**14**表B-IdnABC...12***12***14***我想选择TableA中的所有元素,键出现在TableB中。以下SQL查询在Hive中不起作用-select*fromTableAwhereIdnin(selectdistinctIdnfromTableB)a;还有其他方法吗?可以在一个查询中完成吗?请注意,两个表的Idn都不需要是唯一的。 最佳答案 有点像SEMIJOIN应该这样做:SELECT*FROMTableALEFTSEMIJOI

hadoop - Hadoop 中特定键的值太多

我在Hadoop上的MapReduce中编写了K-Means聚类代码。如果我的集群数量很少,请考虑2,如果数据非常大,则整个数据将分为两组,并且每个Reducer都会为特定键(即集群质心)接收太多值。如何解决?注意:我使用迭代方法来计算新中心。 最佳答案 在算法上,您无能为力,因为该算法的性质就是您描述的那种。在这方面,唯一的选择是使用更多的集群并将数据划分到更多的reducer,但这会产生不同的结果。因此,在我看来,您唯一可以做的就是压缩。我的意思不仅是使用Hadoop的压缩编解码器。例如,您可以找到数据的紧凑表示。例如,给每个元

sorting - 为什么 mapreduce 二次排序不在复合键的 compareTo() 上?

要执行二次排序,我们必须创建一个复合键,它扩展了WritableComparable接口(interface)并实现了compareTo()。在“Hadoop:权威指南”一书和几乎所有其他地方的博客中,排序都是基于扩展WritableComparator的单独类(书中的KeyComparator)的compare()方法进行的。compare()和compareTo()具有相同的逻辑。既然WritableComparator的compare()是用来对compositekey进行排序的,那么CompositeKey的compareTo()到底什么时候用到呢?

hadoop - Mapreduce 将值链接到每个键的列表中

我有一个在mapreduce中做的小项目,因为我是新手,所以我遇到了很多困难,所以希望得到帮助。在这个项目中,我有一个包含站点和标签的文件(每个站点有10个标签),我想通过共享标签为每个站点找到类似的站点。因此,例如3个站点,这是我的数据集site1tag1site1tag2site1tag3site1tag4site1tag5site2tag1site2tag2site2tag3site2tag11site2tag12site3tag1site3tag11site3tag13site3tag14site3tag15(对于这个例子,我只为每个站点制作了5个)。我想做的是做一个mapre

hadoop - reducer 输出的每个键的值列表的排序

我是hadoop新手,对hadoop有点迷惑。在mapreduce作业中,reducer获取每个键的值列表。我想知道,每个键值的默认顺序是什么。与从映射器中写出的顺序相同。您能否更改每个键中值的顺序(例如asc或desc)。 最佳答案 与从映射器写出的顺序相同。-是单个映射器也是如此。但是,如果您的作业有多个映射器,您可能不会看到具有相同输入的两次运行的相同顺序,因为不同的映射器可能结束时间不同。您能否更改每个键中值的顺序(例如asc或desc)-是这是使用一种称为“二级排序”的技术完成的(您可以谷歌搜索更多相关信息)。

java - 具有 "customized"键的 MapReduce

我有以下问题:我有很多键值对形式的数据。关键是一些id和值-一些文本。我的目标是将这些对象分组到文本片段以某种方式“相似”的集群中。所以它看起来像是MapReduce的任务,如果将我的文本片段作为键,并将id作为值。但是这样的键不是MapReduce使用的传统方式,并且由于我并不真正了解MapReduces框架的内部实现,所以我不确定这种方式是否有效。所以我的详细想法是:1.在Java中使用一些MapReduce(Hadoop、GridGain)2.为我的文本片段创建特殊类(比如TextKey)3.覆盖类的equals(),在这里打包文本比较逻辑(比如levenstein距离比较,或其

java - 如果让自定义分区程序为具有相同键的记录选择不同的分区会怎样?

在学习HadoopMapReduce时,我遇到了如何创建自定义Partitioner类。我明白我们需要在我们的类中定义抽象的getPartition方法。此方法应该返回当前键值对的分区号(整数)。现在,分区数将等于作业的reducetask数。如果在自定义分区程序中,编写一些逻辑来根据“值”而不是“键”来选择分区怎么办?根据我的理解,这可能意味着具有相同键(但不同值)的记录可能由不同的reduce任务处理,这不是MapReduce所保证的。这不是异常吗?为什么我们甚至需要getPartition(key,value,numPartitions)方法中的“value”参数?理解有误请指正

hadoop - 是否所有具有相同行键的数据都存储在同一个节点中?

我有一个关于hbase数据库的问题。我们首先通过定义行键、列族访问数据,最后通过列限定符访问数据。我的问题是HBase是否会将具有相同行键的所有列族一起存储在一个节点中?更新:例如,我想在map/reduce作业中乘以val1和val2。而val1和val2在数据库中的存储方式如下:Row=00000ColumnFamily:M,m000001_1234567=val1,Row=00000ColumnFamily:R,r000001_1234567=val2。我能否确保在运行map的同一节点中可以访问val1和val2? 最佳答案

java - 如何在java mapreduce hadoop中获得两个键的最大计数

我有一个包含6列的txt文件,我对第三和第四列、城市和产品感兴趣,这是一个示例:2015-01-01;09:00:00;NewYork;shoes;214.05;Amex>我需要按城市获取销量最大的产品。我已经有了按城市聚合和计算所有产品的代码,这是类映射器和类缩减器的代码:importjava.io.IOException;importorg.apache.hadoop.io.IntWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Mapper;publicclassContaMaxC

java - 扩展 Hadoop 的 TableInputFormat 以使用用于分发时间戳键的前缀进行扫描

我有一个hbase表,它的键是一个带有单字节随机前缀的时间戳来分发键,这样扫描就不会成为热点。我正在尝试扩展TableInputFormat,以便我可以在具有范围的表上运行单个MapReduce,为所有256个可能的前缀添加前缀,以便扫描具有指定时间戳范围的所有范围。但是我的解决方案不起作用,因为它似乎总是扫描最后一个前缀(127)256次。必须在所有扫描之间共享某些内容。我的代码如下。有什么想法吗?publicclassPrefixedTableInputFormatextendsTableInputFormat{@OverridepublicListgetSplits(JobCon