博客搬家
不好用;准备搬到这里:http://boylook.blog.51cto.com/[@more@]
Hive 调整inputsplit size来增加MAP数
线上一个Hive(CDH4.2.0)的清洗Job出错,查看日志发现其中一个MAP OOME: 查看了日志这个HQL是2个表进行Join,splits=2即开了2个MAP进行分别处理,其中一个大表123MB(<dfs.block.size=128MB),500W行左右,应该是数据量超过了MAP的内存了,通过对比前一天的日志可以确认: 由于是临时表,设置了mapred.reduce.tasks=20重跑新生成临时表,Join清洗成功: 由于MR的inputsplit size=min{minsplitsize,max{maxsplitsize,blocksize}},因此想是否可以通过设置mapred.max.split.size=32MB来起多个MAP这种方式解决
Sqoop splitkey支持的类型
前阶段一个Sqoop抽取Job指定了一个xxx_id作为splitkey,后来抽取失败;想当然以为PK就是int,发现其实是varchar(https://issues.apache.org/jira/browse/SQOOP-653还不被支持),后来换了一列抽取成功; Sqoop的splitkey在文档里只是简单的介绍了算法,但是没有介绍具体支持的splitkey column type, 查看源码支持的类型如下:BigDecimal,Boolean,Date,Float,Integer BigDecimalSplitter.java BooleanSplitter.java DBSplitter.java DateSplitter.java FloatSplitter.java IntegerSplitter.java
Sqoop fetchsize失效
前几天线上Sqoop的一个Job(从MySQL抽取数据到Hadoop)突然报了OOME,后重跑并做java trace发现内存占用都是byte[],同时cpu top 3的方法都是com.mysql.jdbc.ByteArraryBuffer.getBytes即内存都是被数据消耗掉了;很奇怪,为什么在option里指定了fetch-size=100怎么会OOME呢(平均记录长度不到1kb); 再看昨天成功的发现100W条记录,发现占用了860MB内存,明显是fetch-size没有生效 +---------+---------+------------+----------+-------------+--------------+ | type | status | host | cpusec
动态Zookeeper节点变更
最近做一次zk的线上迁移,由于线上使用的集群版本是CDH4.2,zk的版本是3.4.5,还不支持动态变更节点(在https://issues.apache.org/jira/browse/ZOOKEEPER-107才支持),只能通过关闭一个节点,起一个新的节点的方式: 现在有集群Z1,Z2,Z3;想把Z3迁移到Z4 1. 关闭Z3 2. 启动Z4,配置节点Z1,Z2,Z4 3. 重启Z2,修改配置;重启Z1,修改配置 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
Cobar 源码分析(一)
TBD[@more@]
Flume-ng HDFS sink原理解析
HDFS sink主要处理过程在process方法: //循环batchSize次或者Channel为空 for (txnEventCount = 0; txnEventCount < batchSize; txnEventCount++) { //该方法会调用BasicTransactionSemantics的具体实现 Event event = channel.take(); if (event == null) { break; } ...... //sfWriter是一个LRU缓存,缓存对文件Handler,最大打开文件由参数maxopenfiles控制 BucketWriter bucketWriter = sfWriters.get(
Flume-ng FileChannel原理解析
v:* {behavior:url(#default#VML);} o:* {behavior:url(#default#VML);} w:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} 对于Flume来说主要有两个Channel:Memory,File;对于线上环境主要以FileChannel为主,因此这里主要讨论它的实现: 在FileChannel里主要由一个WAL的log和一个内存队列组成: FileChannel的Queue主要又以下几个部分组成: private final EventQueueBackingStore backingStore; private final InflightEventWrapper inflightTakes; private final Infli