大数据开发之Hive案例篇13:Hive SQL 常见参数调整

文章提供了针对Hive的参数调整方案,包括指定队列、合并小文件设置、动态分区配置、内存资源分配以及MapReduce任务的优化,以解决默认参数不适应复杂数据场景的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 问题描述

hive的一些默认参数设置不适合一些复杂的数据需求场景,需要针对具体情况进行调整。

二. 解决方案

以下是常见的调参:

# 指定队列
set mapreduce.job.queuename=root.default;

# 在只有map的作业结束时合并小文件,默认开启true;
set hive.merge.mapfile=true;

# #在Map-Reduce的任务结束时合并小文件
set hive.merge.mapredfiles = true;

# #当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件merge
set hive.merge.smallfiles.avgsize = 256000000;

# #合并文件的大小
set hive.merge.size.per.task = 256000000;

# 在严格模式下,用户必须指定至少一个静态分区
# 以防用户意外覆盖所有分区。
set hive.exec.dynamic.partition.mode=nonstrict;

# 动态分区的个数
set hive.exec.max.dynamic.partitions=2000;

# 每个节点最大的动态分区个数
set hive.exec.max.dynamic.partitions.pernode=2000;

# 默认值是10000。如果现在你的表有60个分区,然后你总共有2000个map,在运行的时候,每一个mapper都会创建60个文件,对应着每一个分区,所以60*2000> 120000,就会报错:exceeds 100000.Killing the job
set hive.exec.max.created.files=1000000;

# 对 map 端的小文件进行合并
set hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

# 设置hive的执行引擎
set hive.execution.engine=spark;
set hive.execution.engine=mr;

# 单个map任务的内存资源
set mapreduce.map.memory.mb=2048;

# 单个reduce任务的内存资源
set mapreduce.reduce.memory.mb=2048;

# 虚拟内存
set yarn.nodemanager.vmem-pmem-ratio=4.1;

# 指定reduce的个数
set mapred.reduce.tasks = 15;

# 指定map的个数
Num_Map_tasks= $inputsize/ max($mapred.min.split.size, min($dfs.block.size, $mapred.max.split.size))
set mapred.max.split.size=10000000 ;
set mapred.min.split.size=10000000;
### 如何将程序烧录到STM32F103C8T6最小系统板 #### 准备工作 为了成功地将程序烧录到STM32F103C8T6最小系统板上,需准备以下工具和材料: - STM32F103C8T6最小系统板 - ST-Link V2 或者其他兼容的ST-Link调试器/编程器 - USB数据线用于连接计算机与ST-Link设备 - 开发环境(如Keil MDK, IAR Embedded Workbench, STM32CubeIDE) #### 烧录过程 对于STM32系列微控制器而言,通常会把Bootloader放置于`0x8000000`地址处[^1]。然而,在实际应用中,大多数情况下并不直接操作Bootloader而是利用现成的开发工具链来完成整个编译链接以及最终的目标文件生成。 当准备好上述提到的所有必要组件之后,可以按照下面的方法来进行固件上传: 1. 将ST-Link通过Micro USB接口连接至个人电脑,并确保驱动已正确安装; 2. 使用跳帽或者杜邦线将ST-Link上的SWDIO、SWCLK、GND、NRST四个信号端子分别对应接到目标板相同名称的位置上去;如果采用的是四针排母形式,则可以直接插上即可[^2]; 3. 打开所使用的集成开发环境(IDE),加载项目工程并构建得到`.hex`或`.bin`格式的目标二进制映像文件; 4. 启动配套提供的Flash Loader Demonstration软件或者其他第三方flasher应用程序,设置好通信参数后点击“Program”按钮执行刷机动作直至提示顺利完成为止。 值得注意的是,除了官方推荐的方式外还可以借助串口实现在线更新功能,不过这往往涉及到额外的设计考量比如电路布局调整以适应UART协议的要求等复杂情况因此这里不做赘述。 ```cpp // 示例:简单的LED闪烁代码片段适用于STM32F103C8Tx芯片 #include "stm32f1xx_hal.h" int main(void){ HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA,&GPIO_InitStruct); while (true){ HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_5); // 切换PA5引脚电平状态 HAL_Delay(500); // 延迟半秒时间 } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值