草庐IT

分区Partition

全部标签

hadoop - 即使使用 Hadoop 自定义分区程序,不同的 key 也会进入 1 个文件

我的一期快用完了。我正在尝试从Reducer获取不同key的不同文件。分区器publicclasscustomPartitionerextendsPartitionerimplementsConfigurable{privateConfigurationconfiguration;@OverridepublicConfigurationgetConf(){returnconfiguration;}publicintgetPartition(Textkey,NullWritablevalue,intnumPartitions){returnMath.abs(key.hashCode())

apache-spark - Spark Streaming to Hive,每个分区的小文件太多

我有一个批处理间隔为2分钟(可配置)的Spark流作业。此作业从Kafka主题读取并创建数据集并在其上应用模式并将这些记录插入到Hive表中。Spark作业在Hive分区中每个批处理间隔创建一个文件,如下所示:dataset.coalesce(1).write().mode(SaveMode.Append).insertInto(targetEntityName);现在传入的数据不是那么大,如果我将批处理持续时间增加到10分钟左右,那么即使我最终也可能只获得2-3mb的数据,这远小于block大小。这是SparkStreaming中的预期行为。我正在寻找有效的方法来进行后处理以合并所有

apache-spark - HadoopPartitions 的 Spark 的默认分区是如何计算的?

我正在阅读JacekLaskowski'sonlinebookaboutApacheSpark,关于分区,他说Bydefault,apartitioniscreatedforeachHDFSpartition,whichbydefaultis64MB我对HDFS不是很熟悉,但是我在复制这个声明时遇到了一些问题。我有一个名为Reviews.csv的文件,它是大约330MB的亚马逊食品评论文本文件。给定默认的64MBblock,我希望ceiling(330/64)=6分区。但是,当我将文件加载到我的SparkShell中时,我得到了9个分区:scala>valtokenized_logs=

hadoop - HIVE中如何提高从非分区表加载数据到ORC分区表的性能

我是Hive查询的新手,我正在寻找从Hive表中检索数据的最佳实践。我们启用了TeZ执行引擎并启用了矢量化。我们想从Hive表进行报告,我从TEZ文档中读到它可以用于实时报告。场景来self的WEB应用程序,我想在UI上显示HiveQuerySelect*fromHive表的结果,但是对于任何查询,在hive命令提示符中至少需要20-60秒,即使hive表有60GB数据。1)谁能告诉我如何通过查询Hive表来显示实时报告并在10-30秒内立即在UI上显示结果2)我们发现的另一个问题是,当我们将未分区表中的数据转储到ORC时,最初我们有一个未分区表指向HDFS中的一个Blob/文件,它的

java - SPARK 分区和 Worker Core 之间有什么区别?

我使用StandaloneSparkCluster来处理多个文件。当我执行驱动程序时,数据在使用它的核心的每个工作人员上进行处理。现在,我已经阅读了有关Partitions的内容,但我不知道它是否与WorkerCores不同。设置核心数和分区数有区别吗? 最佳答案 简单View:分区与内核数当您调用RDD的操作时,为其创建了一个“工作”。因此,Job是提交给spark的工作。作业根据洗牌边界分为“STAGE”!!!每个阶段根据RDD上的分区数进一步划分为任务。所以Task是spark的最小工作单元。现在,这些任务中有多少可以同时执行

hadoop - 将 Dataframe 存储到 spark 中的配置单元分区表

我正在尝试将从kafka主题传入的数据流存储到配置单元分区表中。我能够将dstream转换为数据帧并创建一个配置单元上下文。我的代码看起来像这样valhiveContext=newHiveContext(sc)hiveContext.setConf("hive.exec.dynamic.partition","true")hiveContext.setConf("hive.exec.dynamic.partition.mode","nonstrict")newdf.registerTempTable("temp")//newdfismydataframenewdf.write.mode

hadoop - 如何使用 Spark SQL 创建分区表

我知道我们可以通过以下方式创建一个自动分区发现表CREATETABLEmy_tableUSINGcom.databricks.spark.avroOPTIONS(path"/path/to/table");但这需要将数据路径更改为partition_key=partition_value格式/path/to/table/dt=2016-10-09/path/to/table/dt=2016-10-10/path/to/table/dt=2016-10-11但是数据结构是这样的:/path/to/table/2016-10-09/path/to/table/2016-10-10/path

hadoop - Hadoop 分区程序中的自定义计数器

我想在里面捕获一些关于键和它们的值的信息自定义分区器(甚至是默认的HashPartitioner)。我可以通过访问“上下文”变量在映射器和缩减器中使用自定义计数器。但是,在分区程序内部无法访问“上下文”变量。有没有办法:-1-从分区程序访问“上下文”变量?要么-2-如何给Partitioner添加计数器?谢谢。 最佳答案 通过分区器的每个键/值对要么(1)由映射器写入上下文,要么(2)将传递给reducer的reduce()方法。您可以将代码放在这两个地方中的任何一个,以编写自定义计数器并将其递增到上下文中。如果您必须在分区器中编写

Hadoop 自定义分区器

我想知道以下方面是否可以在Hadoop中完成:假设我有3台机器,它将运行3个map函数和3个reduce函数,在正常情况下,每台机器上运行一个map和一个reduce函数。我有一组键:A、B、C、D、E、F、G、H、I。在映射阶段之后,是否可以强制所有具有键A、B、C的值将始终驻留在机器1上,而所有具有键D、E、F的值将始终驻留在机器2等?目前我使用基于hash(key)的分区器。此作业将运行不止一次,我不想在机器1上只在机器3上使用键G、H、I的值。 最佳答案 使用自定义分区器,您可以定义A、B和C都将发送到同一个reducer,

hadoop - Hive修改分区表数据

问题:一列值为空。它应该是'ab'。不幸的是我写了''而不是'ab'。我的表是分区表。有什么办法可以改变吗?我找到了下面的方法。但它似乎效率低下。像我的表一样创建一个临时表使用插入覆盖。从我的旧表中读取数据并写入新表。我正在使用case语句将''更改为'ab'然后将我的临时表更改为原始表。我正在寻找类似更新分区和msck的解决方案。有什么办法吗? 最佳答案 您可以通过这种方式覆盖单个分区:sethive.exec.dynamic.partition=true;sethive.exec.dynamic.partition.mode=n