hive建表没使用LZO存储格式,可是数据是LZO格式时遇到的问题

今天微博大数据平台发邮件来说。他们有一个hql执行失败。可是从gateway上面的日志看不出来是什么原因导致的,我帮忙看了一下。最后找到了问题的解决办法,下面是分析过程:

1、执行失败的hql:

INSERT OVERWRITE TABLE brand_ad_user_with_interact_score_3
select a.uid, a.brand, a.friend, CASE b.weight WHEN NULL THEN '0.000000' ELSE b.weight END
from brand_ad_2hop_3 a
LEFT OUTER join ods_bas_user_interact_score_to_thin_3 b
on (a.uid = b.fid and a.friend = b.tid);

该hql非常easy,就是两个表关联。然后输出到另外一个表中。是一个普通的common join,没有group by等操作。所以不存在map的数据倾斜问题

2、查看job日志

依据50030页面查看了一下该job的状态和日志信息,job的状态是被kill掉的,map任务还未执行完毕就被kill掉了,被kill掉的map任务执行时间都超过了10个小时。例如以下图所看到的:

依据1中得分析。该job从hql上面看是不存储数据倾斜的,那为什么会出现单个map执行时间超过10小时的情况呢,查看了一下被kill掉map任务的counter信息,例如以下:

居然单个map任务从hdfs上面读了10G的数据。不应该啊。难不成被处理的数据文件没被分片,单个map任务处理了单个的大文件。怀揣着这种推測,我去检查了一下hql里面两个表文件夹以下的文件,果不其然,以下全是lzo格式的文件,可是都没有建索引。并且

brand_ad_2hop_3表以下个别单个文件达到了10G+,应该就是这个原因了:lzo格式的文件没有建索引。数据文件不能被分片,导致在执行的时候,单个的文件仅仅能由一个map任务处理,假设单个文件非常大的情况下。map任务就会处理非常长时间。

在检查了一下brand_ad_2hop_3的建表语句,发现存储格式为Text。

既然找到了问题原因,下面就是解决的方法了:

(1)、给lzo文件建立索引

(2)、建表的时候请使用LZO存储格式

时间: 2024-11-05 14:15:38

hive建表没使用LZO存储格式,可是数据是LZO格式时遇到的问题的相关文章

hive建表没使用LZO存储格式,但是数据是LZO格式时遇到的问题

今天微博大数据平台发邮件来说,他们有一个hql运行失败,但是从gateway上面的日志看不出来是什么原因导致的,我帮忙看了一下,最后找到了问题的原因,以下是分析过程: 1.运行失败的hql: INSERT OVERWRITE TABLE brand_ad_user_with_interact_score_3 select a.uid, a.brand, a.friend, CASE b.weight WHEN NULL THEN '0.000000' ELSE b.weight END from

hive建表并load数据小结

一.建表的时候要指明分隔符 hive建表时默认的分隔符是'\001',若在建表的时候没有指明分隔符,load文件的时候文件的分隔符需要是'\001'的, 若文件分隔符不是'\001',程序不会报错,但表查询的结果会全部为'NULL', 如何制作分隔符为'\001'的测试文件 用vi编辑器Ctrl+v然后Ctrl+a就可以通过键盘输入'\001' 也可以在建表的时候指明分隔符为制表符,然后测试文件用excel制表符制作, 例如: create table pokes(foo INT,bar STR

Hive建表-分隔符

在hive建表中,默认的分隔符为  ‘,’ ,可以指定想用的分隔符 hive默认的列分割类型为org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe,这其实就是^A分隔符,hive中默认使用^A(ctrl+A)作为列分割符,如果用户需要指定的话,等同于row format delimited fields terminated by '\001',因为^A八进制编码体现为'\001'.所以如果使用默认的分隔符,可以什么都不加,也可以按照上面的指定加‘

hive建表

1.建表 Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name ( [(col_name data_type [COMMENT col_comment], ...)] )   [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED B

hive建表与数据的导入导出

建表: create EXTERNAL table tabtext(IMSI string,MDN string,MEID string,NAI string,DestinationIP string,DestinationPort string,SourceIP string,SourcePort string,PDSNIP string,PCFIP string,HAIP string,UserZoneID string,BSID string,Subnet string,ServiceOp

hive建表语句

原文:http://jingyan.baidu.com/article/a378c96092cf56b328283006.html 创建表的语句:Create [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_com

各种数据格式的Hive建表语句

Xml格式 CREATE EXTERNAL TABLE Gateway_pmsarisoap( BookingSoapLogID STRING,? GuidNo STRING,? SoapType STRING,? SoapContent STRING,? InsertDate STRING,? SourceOpsType STRING) PARTITIONED BY (? ? `dt` string) ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml

hive 建表导入数据

1. hive> create table wyp > (id int, name string, > age int, tel string) > ROW FORMAT DELIMITED > FIELDS TERMINATED BY '\t' > STORED AS TEXTFILE; 2. cat wyp.txt 1       wyp     25      13188888888888 2       test    30      1388888888888

hive中执行hql或建表语句时,抛出Display all 459 possibilities? (y or n)错误的解决方法

我昨天在hive上建表,一直报Display all 459 possibilities? (y or n) ,之前我以为是建表语句有问题,一直在改语句,后来在网上搜这个错误,原来语句里混杂了Tab缩进,这可能是我使用notepad++的时候打出来的: 解决方案:把它粘到plsql里,将空格和缩进都重新打一遍就好了,在plsql里可以用tab键: 原文地址:https://www.cnblogs.com/xiao02fang/p/10006748.html