草庐IT

搞机分区

全部标签

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

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

hadoop - 如何对 Hive 分区表使用 insert 语句?

我有一个配置单元表dynpart。idintnamechar(30)citychar(30)thisdaystring#PartitionInformation#col_namedata_typecommentthisdaystring按'thisday'分区,数据类型为STRING。如何将单个记录插入特定分区的表中。我知道有加载命令可以将整个文件数据加载到配置单元表中。我只想知道如何为分区表编写Insert语句。我尝试编写如下命令,但这是从另一个表中获取数据。insertintodroplaterpartition(thisday='30/03/2017')select*fromdy

hadoop - 从分区表复制 Hive

我有一个按年、月和日分区的原始表。例如:col_1col_2col_3YEARMONTHDATEabc20170325我想创建一个新表,它是该表的子集,但仍保持原始表的分区。像这样简单的东西CREATEnew_tableASSELECT*FROMoriginal_tableWHERE(conditions);但是,由于原始表太大,我必须通过分区遍历此查询。我目前的解决方案是编写一个shell脚本,遍历所有分区并为每个分区运行单独的查询。示例:foryearin'2016''2017'doformonthin'01''02'...dofordayin'01''02'...dohive-e

apache-spark - 使用 Hive 时了解 HDFS 中的文件分布和分区

一方面,在HDFS文档中他们说:HDFSisdesignedtosupportverylargefiles.ApplicationsthatarecompatiblewithHDFSarethosethatdealwithlargedatasets.Theseapplicationswritetheirdataonlyoncebuttheyreaditoneormoretimesandrequirethesereadstobesatisfiedatstreamingspeeds.HDFSsupportswrite-once-read-manysemanticsonfiles.Atypi

hadoop - 如何删除 Hive 中每个节点的分区限制?

我在Hive中有一个分区表。对于每个节点,我将分区限制设置为2000。sethive.exec.max.dynamic.partitions.pernode=2000现在到了2000年之后,我面临一个问题。所以我想了解是否有可能取消此限制?只是我不想为hive.exec.max.dynamic.partitions.pernode设置任何值,它应该处理任意数量的分区。有人可以帮我解决这个问题吗? 最佳答案 我以前遇到过这个问题。在SQL末尾添加distributebypartition_column。insertoverwritet

hadoop - HIVE 将覆盖插入分区表

我在分区表上运行了插入覆盖。命令后,例如创建以下分区。a,b,c,d,e现在,当我重新运行插入覆盖表时,但这次使用完全不同的数据集。例如,在第二次插入后,创建了以下分区。f,g,h,i,j问题-第二次插入的数据是否会覆盖属于第一次插入的数据。第二次插入后,我仍然在HDFS中看到文件夹a、b、c、d、e。但是当我通过HIVE查询它们时,分区a、b、c、d、e没有出现。这是插入覆盖表的预期行为吗?或者我在这里遗漏了什么吗? 最佳答案 这里有一些示例脚本及其效果。假设我们有一个包含三个字段的表SOME_TABLE,A、B和C,以及两个分区

hadoop - 插入到配置单元分区表中 SemanticException

首先我创建了一个Hive分区表:hive>createtablepartition_table>(sidint,snamestring,ageint)>partitionedby(sexstring)>rowformatdelimitedfieldsterminatedby',';OKTimetaken:1.232seconds表格描述如下:hive>descpartition_table;OKsidintsnamestringageintsexstring#PartitionInformation#col_namedata_typecommentsexstringTimetaken:

hadoop - Hadoop 上的 MRJob 和 mapreduce 任务分区

我正在尝试使用PythonMRJob库执行mapreduce作业,但在将其正确分布到我的Hadoop集群时遇到了一些问题。我相信我只是缺少mapreduce的基本原则。我的集群是一个小型的,一主一从测试集群。基本思想是我只是请求一系列带有参数的网页,对它们进行一些分析并返回网页上的一些属性。我的map函数的输入只是一个带有如下参数的URL列表:http://guelph.backpage.com/automotive/?layout=bla&keyword=towinghttp://guelph.backpage.com/whatever/?p=blahhttp://semanticr

hadoop - map 输出分区的大小?

假设我们有3个映射器(m1、m2和m3)和2个缩减器(r1和r2)。每个reducer从每个mapper生成的文件中获取其输入分区。从作业历史中,我可以提取每个reduce任务的总输入,但我想知道每个映射器对该reducer输入的贡献?例如,reducerr1将收到一个INPUT_r1,例如:INPUT_r1=(从m1获取的分区)+(从m2获取的分区)+(从m3获取的分区)我想知道来自映射器的那些分区的大小? 最佳答案 为了从映射器中找到分区的大小,需要考虑几件事。首先,我们应该了解,在Hadoop中,分区器在组合器之前执行,因此如

hadoop - 已经分区的输入数据能否改进 hadoop 处理?

我知道在mapper和reducer之间的中间步骤中,hadoop会在数据到达reducer的途中对数据进行排序和分区。由于我在映射器的输入中处理已经分区的数据,有没有办法利用它并可能加速中间处理,从而不再进行排序或分组?添加一些细节:当我在S3上存储数据时,假设我的存储桶中只有两个文件。第一个文件将存储下半部分用户ID的记录,另一个文件将存储上半部分用户ID的值。每个文件中的数据不一定排序,但保证与用户有关的所有数据都位于同一个文件中。如:\mybucket\file1\mybucket\file2File1content:User1,ValueXUser3,ValueYUser1,