Hive 异常

HDFS 对应分区目录下有数据文件,但是 Hive 查不到数据

Hive 查询数据会先查找 metastore,然后根据 metadata 去读取 warehouse 中的数据文件,如果直接将数据文件放到对应 hdfs 目录下,而没有更新 metadata 的话就会出现这种问题。

# 查看 Hive metastore,是否对应的分区信息
mysql -u hive -p
mysql> select * from hive.PARTITIONS;
+---------+-------------+------------------+---------------+-------+--------+
| PART_ID | CREATE_TIME | LAST_ACCESS_TIME | PART_NAME     | SD_ID | TBL_ID |
+---------+-------------+------------------+---------------+-------+--------+
|       1 |  1535366828 |                0 | dt=2018-08-23 |    37 |     34 |
|       2 |  1535367038 |                0 | dt=2018-08-24 |    40 |     38 |
|       3 |  1535369094 |                0 | dt=2018-08-25 |    42 |     34 |
|       4 |  1535369137 |                0 | dt=2018-08-26 |    45 |     41 |
+---------+-------------+------------------+---------------+-------+--------+

# 如果没有对应的表分区信息,可以通过下面的方法解决

# 方法1:metastore check,它会将检测到的分区信息写入 metastore
hive> MSCK REPAIR TABLE tablename;

# 方法2:
hive> ALTER TABLE hive_tablename ADD PARTITION(dt='2018-08-27');

Map Join OOM

Starting to launch local task to process map join; maximum memory = xxx

参考连接

解决建议

  • set hive.auto.convert.join=false;,关闭 map join
  • 调小hive.smalltable.filesize,默认是25000000(在2.0.0版本中)
  • hive.mapjoin.localtask.max.memory.usage,调大到0.999
  • set hive.ignore.mapjoin.hint=false;,关闭忽略 map join 的 hints
  • 调大 MapredLocalTask 的JVM启动参数: export HADOOP_HEAPSIZE=2000或者vim /usr/lib/hadoop-current/libexec/hadoop-config.sh,设置JAVA_HEAP_MAX=-Xmx2000m

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,一毛也是爱

打开支付宝扫一扫,即可进行扫码打赏哦