03 2013 档案
HFileOutputFormat与TotalOrderPartitioner
摘要:最近需要为一些数据增加随机读的功能,于是采用生成HFile再bulk load进HBase的方式。运行的时候map很快完成,reduce在sort阶段花费时间很长,reducer用的是KeyValueSortReducer而且只有一个,这就形成了单reducer全排序的瓶颈。于是就想着采用TotalOrderPartitioner使得MR Job可以有多个reducer,来提高并行度解决这个瓶颈。于是动手写代码,不仅用了TotalOrderPartitioner,还使用InputSampler.RandomSampler生成分区文件。但执行时碰到问题,查资料时无意发现HFileOutputFo 阅读全文
posted @ 2013-03-27 17:31 山君 阅读(1252) 评论(0) 推荐(0)
关于hive multi group by的疑惑
摘要:有多条hive语句从同一张表中做count操作,语句如下: select pf,way,method,count(distinct id) where push_date_type ='$push_date_type' group by pf,way,method; select pf,way,-1,count(distinct id) where push_date_type ='$push_date_type' group by pf,way;...... 想着用multi group by特性优化下效率,于是把上述语句改写成:from push_revis 阅读全文
posted @ 2013-03-18 15:37 山君 阅读(2518) 评论(0) 推荐(1)
对MapReduce程序进行单元测试
摘要:关于此一篇不错的文章:使用MRUnit实现MapReduce程序的单元测试需要补充的是:1. 还需要一个jar包hadoop-mapred-0.22.0.jar,否则会收到关于MapContextImpl或ReduceContextImpl的NoClassDefFoundError。2. 如果遇到异常:java.lang.IncompatibleClassChangeError,把刚添加的jar包搞成和原来hadoop相关的jar包版本一致或很相近。 阅读全文
posted @ 2013-03-12 17:24 山君 阅读(291) 评论(0) 推荐(0)
Hive解决 java.io.IOException:SerDeException:LazySimpleSerDe
摘要:具体的出错信息是:Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: class org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe: expects either BytesWritable or Text object!出错原因:数据文件的field使用了LazySimpleSerDe不能解析的类型。报出此异常的代码为:public Object deserialize(Writable field) throws S 阅读全文
posted @ 2013-03-12 16:56 山君 阅读(2689) 评论(0) 推荐(0)
MapReduce程序遇见java.net.UnknownHostException
摘要:异常信息:java.net.UnknownHostException: unknown host: xxx-host at org.apache.hadoop.ipc.Client$Connection.<init>(Client.java:244) at org.apache.hadoop.ipc.Client.getConnection(Client.java:1234) at org.apache.hadoop.ipc.Client.call(Client.java:1075) at org.apache.hadoop.ipc.RPC$Invoker.invoke(RPC.j 阅读全文
posted @ 2013-03-12 12:07 山君 阅读(3581) 评论(1) 推荐(1)
吐槽下《Hadoop权威指南(第二版)》的翻译
摘要:这本书里翻译方面问题较多,对于错别字等简单问题就不说了,这里仅列些我发现的比较严重的问题:1. 391页:“一般来说,面向行的存储格式对于那些只访问表中一小部分行的查询比较有效。相反,面向行的存储格式适合同时处理一行中很多列的情况。”读到这句话感觉很不对劲,首先“相反” 前后都是关于“面向行的存储”适合的地方,这哪有相反的地方;其次,有点面向行或者列存储知识的人都知道他们的优缺点。于是对照《Hadoop The Definitive Guide 2nd Edition》中对应的地方,果不其然:这么低级的错误,column在什么情况中的意思是“行”呢,用本山的话就是“在答错的情况下”!2. 19 阅读全文
posted @ 2013-03-07 11:12 山君 阅读(2618) 评论(0) 推荐(1)
MapReduce使用lzo压缩注意
摘要:以下是本楼主用血和泪换来的教训,往事不堪回首啊!lzo关于hadoop的codec有两个 com.hadoop.compression.lzo.LzoCodec 和com.hadoop.compression.lzo.LzopCodec,两个类虽只有一字之差,其实区别挺大。1. LzopCodec与lzop工具兼容,LzopCodec本质是LZO格式的但包含额外的文件头。 lzoCodec只是一种压缩算法,不会生成额外的文件头。 ps:http://www.quora.com/Whats-the-difference-between-the-LzoCodec-and-the-LzopCodec 阅读全文
posted @ 2013-03-06 16:18 山君 阅读(5882) 评论(0) 推荐(0)
MapReduce设置参数防止超时
摘要:1. 如果碰到异常“Task attempt failed to report status for xxx seconds. Killing!”,最可能是碰到死循环了。2. 如果没有死循环:控制超时的属性是:mapred.task.timeout,默认600000ms,即600s。可以设置成更大的值。可以直接在Jobconf或Configuration中修改(只对本Job起作用),也可以修改mapred-site.xml(对所有Job起作用)。3. 如果没有死循环,但task执行时间长又不好确定,可以在Reducer或Mapper中主动发送心跳,但需控制发送心跳的频率: long he... 阅读全文
posted @ 2013-03-05 15:08 山君 阅读(9712) 评论(0) 推荐(0)
MapReduce中压缩的使用体验
摘要:有个MR Job,输入数据大小几G,输入大小估计几十T(未压缩)。输出量太大,为空间方面考虑决定使用压缩。map的输出与Job的输入一样大小,优化幅度不大,暂时不考虑map输出的压缩,着重于Reduce输出的压缩。《Hadoop权威指南》中介绍了几种压缩格式,因为此Job的输出还要作为下一个MR的输入,故:1. 第一次选了《权威指南》中介绍的支持切分的bzip2格式,输出格式为Sequence File。结果:速度贼慢,比不压缩的还慢。可以断定在压缩上面花费过多时间。2. bzip2压缩只能放弃,但又不甘心无压缩输出。搜索了些资料(http://blog.sina.com.cn/s/blog_ 阅读全文
posted @ 2013-03-05 14:52 山君 阅读(1040) 评论(0) 推荐(0)