您的位置:首页 > 其它

2013-03-15

2013-04-16 16:45 225 查看
      查询某个产品的日志时,select语句的map reduce任务进度反复,记得好像是map从0变到50%,就不往下进行了,直到失败,没有明显可辨的错误信息出来,只是提示时间过长,超时失败。

      首先在网上查询,大多数是提示,修改mapred-site.xml文件,将mapred.task,timeout这个参数值调大,或者设置为0,将永远不提示超时,结果就是任务进度反复更长的时间之后,提示失败。尝试将所有日志文件合并成一个,发现map一直停留在0,根本不执行了。

       回归到问题本身,用了最简陋的办法,挨个排查日志文件,因为心里有两个方向:1 集群搭建的效率问题 2 日志文件有些异常的行。直觉更倾向于第2个问题。

       首先,然后开始10个一组删除文件,观察删除文件后任务能否正常执行,最后只剩10个文件的时候,删除靠前的5个,发现问题仍然存在,而删除另外5个,则能正常运行,说明了不是文件个数的问题,同时能正常运行的5个文件也比不能运行的那5个大一些,证明了不是文件大小的问题。最后将问题定位在某一个日志文件,然后将该文件10行一组删除内容,定位到某个数据行,最终发现是一行数据,无法被当时建表时定义的serde所处理。

     建表语句如下:

   create external table if not exists 表名 (字段) row format SERDE 'org.apache.hadoop.hive.serde2.dynamic_type.DynamicSerDe'WITH SERDEPROPERTIES ('serialization.format'='org.apache.hadoop.hive.serde2.thrift.TCTLSeparatedProtocol','quote.delim'='("|\\[|\\])','field.delim'='
') STORED AS TEXTFILE location '/×/×';

  处理不了的行没有具体记录,是其中一个字段中有一对(),导致现有的serde处理不了。

        后来决定使用很多资料里介绍的另外一个serde:RegexSerde。另外,在某一天某个网页中发现有hive开发相关的人员出来指明dynamicserde要被废弃了,号召大家使用regexserde。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息