草庐IT

external-sorting

全部标签

sorting - mapreduce 分区内的数据是否已排序,如果是,它是如何发生的?

mapreduce分区内的数据是否已排序,如果是,如何排序?AFAIK,它是根据key分组的。如果它在内部排序,那么对所有分区内的所有数据进行排序不是一种开销吗? 最佳答案 如果您谈论的是映射器作为输入接收的输入拆分,那么不是;它们没有排序,因为这确实会产生不必要的开销。排序在map阶段结束之前开始(仅当使用reducer时),因此reduce函数的输入已排序。Partitioner定义了指定哪个reducer将处理映射器输出的标准。HashPartitioner(默认使用的Partitioner的实现)对映射器的输出键进行哈希处理

sorting - Hive 分配方式与不分配方式

这听起来很基础,但这个问题困扰了我一段时间。假设我有以下查询SELECTs.ymd,s.symbol,s.price_closeFROMstockssSORTBYs.symbolASC;在这种情况下,如果数据在符号列上分布良好,那么基于符号列进行分布是有意义的,这样所有reducer都能很好地共享数据;将查询更改为以下内容会提供更好的性能SELECTs.ymd,s.symbol,s.price_closeFROMstockssDISTRIBUTEBYs.symbolSORTBYs.symbolASC,s.ymdASC;如果我不指定distributeby子句会有什么影响?在第一个查询中

为什么“ const extern”出现错误?

以下代码正常工作:#includeexternintfoo;//Withoutconstantintfoo=42;intmain(){printf("%d\n",foo);return0;}但是,以下代码给出了一个错误:#includeconstexternintfoo;//Withconstantintfoo=42;intmain(){printf("%d\n",foo);return0;}所以,为什么constextern给出错误?看答案标准说:C11-6.7/4在同一范围内参考相同对象或函数的所有声明均应指定兼容类型constint和int对于同一对象不兼容foo在同一范围内。

hadoop - MapReduce shuffle 和 sort 阶段的复制操作

我很困惑,在Shuffle和Sort阶段,具有m个映射器和r个缩减器的作业涉及最多mr个复制操作。复制操作在什么情况下会达到最大值m*r?谁能解释一下? 最佳答案 假设您有3个映射器和1个缩减器。每个映射器任务输出1个文件(按键排序),该文件被写入map函数运行的本地文件系统。因此,我们将有3个这样的输出文件分布在集群中。由于reducer没有利用数据局部性优化,并且由于我们只有1个reducer-它需要复制每个映射器任务在网络上生成的3个不同的输出文件。因此,此场景中涉及mxn=3x1=3复制操作。

hadoop - 使用参数化位置的 Hive CREATE EXTERNAL TABLE

这按预期工作:DROPTABLEmytable;CREATEEXTERNALTABLEmytable(Dim1STRING,Dim2STRING,Dim3STRING)LOCATION'hdfs:///user/myuser/data';但这不是:setrootpath='hdfs:///user/myuser/data';DROPTABLEmytable;CREATEEXTERNALTABLEmytable(Dim1STRING,Dim2STRING,Dim3STRING)LOCATION'${hiveconf:rootpath}';失败并出现以下错误(Hive0.9.0):FAIL

hadoop - 在配置单元中创建表时 EXTERNAL 关键字的意义

如果您使用指向某个S3存储桶位置的EXTERNAL关键字创建外部表,我注意到一件事。数据已加载,您可以查询它。但是,即使我不使用EXTERNAL关键字并使用脚本的其余部分来创建表。即使这样它也能完美运行。为什么会这样?另外,它是外部表还是内部表?如果我删除此表,元数据或数据也会被删除吗?EXTERNAL一词有什么意义吗?如果我创建一个带有EXTERNAL关键字和位置的表,以及另一个没有EXTERNAL关键字但有位置的表。当我得到相同的行为时,有什么区别?createtabledummy(idint,valuestring)ROWFORMATDELIMITEDFIELDSTERMINAT

hadoop - 如何检查 sort merge bucket join 是否在 HIVE 中工作?

我想验证我的SMB连接是否有效。我可以通过日志验证映射连接,但不能通过SMB。我也通过了解释计划,但没有得到任何提示。请帮助我。 最佳答案 您可以对查询使用EXPLAINEXTENDED。到目前为止,我只能生成一个带有map-reduce的SMB映射连接。当hive正在执行SMBmapjoin时,您可以在explain的输出中的阶段计划下看到“SortedMergeBucketMapJoinOperator”。这是在我的设置中使用map-reduce生成SMB映射连接的代码片段:sethive.execution.engine=mr

hadoop - 为什么 Hive "create external table"在 S3 上将数据存储在子文件夹 "-ext-10000"下?

下面的Hive代码突然开始在一个额外的子文件夹下存储数据;DROPTABLEIFEXISTSfolder_test;CREATEEXTERNALTABLEIFNOTEXISTSfolder_test(col1STRING,col2INT,col3INT)ROWFORMATDELIMITEDFIELDSTERMINATEDBY","LOCATION's3n://bucket_name/folder_name';insertoverwritetablefolder_testselectcol1,col2,col3fromdata_tablelimit10;因此,数据不是存储在“s3n://

hadoop - 请帮助Hadoop中的Shuffle和Sorting的必要性是什么?

在一个普通的mapreducewordcount程序中,我们是否需要设置shuffle和sort的方法,或者框架会处理这个? 最佳答案 框架会处理这个。洗牌是将数据从映射器传输到缩减器的过程,缩减器按中间键(词)的升序(字典顺序)缩减数据。您可以更改默认设置,但没有必要在wordcount程序中这样做。您只需要设置一个映射器和一个缩减器以及可选的(但确实有助于提高速度)一个组合器。甚至不需要自己实现映射器和缩减器,因为hadoop自带了这样的字数映射器(TokenCounterMapper)和缩减器(IntSumReducer,也可

sorting - sort_array 按不同列排序,Hive

我有两列,一列是产品,一列是购买日期。我可以通过应用sort_array(dates)函数对日期进行排序,但我希望能够在购买日期之前对sort_array(products)进行排序。有没有办法在Hive中做到这一点?表名是ClientIDProductDate100Shampoo2016-01-02101Book2016-02-04100Conditioner2015-12-31101Bookmark2016-07-10100Cream2016-02-12101Book22016-01-03然后,为每个客户获取一行:selectclientID,COLLECT_LIST(Produc