Hadoop运维记录系列(三)
2013-01-30 15:06
239 查看
Hive 0.10发布了,修正了一些bug,搞了一些新特性,对提高工作效率很有帮助,于是尝试升级了一下,然后遇到了一些问题,记录一下。
主要是看上了下面几个feature,打算换上看看。
1. Allow SELECT <col> without a mapreduce job
2. Implement "show create table"
3. Skewed Join Optimization,optimize union sub-queries
4. hiveserver bug fix.
0.10.0版本还规范了JSON的使用,Hive中的数据如果包含json,则json里必须使用双引号,以前的版本json是可以使用单引号的。
首先要吐槽一下,Apache这活干的太糙了。发布的0.10,默认情况下没法用。hive-default.xml.template复制成hive-site.xml,里面有几个地方没有写xml的封口标签,需要自己写上去。还有个地方是在注释里面用了<>,结果hive解析的时候当成了xml标签。
这都不是大问题,比较大的问题是部署上去以后,发现没法使用。不走map/reduce的查询都没问题。只要走map/red就报错。主要错误是报No LZO Codec found,cannot run.其他报错信息如下。
尝试了一下,将HIVE_HOME指向到0.9.0,则0.10.0使用正常。而将HIVE_HOME指向到0.10.0则0.9.0也会报找不到LZO库的问题。
看来是lzo解码器的问题,但是0.9.0的hive就没有这个问题,于是用lsof抓一下进程加载的链接库。发现0.9.0会加载一个/usr/lib/liblzo2.so.2的文件,而0.10.0则没有。看来是lzo库文件的问题。重新安装一下lzo2.06的两个rpm包,并把hadoop-gpl-packing升级到最新的0.5.4-1,问题解决,map/red正常完成。
另:记录一下tasktracker重启以后的假死问题,Tasktracker重启之后,一切正常,但jobtracker中很长时间无法获取tasktracker的主机信息。主要是由于tasktracker在重启后,会删除mrlocal文件夹下面的distcache,如果运行了一段时间重启,删除文件需要很长时间。所以,先手动删除这些distcache,再重启TT,一切就正常了。
源码在src/mapred/org/apache/hadoop/mapred/TaskTracker.java
本文出自 “实践检验真理” 博客,转载请与作者联系!
主要是看上了下面几个feature,打算换上看看。
1. Allow SELECT <col> without a mapreduce job
2. Implement "show create table"
3. Skewed Join Optimization,optimize union sub-queries
4. hiveserver bug fix.
0.10.0版本还规范了JSON的使用,Hive中的数据如果包含json,则json里必须使用双引号,以前的版本json是可以使用单引号的。
首先要吐槽一下,Apache这活干的太糙了。发布的0.10,默认情况下没法用。hive-default.xml.template复制成hive-site.xml,里面有几个地方没有写xml的封口标签,需要自己写上去。还有个地方是在注释里面用了<>,结果hive解析的时候当成了xml标签。
这都不是大问题,比较大的问题是部署上去以后,发现没法使用。不走map/reduce的查询都没问题。只要走map/red就报错。主要错误是报No LZO Codec found,cannot run.其他报错信息如下。
at com.hadoop.mapred.DeprecatedLzoLineRecordReader.next(DeprecatedLzoLineRecordReader.java:35) at com.hadoop.mapred.DeprecatedLzoLineRecordReader.next(DeprecatedLzoLineRecordReader.java:85) at org.apache.hadoop.util.LineReader.readLine(LineReader.java:187) at org.apache.hadoop.util.LineReader.readLine(LineReader.java:134) at java.io.InputStream.read(InputStream.java:85) at org.apache.hadoop.io.compress.DecompressorStream.read(DecompressorStream.java:76) at com.hadoop.compression.lzo.LzopInputStream.decompress(LzopInputStream.java:255) at com.hadoop.compression.lzo.LzopInputStream.getCompressedData(LzopInputStream.java:319) at com.hadoop.compression.lzo.LzopDecompressor.setInput(LzopDecompressor.java:116) at com.hadoop.compression.lzo.LzoDecompressor.setInput(LzoDecompressor.java:208) Caused by: java.lang.ArrayIndexOutOfBoundsException ... 11 more at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.doNextWithExceptionHandler(HadoopShimsSecure.java:326) at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.next(HiveContextAwareRecordReader.java:108) at org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.doNext(CombineHiveRecordReader.java:41) at org.apache.hadoop.hive.ql.io.CombineHiveRecordReader.doNext(CombineHiveRecordReader.java:101) at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.doNext(HiveContextAwareRecordReader.java:276) at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderNextException(HiveIOExceptionHandlerUtil.java:77) at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderNextException(HiveIOExceptionHandlerChain.java:121) Caused by: java.io.IOException: java.lang.ArrayIndexOutOfBoundsException at org.apache.hadoop.mapred.Child.main(Child.java:249) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) at javax.security.auth.Subject.doAs(Subject.java:396) at java.security.AccessController.doPrivileged(Native Method) at org.apache.hadoop.mapred.Child$4.run(Child.java:255) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:48) at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:216) at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:236) at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.next(HadoopShimsSecure.java:244) at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileRecordReader.doNextWithExceptionHandler(HadoopShimsSecure.java:328) at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderNextException(HiveIOExceptionHandlerUtil.java:77) at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderNextException(HiveIOExceptionHandlerChain.java:121) java.io.IOException: java.io.IOException: java.lang.ArrayIndexOutOfBoundsException
尝试了一下,将HIVE_HOME指向到0.9.0,则0.10.0使用正常。而将HIVE_HOME指向到0.10.0则0.9.0也会报找不到LZO库的问题。
看来是lzo解码器的问题,但是0.9.0的hive就没有这个问题,于是用lsof抓一下进程加载的链接库。发现0.9.0会加载一个/usr/lib/liblzo2.so.2的文件,而0.10.0则没有。看来是lzo库文件的问题。重新安装一下lzo2.06的两个rpm包,并把hadoop-gpl-packing升级到最新的0.5.4-1,问题解决,map/red正常完成。
另:记录一下tasktracker重启以后的假死问题,Tasktracker重启之后,一切正常,但jobtracker中很长时间无法获取tasktracker的主机信息。主要是由于tasktracker在重启后,会删除mrlocal文件夹下面的distcache,如果运行了一段时间重启,删除文件需要很长时间。所以,先手动删除这些distcache,再重启TT,一切就正常了。
源码在src/mapred/org/apache/hadoop/mapred/TaskTracker.java
// NB: deleteLocalFiles uses the configured local dirs, but does not // fail if a local directory has failed. fConf.deleteLocalFiles(SUBDIR); final FsPermission ttdir = FsPermission.createImmutable((short) 0755); for (String s : localStorage.getDirs()) { localFs.mkdirs(new Path(s, SUBDIR), ttdir); } fConf.deleteLocalFiles(TT_PRIVATE_DIR); final FsPermission priv = FsPermission.createImmutable((short) 0700); for (String s : localStorage.getDirs()) { localFs.mkdirs(new Path(s, TT_PRIVATE_DIR), priv); } fConf.deleteLocalFiles(TT_LOG_TMP_DIR); final FsPermission pub = FsPermission.createImmutable((short) 0755); for (String s : localStorage.getDirs()) { localFs.mkdirs(new Path(s, TT_LOG_TMP_DIR), pub); }
本文出自 “实践检验真理” 博客,转载请与作者联系!
相关文章推荐
- Hadoop运维记录系列
- Hadoop运维记录系列(五)
- Hadoop运维记录系列(十七)
- Hadoop运维记录系列(七)
- Hadoop运维记录系列(二)
- Hadoop运维记录系列(九)
- Hadoop运维记录系列(二)
- Hadoop运维记录系列(四)
- Hadoop运维记录系列(二十)
- Hadoop运维记录系列(一)
- Hadoop运维记录系列(一)
- Hadoop运维记录系列(十五)
- Hadoop运维记录系列(十一)
- Hadoop运维记录系列(二十一) 推荐
- Hadoop运维记录系列(六)
- Hadoop运维记录系列【收集整理】
- Hadoop运维记录系列(八)
- Hadoop运维记录系列(七)
- Hadoop运维记录系列(十九) 推荐
- Hadoop运维记录系列(二十五)