草庐IT

平分分区

全部标签

hadoop - Hive 分区表的记录数

我在Hive中有一个名为“transaction”的表,该表分区在一个名为“DS”的列上,该列将包含类似“2018-05-05”的数据,“2018-05-09”、“2018-05-10”等此表是在完成当天的一夜之间填充的。在任何时候,该表都会有前一天的数据当我像这样查询交易表时SELECTCOUNT(*)FROMtrasactionWHEREDS>="currentdate";我明白了0行-这是正确的,因为尚未加载当前和future日期的数据当我运行以下查询时SELECTDISTINCTDSFROMtrasactionWHEREDS>="currentdate";我明白了2018-05

hadoop - AWS Athena 在分区加载后创建缩进并将值移动到错误的列中

我遇到了以下问题:我在没有分区的HDFS中的EMR集群中创建了一个Hive表并向其加载数据。我根据第1段中的表,但带有日期时间的分区列:PARTITIONEDBY(年STRING,月STRING,日STRING)。我将非分区表中的数据加载到分区表中并获得有效结果。我创建了一个Athena数据库和具有与Hive表相同结构的表。我从本地HDFS复制分区文件,并通过awss3sync将所有文件传输到S3空存储桶中。所有文件均已无误地传输,并且传输顺序与HDFS中Hive目录中的顺序相同。我通过MSCKREPAIRTABLE加载分区并且在输出中没有得到任何错误。之后我发现很多值都有缩进,例如需

Java spark 到 hive 表插入到动态分区异常

我有以下代码,其中我将数据插入到表txnaggr_rt_fact中,该表有2列分区txninterval和intervaltype。我在sparksql中启用了动态分区。如果分区已经存在则没有问题。数据正在插入到表中,但如果分区不存在,则会出现异常,但如果分区已经存在,则没有问题。SparkSessionspark=SparkSession.builder().appName("JavaSparkHiveExample").config("spark.sql.warehouse.dir","hdfs://localhost:8020/user/hive/warehouse").conf

hadoop - 创建比 reducer 更多的分区

在我的单机上进行本地开发时,我相信reducer的默认数量是6。在特定的MR步骤中,我实际上将数据分成n个分区,其中n可以大于6。根据我的观察,看起来实际上只有6个分区得到处理,因为我只看到6个特定分区的输出。几个问题:(a)是否需要将reducer的数量设置为大于分区的数量?如果是这样,我可以在运行Mapper之前/期间/之后执行此操作吗?(b)为什么其他分区没有排队?有没有办法等待一个reducer处理完一个分区,然后再处理另一个分区,这样无论reducer的实际数量是否小于分区数量,都可以处理所有分区? 最佳答案 (a)不可以

hadoop - Hadoop 中 Mappers 的分区输出

这是一个关于Hadoop的非常基本的问题:假设我有3个mappers和2个reducers。映射器产生了以下输出:Mapper1output:{1->"a1",2->"b1"},Mapper2output:{2->"b2",3->"c2"},Mapper3output:{1->"a3",3->"c3"}现在,据我所知,框架将输出分成两部分(每个reducer一个部分)。框架是否在分区之前对所有输出进行排序?reducers是否有可能获得以下输入?Reducer1input:{1->"a1",2->"b1","b2"}Reducer2input:{1->"a3",3->"c2","c3"

hadoop - Hive 中分区表的用途是什么?

我知道分区表用于水平分配负载,但它们的具体用途是什么?谁能用一个简单的例子向我解释一下? 最佳答案 分区允许Hive访问您的数据子集,而无需读取所有数据。这是为什么这可能有用的具体示例。为了使这一点易于理解,我的解释非常精简,如果您想要的不仅仅是我试图提供的表面层面的理解,我建议您阅读其他地方的Hive分区。您正在以每天~1TB的速率接收带时间戳的数据。您有100天前的数据,总数据负载为~100TB。很多时候,您希望汇总过去10天的一些数据。如果不进行分区,您将不得不读入所有100TB数据,尽管其中大部分数据无论如何都会被Hive忽

hadoop - 仅基于月/年对配置单元表进行分区或分桶以优化查询

我正在构建一个包含大约40万行消息传递应用数据的表。当前表的列看起来像这样:消息标识符(整数)|发件人用户ID(整数)|other_col(字符串)|other_col2(int)|create_dt(时间戳)我将来要运行的很多查询都将依赖于涉及create_dt列的where子句。因为我预计这张表会增长,所以我想立即尝试优化它。我知道分区是一种方式,但是当我根据create_dt对其进行分区时,结果分区太多,因为我的每个日期都可以追溯到2013年11月。有没有办法改为按日期范围进行分区?每3个月分区一次怎么样?甚至每个月?如果这是可能的-我将来可能有太多分区导致效率低下吗?还有哪些其

hadoop - 无法将数据加载到配置单元中的分区表中

我无法将数据加载到分区表中,因为它显示“动态分区严格模式需要至少一个静态分区列。要关闭此功能,请设置hive.exec.dynamic.partition.mode=nonstrict“即使在设置sethive.exec.dynamite.partition.mode=nonstrict时也会出现上述错误;配置单元>设置hive.exec.dynamite.partition=true;这些参数我得到了同样的错误。请建议我更好的解决方案。提前致谢; 最佳答案 你有各种各样的错别字(还有一种很有趣的把事情搞砸的倾向):hive.exe

hadoop - 在 spark yarn 集群中,容器如何工作取决于 RDD 分区的数量?

我有一个关于ApacheSpark(yarn集群)的问题虽然在这段代码中,创建了10个分区但是在yarncluster中,只需要3个contatinervalsc=newSparkContext(newSparkConf().setAppName("SparkCount"))valsparktest=sc.textFile("/spark_test/58GB.dat",10)valtest=sparktest.flatMap(line=>line.split("")).map(word=>(word,1))在sparkyarn集群中,容器如何工作取决于RDD分区的数量?*因为我只有一点

hadoop - 自定义分区程序与 MultipleOutputFormat

我是mapreduce的新手,我想知道使用自定义分区器根据特定条件创建多个输出与Mapreduce中的MultipleOutputs概念有什么区别。 最佳答案 使用自定义分区,您会将数据发送到不同的reducer,每个reducer将写入一个文件,其中包含由它处理的所有数据。part-r-00001,part-r-00002...使用MiltipleOutputs,每个reducer都可以使用自定义名称写入不同的文件(多个输出)。Tag1-r-00001,Tag2-r-00001,Tag1-r-00002,Tag2-r-00002.