本文汇总了Hive使用时的常见问题。

说明

作业长时间处于等待状态,如何处理?

您可以通过以下步骤定位问题:
  1. 在EMR控制台的访问链接与端口页面,单击YARN UI所在行的链接。
  2. 单击Application ID。
  3. 单击Tracking URL的链接。
    可以看到有多个作业处于等待状态。 Tracking URL
  4. 在左侧导航中,单击Scheduler
    即可进入队列,您可以看一下当前队列的繁忙程度,来分析是因为队列中没有空闲资源,还是当前任务确实比较耗时。如果是队列资源紧张,您可以考虑切换到空闲队列,否则需要优化代码。 Scheduler

Map端是否读取了小文件?

您可以通过以下步骤定位问题:
  1. 在EMR控制台的访问链接与端口页面,单击YARN UI所在行的链接。
  2. 单击Application ID。
    进入Map Task的详情页面,可以看到每个Map Task读取的数据量,如下图所示,读取的数据量是2个字节记录。如果大部分的Map Task读取的文件量都比较小,就需要考虑小文件合并。 Map

    您也可以通过查看Map Task的Log,获取更多的信息。

Reduce Task任务耗时,是否出现了数据倾斜?

您可以通过以下步骤定位问题:
  1. 在EMR控制台的访问链接与端口页面,单击YARN UI所在行的链接。
  2. 单击Application ID。
  3. 在Reduce Task列表页面,按照完成时间逆序排序,找出Top耗时的Reduce Task任务。Reduce Task
  4. 单击Task的Name链接。
  5. 在Task详情页面,单击左侧的Counters。Counters
    查看当前Reduce Task中Reduce Input bytes和Reduce shuffle bytes的信息,如果比其他的Task处理的数据量大很多,则说明出现了倾斜问题。 Reduce Input bytes

如何预估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目录。
  • 解决方法:
    1. 需要您手动指定Partitions目录。
      alter table storage_log add partition(ds=123);
    2. 查询返回数据。
      select * from storage_log;
      返回如下数据。
           OK
          abcd    123
          efgh    123