hive中的distribute by是控制在map端如何拆分数据给reduce端的。
hive会根据distribute by后面列,根据reduce的个数进行数据分发,默认是采用hash算法。
对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。
hive> select * from test09;
OK
100 tom
200 mary
300 kate
400 tim
Time taken: 0.061 seconds
hive> insert overwrite local directory ‘/home/hjl/sunwg/ooo’ select * from test09 distribute by id;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Defaulting to jobconf value of: 2
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201105020924_0070, Tracking URL = http://hadoop00:50030/jobdetails.jsp?jobid=job_201105020924_0070
Kill Command = /home/hjl/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=hadoop00:9001 -kill job_201105020924_0070
2011-05-03 06:12:36,644 Stage-1 map = 0%, reduce = 0%
2011-05-03 06:12:37,656 Stage-1 map = 50%, reduce = 0%
2011-05-03 06:12:39,673 Stage-1 map = 100%, reduce = 0%
2011-05-03 06:12:44,713 Stage-1 map = 100%, reduce = 50%
2011-05-03 06:12:46,733 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201105020924_0070
Copying data to local directory /home/hjl/sunwg/ooo
Copying data to local directory /home/hjl/sunwg/ooo
4 Rows loaded to /home/hjl/sunwg/ooo
OK
Time taken: 17.663 seconds
第一次执行根据id字段来做分发,结果如下:
[hjl@sunwg src]$ cat /home/hjl/sunwg/ooo/attempt_201105020924_0070_r_000000_0
400tim
200mary
[hjl@sunwg src]$ cat /home/hjl/sunwg/ooo/attempt_201105020924_0070_r_000001_0
300kate
100tom
这次我们换个分发的方式,采用length(id)的结果,因为这几条记录的id字段的长度都相同,所以应该会被分布到同一个reduce中。
hive> insert overwrite local directory ‘/home/hjl/sunwg/lll’ select * from test09 distribute by length(id);
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Defaulting to jobconf value of: 2
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201105020924_0071, Tracking URL = http://hadoop00:50030/jobdetails.jsp?jobid=job_201105020924_0071
Kill Command = /home/hjl/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=hadoop00:9001 -kill job_201105020924_0071
2011-05-03 06:15:21,430 Stage-1 map = 0%, reduce = 0%
2011-05-03 06:15:24,454 Stage-1 map = 100%, reduce = 0%
2011-05-03 06:15:31,509 Stage-1 map = 100%, reduce = 50%
2011-05-03 06:15:34,539 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201105020924_0071
Copying data to local directory /home/hjl/sunwg/lll
Copying data to local directory /home/hjl/sunwg/lll
4 Rows loaded to /home/hjl/sunwg/lll
OK
Time taken: 20.632 seconds
在查看下结果是否和我们的预期相同:
[hjl@sunwg src]$ cat /home/hjl/sunwg/lll/attempt_201105020924_0071_r_000000_0
[hjl@sunwg src]$ cat /home/hjl/sunwg/lll/attempt_201105020924_0071_r_000001_0
100tom
200mary
300kate
400tim
文件attempt_201105020924_0071_r_000000_0中没有记录,而全部的记录都在attempt_201105020924_0071_r_000001_0中。
分享到:
相关推荐
hive的Order By/Sort By/Distribute By Join查询,join只支持等值连接 LEFT,RIGHT 和 FULL OUTER JOIN LEFT SEMI JOIN Hive当前没有实现 IN/EXISTS 子查询,可以用 LEFT SEMI JOIN 重写子查询语句。
4. 分区和桶:通过PARTITION BY和CLUSTER BY/DISTRIBUTE BY/SORT BY优化查询性能。 5. 数据更新:Hive不支持行级别的插入和更新,但可以通过INSERT OVERWRITE重写整个表或分区。 五、Hive与Hadoop的协同工作 Hive...
- 排序操作(ORDER BY、SORT BY、DISTRIBUTE BY、CLUSTER BY); - 复合数据类型(ARRAY、MAP、STRUCT)的使用技巧。 5. **Hive高级特性** - 索引创建与管理; - HiveServer2/beeline的使用; - Java操作Hive...
例如,HQL支持的聚合函数有COUNT、SUM、AVG、MAX、MIN等,同时还有GROUP BY、JOIN、DISTRIBUTE BY、SORT BY等操作。HQL还提供了窗口函数和自定义函数(UDFs)以增强其功能。 在Hive中,数据处理分为两个阶段:编译...
- `SELECT * FROM table_name DISTRIBUTE BY column_name SORT BY column_name [ASC | DESC];` - **DistributeBy和SortBy**: - 在MapReduce作业中控制数据的分布和排序方式。 - **ClusterBy**: - `SELECT * FROM ...
使用`DISTRIBUTE BY`和`SORT BY`组合可以局部排序,提高效率。对于`DISTINCT`,可以考虑转换为`GROUP BY`。 4. **更换执行引擎**:默认的MapReduce执行引擎可能存在效率问题,可以切换到Tez、Spark或Flink。Tez利用...
19.Hive中order by、sort by、distribute by与cluster by的使用 20.Hive中分析函数与窗口函数 21.Hive中UDF的介绍 22.Hive中使用自定义UDF实现日期格式转换 23. HiveServer2的介绍及三种连接方式 24.Hive元数据、...
6. 分组和排序:`GROUP BY`, `ORDER BY`, `DISTRIBUTE BY`, `SORT BY`,用于数据分组和排序。 7. 时间和日期函数:`YEAR`, `MONTH`, `DAY`, `HOUR`, `MINUTE`, `SECOND`,用于提取日期和时间部分。 8. 模式匹配函数...
union all select) distribute by xxx`。 以上就是针对Hive on Tez常见报错的分析及解决方案。在实际操作中,应根据具体环境和需求调整相关配置,确保Hive作业的稳定性和效率。同时,对于复杂的查询场景,理解Hive...
- 如果可能,避免全局排序,尽量使用DISTRIBUTE BY和CLUSTER BY来控制数据的分发和聚集。 - **子查询优化**:避免嵌套子查询,尝试重写为更高效的JOIN或临时表。 4. **执行引擎优化**: - **Tez与Spark**:考虑...
- 倾斜优化:处理数据分布不均的问题,例如使用CLUSTER BY或DISTRIBUTE BY。 - 本地模式(Local Mode):在小数据量测试时,可以提高执行速度。 - 桶表:通过预定义的哈希函数将数据分布到特定的桶中,以优化JOIN...
- 使用`DISTRIBUTE BY`和`SORT BY`来重新分配数据。 - 对大表和小表做JOIN操作时,优先将小表广播到各个Reducer中。 ##### 2. 合理使用分区 - **问题**:不当的分区策略会导致查询效率低下。 - **解决方案**: ...
### Hive SQL优化技巧详解 #### 一、数据倾斜优化 数据倾斜是指在Hive查询过程中,数据不均匀...通过以上方法和技术的应用,可以有效地优化Hive查询性能,减少数据倾斜带来的负面影响,提高大数据处理的速度和效率。
- 或者,在Tez执行的QL语句末尾添加`DISTRIBUTE BY`关键字来强制触发一次Reduce过程,这有助于整理数据分布,并减少子目录带来的影响。 ##### 解决方案二:查询时的引擎配置优化 1. **MR查询时的配置**: - 在MR...
HQL中的JOIN操作、GROUP BY、SORT BY、DISTRIBUTE BY等语句都是为大数据场景定制的。 五、案例实践 1. 数据加载:使用LOAD DATA命令将本地文件系统或HDFS上的数据导入到Hive表中。 2. 表操作:创建表(CREATE TABLE...
Hive提供了COUNT、SUM、AVG、MAX、MIN等聚合函数,以及GROUP BY、DISTRIBUTE BY、SORT BY等语句来实现这些统计。 6. **窗口函数**:对于时间序列分析,Hive的窗口函数(如ROW_NUMBER、LAG、LEAD、RANK等)能帮助...
对于“产品说明.zip”和“文档.pdf”,它们可能包含了更深入的操作指南、示例代码以及最佳实践,帮助用户更好地理解和应用Hive的DML特性。在使用Hive时,建议结合官方文档和这些资源,以确保正确、高效地进行数据...
DISTRIBUTE BY uid SORT BY upload_time DESC, event_type DESC; ``` 4. **使用GROUP BY替代DISTINCT**: - **COUNT(DISTINCT)**:在大数据量场景下,COUNT(DISTINCT)可能导致大量的数据汇聚到少数Reduce任务中...
- **分组与排序**:GROUP BY, ORDER BY, DISTRIBUTE BY, SORT BY等。 - **分区查询**:使用WHERE子句指定分区,如WHERE year=2020。 4. **优化技巧** - **分区优化**:通过合理分区减少扫描的数据量。 - **桶表...