草庐IT

搞机分区

全部标签

hadoop - 无法更改配置单元中的分区位置

我正在尝试更改我的外部配置单元表的分区位置。我尝试运行的命令:ALTERTALBEsl_uploadsPARTITION(hivetimestamp='2016-07-2615:00:00')SETLOCATION'/data/dev/event/uploads/hivetimestamp=2016-07-2615:00:00'我得到的错误:FAILED:ExecutionError,returncode1fromorg.apache.hadoop.hive.ql.exec.DDLTask.java.net.URISyntaxException:Illegalcharacterinpa

hadoop - 如何使用 Pig 将数据存储在 HDFS 上的多个分区文件中

我有一个pig作业,它分析大量日志文件并生成一组属性和一组具有这些属性的ID之间的关系。我想将这种关系存储在HDFS上,但我希望以一种对其他Hive/Pig/MapReduce作业友好的方式来操作数据或数据子集,而无需摄取完整数据我的Pig作业的输出,因为这是大量数据。例如,如果我的关系模式是这样的:relation:{group:(attr1:long,attr2:chararray,attr3:chararray),ids:{(id:chararray)}}我真的很想能够对这些数据进行分区,将其存储在如下所示的文件结构中:/results/attr1/attr2/attr3/fil

hadoop - 用于文件写入的 Spark 分区非常慢

当使用Spark将文件写入HDFS时,这在不使用分区时相当快。相反,当我使用分区写入文件时,写入延迟增加了~24倍。同一个文件,不分区写入大约需要600ms。按Id分区写入(将生成恰好1.000个分区,因为文件中有1.000个id)大约需要14秒。你们有没有同样的经历,写一个分区文件需要很长时间?根本原因是什么,也许Spark需要为每个分区创建1.000个文件夹和文件?您知道如何加快这一步吗?valmyRdd=streamedRdd.map{case((id,metric,time),value)=>Record(id,metric,getEpoch(time),time,value)

hadoop - HDFS 与 HIVE 分区

这可能是一件简单的事情,但我正在努力寻找答案。当数据加载到HDFS时,其分布并加载到多个节点中。数据被分区和分布。对于HIVE,有一个单独的选项来对数据进行分区。我很确定,即使您没有提及PARTITION选项,在加载配置单元表时,数据也会被拆分并分发到集群上的不同节点。在这种情况下,此命令有什么额外好处。 最佳答案 总结评论和Hadoopv1-v2.x:逻辑分区,例如。与字符串中的日期或字段相关,如上面的评论中所写,只能在hive、hcat或在hadoop之上工作的另一个sql或并行引擎中使用支持分区的文件格式(Parquet、OR

sql - 在现有配置单元表上添加分区

我正在处理一个大的hive表(超过5000亿条记录)。处理速度太慢,我想加快速度。我认为通过添加分区,该过程可能会更有效率。谁能告诉我该怎么做?请注意,我的表已经存在。我的table:createtableT(nomstring,prenomstring,...datestring)按日期字段分区。谢谢 最佳答案 SEThive.exec.dynamic.partition=true;SEThive.exec.dynamic.partition.mode=nonstrict;INSERTOVERWRITETABLEtable_nam

hadoop - 如何(仅)按时间戳列的一部分对配置单元表进行分区?

假设我有一个Hive表,其中包含一个TIMESTAMP列,该列经常(几乎总是)包含在查询的WHERE子句中。通过TIMESTAMP字段对该表进行分区是有意义的;但是,为了保持合理的基数,按天进行分区(而不是按TIMESTAMP的最大分辨率)是有意义的。实现此目标的最佳方法是什么?我应该在上面创建一个额外的列(DATE)和分区吗?或者有没有办法在不创建重复列的情况下实现分区? 最佳答案 它不是一个新列,而是一个伪列,您应该重新创建您的表并添加分区规范,如下所示:createtabletable_name(idint,namestrin

hadoop - 将路径文件加载到分区表

我正在尝试通过运行以下命令将文件本地加载到Hive中:LOADDATAINPATH'/data/work/hive/staging/ExampleData.csv'INTOTABLE表名;这给了我错误:SemanticException[Error10062]:Needtospecifypartitioncolumnsbecausethedestinationtableispartitioned(state=42000,code=10062)AnanswerIfound建议创建一个中间表,然后让动态分区启动以加载到分区表中。我创建了一个匹配数据的表并将其截断:createtablete

sql - Hive 优化器对于涉及分区表的连接表现不佳

我使用的是Hive版本0.7.1-cdh3u2我有两个大表(比方说)A和B,都按天分区。我正在运行以下查询selectcol1,col2fromAjoinBon(A.day=B.dayandA.key=B.key)whereA.day='2014-02-25'当我查看mapreduce任务的xml文件时,我发现mapred.input.dir包括A/2014-02-25和B所有天的所有hdfs目录,而不仅仅是特定的一天('2014-02-25').这需要花费大量时间和更多的reduce任务。我也试过用selectcol1,col2fromAjoinBon(A.day=B.dayandA

java - 在 map reduce 中使用自定义分区程序应该遵循哪个逻辑来解决这个问题

如果文件中的键分布是99%的单词以'A'开头,1%的单词以'B'到'Z'开头,并且您必须计算每个字母开头的单词数,您将如何计算有效地分发您的key? 最佳答案 解决方案1:我认为要走的路是组合器,而不是分区器。组合器将聚合以字母“A”开头的单词的本地总和,然后将部分总和(而不是始终为数字1)发送给缩减器。解决方案2:但是,如果您坚持为此使用自定义分区器,您可以简单地在一个单独的reducer中处理以字母“A”开头的单词,而不是所有其他单词,即,专用一个reducer仅适用于以字母“A”开头的单词。解决方案3:此外,如果您不介意“作弊

hadoop - PySpark 重新分区 RDD 元素

我有一个spark作业,它从Kafka流中读取数据并为流中的每个RDD执行一个操作。如果RDD不为空,我想把RDD保存到HDFS,但是我想为RDD中的每个元素创建一个文件。我找到了RDD.saveAsTextFile(file_location)将为每个分区创建一个文件,因此我试图更改RDD,使每个分区仅包含一个元素。这是我正在尝试做的一个例子data=sc.parallelize(['1','2','3','4','5','6','7','8','9','0'])data.glom().collect()#Produces[['1','2','3','4','5'],['6','7'