本文汇总了Hive使用时的常见问题。
说明
- 对于Hive作业报错或其他异常问题请参见Hive作业异常排查及处理。
- 对于Hive Metastore和HiveServer等服务相关的异常请参见Hive服务异常排查及处理。
作业长时间处于等待状态,如何处理?
您可以通过以下步骤定位问题:
- 在EMR控制台的访问链接与端口页面,单击YARN UI所在行的链接。
- 单击Application ID。
- 单击Tracking URL的链接。
可以看到有多个作业处于等待状态。
- 在左侧导航中,单击Scheduler。
即可进入队列,您可以看一下当前队列的繁忙程度,来分析是因为队列中没有空闲资源,还是当前任务确实比较耗时。如果是队列资源紧张,您可以考虑切换到空闲队列,否则需要优化代码。
Map端是否读取了小文件?
您可以通过以下步骤定位问题:
- 在EMR控制台的访问链接与端口页面,单击YARN UI所在行的链接。
- 单击Application ID。
进入Map Task的详情页面,可以看到每个Map Task读取的数据量,如下图所示,读取的数据量是2个字节记录。如果大部分的Map Task读取的文件量都比较小,就需要考虑小文件合并。
您也可以通过查看Map Task的Log,获取更多的信息。
Reduce Task任务耗时,是否出现了数据倾斜?
您可以通过以下步骤定位问题:
- 在EMR控制台的访问链接与端口页面,单击YARN UI所在行的链接。
- 单击Application ID。
- 在Reduce Task列表页面,按照完成时间逆序排序,找出Top耗时的Reduce Task任务。
- 单击Task的Name链接。
- 在Task详情页面,单击左侧的Counters。
查看当前Reduce Task中Reduce Input bytes和Reduce shuffle bytes的信息,如果比其他的Task处理的数据量大很多,则说明出现了倾斜问题。
如何预估Hive作业并发量的上限值?
Hive作业并发量与HiveServer2的内存以及master实例个数有关系。您可以参考以下公式预估Hive作业并发量的上限值。
max_num = master_num * max(5, hive_server2_heapsize/512)
上述公式中涉及到的参数信息如下:
- master_num:集群master实例的个数。
- hive_server2_heapsize:hive-env.sh中的配置项,默认值是512 MB。
例如:集群有3个master实例,hive_server2_heapsize配置为4 GB,那么根据上述公式可以预估出Hive作业的并发量上限值为24,即可以同时运行24个脚本。
为什么Hive创建的外部表没有数据?
- 问题描述:创建完外部表后查询没有数据返回。
外部表创建语句示例如下。
CREATE EXTERNAL TABLE storage_log(content STRING) PARTITIONED BY (ds STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 'oss://log-12453****/your-logs/airtake/pro/storage';
查询没有数据返回。select * from storage_log;
- 问题分析:Hive不会自动关联指定Partitions目录。
- 解决方法:
- 需要您手动指定Partitions目录。
alter table storage_log add partition(ds=123);
- 查询返回数据。
select * from storage_log;
返回如下数据。OK abcd 123 efgh 123
- 需要您手动指定Partitions目录。