hadoop(ZK&MRv1&hdfs)
杨步涛的博客
老杨,目前居住上海 微信:yangbt_6225080 qq:306591368 擅长云计算、分布式系统设计、docker容器化技术、海量数据的存储、搜索、数据挖掘。
展开
-
扩展Flume按照Time和Size对日志进行hdfs归档
Flume的架构基本agent-->collect-->storage的架构,agent主要负责日志的产生,并把日志传给collector端,collect负责把agent发送的日志收集起来,发送给storage存储,storage负责的存储;其中agent和collect本身都是source,sink架构,所谓source、sink,类似生成者和消费者的架构,他们之间通过queue传输,解耦。原创 2013-01-20 11:21:52 · 3544 阅读 · 0 评论 -
MapReduce中的cpu sys突然升到的抖动问题
最近在测试过程中,发现在做map reduce数据分析的过程中,cpu sys部分会偶然的升到,甚至到达50%,抖动的比较厉害。节点的磁盘的IO吞吐量比较大,每秒达到150M,大部分是tasktracker读取本地节点DFS的数据,默认情况下,读取数据是系统调用每次从硬盘上读取4K大小的数据到内核空间中,后由内核copy到应用程序空间,是什么导致内核部分消耗大部分的时间。经过大量的各方面的原创 2013-04-03 20:48:39 · 3304 阅读 · 0 评论 -
FlumeNG1.3.1在Source Exec tail 文件方面的一个缺陷以及改进方式
在用FlumeNG1.3.1 Tail 一个文件收集日志到HDFS中时,发现原始日志文件最后几行数据总是不能写入到HDFS文件中,即使HDFS按照大小或者时间rollling成了一个新的文件。 HDFS在回滚一个新的文件中时,保留在HDFSEventSink中的数据(即使未达到一个包的大小)会写入到HDFS中,在HDFS的.hadoop fs -cat命令可以看到该数据。 经过分析原创 2013-03-08 10:55:02 · 2141 阅读 · 0 评论 -
Hadoop1.1.1参数文件说明
2 常用的端口配置2.1 HDFS端口参数描述默认配置文件例子值fs.default.name namenodenamenode RPC交互端口8020core-site.xmlhdfs转载 2013-03-23 08:36:41 · 1276 阅读 · 0 评论 -
MapReduce输出数据到oracle中的支持的一个BUG
前段时间有组员对mapreduce输出关系型数据库进行了验证,发现不支持输出到oracle中,但是对mysql支持的没有问题,用的版本是hadoop 1.0.4。经过调试,发现对oracle的支持在生成查询语句的语法时有个小的问题,语法不正确。需要修改DBOutputFormat中的constructQuery方法 query.append(");");//去掉其中的; ==>quer原创 2013-04-07 09:18:17 · 2546 阅读 · 0 评论 -
ganglia监控的安装
以前安装过ganglia的监控,过程比较复杂,最近在新的集群环境下部署了监控,这里做个笔记。ganglia监控的架构图如下,相关的原理这里不多说了。1、配置yum的源这里利用公司的yum源,增加wxlab136.repo到/etc/yum.repos.d目录下[Server]name=10.1.1.136#baseurl=ftp://10.1.1.136/pub/P原创 2013-04-13 12:25:46 · 2782 阅读 · 0 评论 -
Flume-ng-1.3.0 spooling source的方式增加了对目录的递归检测的支持
原有的spooling source的方式只支持一级目录的文件变动的检测,修改了一下源码支持对目录的递归检测,可以支持多级目录下的文件变动SpoolingFileLineReader类增加以下下方法 /** * add by yangbutao * * @param files * @param dir * @param filter */ pri原创 2013-04-22 17:31:19 · 5660 阅读 · 3 评论 -
hadoop运维系列笔记之FlumeNG往Hadoop写数据超时
最近在测试环境下,把NameNode节点更换了一台机器,并增加了一些数据节点。在FlumeNG往hadoop集群写数据的过程中,有些节点报以下类似的错误2013-04-24 13:25:50,180 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: PacketResponder 0 for block blk_7250572864原创 2013-04-24 15:33:30 · 4533 阅读 · 0 评论 -
解决MapReduce过程中IO wait高的几个思路
最近在MapReduce的逻辑运算测试的时,发现单个节点的CPU的IO wait值比较高,CPU大量的消耗在等待IO操作上。单个节点的运算的数据量比较大,每秒的IO吞吐量将近200M,iotop监控了一下主要是消耗在tasktacker从datanode节点读取数据上。从以下几个角度上对这个问题进行优化。1、源数据压缩存储2、dfs.data.dir分多个目录存储3、io.fi原创 2013-03-30 20:19:32 · 2788 阅读 · 0 评论 -
zookeeper在mysql主库选举切换中的应用
为了保证可用性,传统的关系型数据库(mysql)通常采用一主多备的方式,当主宕机后,切换到备机。有多种方式可以做到主备自动失效检测切换,比如传统的HA软件heartbeat,keepalived等等,采取虚拟IP的方式对客户端透明;这里主备自动切换方案没有采取VIP的方式,而是用zookeeper对数据库集群进行管理,可以做到主备失效检测切换,主库的选举,比如考虑到mysql对多核利用原创 2013-04-18 15:10:52 · 14052 阅读 · 5 评论 -
zookeeper源码阅读分析笔记--客户端服务端通信机制以及session超时、过期处理
zookeeper watch机制的原理分析原创 2013-08-11 11:39:37 · 12685 阅读 · 2 评论 -
Zookeeper源代码阅读分析之watcher机制
客户端ClientWatchManager,管理由ClientXncn产生的watchers和handle events在zookeeper的exists、getChildren、getData等这些API中可以注册watcher对象到ClientWatchManager中,create、setData、delete等这些引起zookeeper节点变化的API会触发watcher proc原创 2013-08-11 20:46:38 · 7660 阅读 · 1 评论 -
Zookeeper分布式锁(多进程竞争)实现的代码示例分享
解决方案依然很简单,需要加锁的进程先尝试在zookeeper上创建一个临时节点L,如果创建成功则加锁成功,如果不成功(已存在)则在该节点上设置watch。进程通过删除L来解锁(当进程意外终止,L也会被删除,不会造成死锁),当L被删除时,其它等待锁的进程会得到通知,此时这些进程再次创建L来获得锁。上面的方案,当竞争锁的进程比较多时,解锁时会引起Herd Effect,可对加锁规则进行限制,如按进原创 2013-09-15 10:12:16 · 6947 阅读 · 3 评论 -
Yarn设计原理分析之NodeManager
1、 和其他模块之间的交互接口分析1)作为client,NodeStatusUpdater通过ResourceTracker协议和RM进行交互(NMàRM)。该API有两个方法向RM注册NodeManager,参数为httpPort、nodeId、totalResource,其中totalResource为节点的总可分配资源,包括CPU、内存。向RM心跳,NM启动后通过定期的向RM汇报Conta原创 2014-01-08 20:58:51 · 8575 阅读 · 0 评论 -
xor算法在storm可靠性中的应用
1、先看一下数学中的异或 异或xor是一个数学运算符。它应用于逻辑运算。异或符号为“^”。异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),既然相同的对象XOR操作,结果是0,那么有这样一个公式,A xor B…xor B xor A = 0,其中原创 2013-01-19 15:00:17 · 5576 阅读 · 3 评论 -
对TextFile格式文件的lzo压缩建立index索引
hadoop中可以对文件进行压缩,可以采用gzip、lzo、snappy等压缩算法。对于lzo压缩,常用的有LzoCodec和lzopCodec,可以对sequenceFile和TextFile进行压缩,但是有一点,对TextFile压缩后,mapred对压缩后的文件默认是不能够进行split操作,需要对该lzo压缩文件进行index操作,生成lzo.index文件,map操作才可以进行spl原创 2013-01-19 14:00:52 · 7384 阅读 · 2 评论 -
设计一套实时分布式日志流收集平台(tail Logs --->HDFS)
目前业界大概这么几个开源的分布式日志系统,notify+rsync,Facebook 的Scribe,apache的chukwa,linkin的kafa和cloudera的flume。对这几款开源分布式日志系统的比较,参见这篇文章,讲的比较细致http://dongxicheng.org/search-engine/log-systems/之所以自己设计一台这么一个平台,而没有采用开源原创 2012-12-23 11:00:54 · 7463 阅读 · 0 评论 -
实现自定义的UDF永久生效
UDF永久生效现在是只能修改源代码.不过可以变通一下处理也可以实现.在HIVE_HOME的bin目录下新建一个.hiverc的文件,把写好的udf的注册语句写在这里就可以类似HIVE内置的用法一样用原理是,在运行./hive命令时,同时会加载HIVE_HOME/bin/.hiverc and $HOME/.hiverc作为初始化所需要的文件 在.hiverc文件中加入以下内容:ad原创 2012-12-24 21:58:08 · 3353 阅读 · 0 评论 -
Hive distribute by sorl by order by 的区别
distribute by:控制着在map端如何分区,按照什么字段进行分区,要注意均衡sort by:每个reduce按照sort by 字段进行排序,reduce的数量按照默认的数量来进行,当然可以指定。 最终可以进行归并排序得出结果。 适用于数据量比较大的排序场景。order by:reduce只有一个,在一个reduc原创 2012-12-25 12:39:51 · 6940 阅读 · 0 评论 -
从几个角度看hadoop相关参数优化
HDFS文件系统调优 1、系统角度 存储方式,NameNode采用raid1+0,DataNode采用磁盘组JBOD方式 在顺序读文件的场景中,比如mapreduce,可以调整文件系统预读缓存的大小。 文件挂载设置noaptime、nodiratime,提升文件系统的性能2、hdfs的参数优化原创 2012-12-31 11:29:15 · 2014 阅读 · 1 评论 -
zookeeper在hbase中的节点梳理
zookeeper在hbase中的利用梳理相关的节点说明,root-region-server:ROOT表所在的regionserver(HMaster查找root表并分配给一个NodeServer上后,注册在zookeeper上)rs:子节点表示在线的region server(regionserver上线后,注册在rs下面)draining:(HDFS currently原创 2012-12-17 17:14:50 · 3957 阅读 · 0 评论 -
执行mapreduce的几种方式
执行mapreduce的几种方式1、copy jar到hadoop中执行 ./hadoop jar xxxx.jar mainclass ./hadoop jar -libjars xxx.jar /home/test/xxx.jar 对于引用的第三方jar,该如何处理?? a、通过命令行参数传递jar文件原创 2012-12-17 17:17:03 · 2513 阅读 · 0 评论 -
hive架构原理简析-mapreduce部分
整个处理流程包括主要包括,语法解析(抽象语法树,AST,采用antlr),语义分析(sematic Analyzer生成查询块),逻辑计划生成(OP tree),逻辑计划优化,物理计划生成(Task tree),以及物理计划执行组成。下面这张图(不知道是谁画的)简要的说明了整个处理的流程 这里重点说一下物理计划生成,以及执行。物理计划的生成是根据逻辑操作树(operator)来原创 2012-12-19 15:47:16 · 7527 阅读 · 0 评论 -
HDFS的存储结构以及操作流程简单总结
一、NameNode数据结构1、物理结构${dfs.name.dir}/current/{VERSION,edits,fsimage,fstime}dfs.name.dir是一个目录列表,存储每个目录的镜像。VERSION文件是Java属性文件,包含运行HDFS的版本信息。edits,是编辑日志文件。当客户断执行写操作的时,NameNode首先会在编辑日志中写下记录,并在内存中保存原创 2013-01-02 12:03:55 · 5208 阅读 · 0 评论 -
hadoop小文件的问题带来的问题和解决方案
hadoop最初主要是针对流式文件的,每个文件在NameNode中都会保存一份文件元数据,并且运行过程中,元数据都是加载到内存中的,有namenode内存的限制;其次mapreduce的时候,每个小文件占用一个slot,调度方面的开销比较大。hadoop自带了三种方案:hadoop archive,SequenceFile,CombineFileInputFormata、 hadoop a原创 2013-01-03 09:33:27 · 1667 阅读 · 0 评论 -
hadoop 作业调度器算法
Hadoop Job SchedulerHadoop的作业调度器,可以以插件的方式加载,常见的作业调度器有三种:默认调度算法FIFO计算能力调度算法Capacity Scheduler(Yahoo!开发)公平份额调度算法Fair Scheduler(Facebook开发)默认调度算法FIFO简介:最早的Hadoop Map/Reduce计算架构中,JobTracke转载 2013-01-03 09:24:42 · 1800 阅读 · 0 评论 -
几种序列化之间的比较Thrift&protocolbuffer&avro
thrift和avro都提供rpc服务和序列化,而protocolbuffer只是提供序列化功能Avro是强调一种高效的序列化,标准性的云计算的数据交换和存储的ProtocolAvro的创新之处在于融合了显式,declarative的Schema和高效二进制的数据表达,强调数据的自我描述,克服了以往单纯XML或二进制系统的缺陷。Avro对Schema动态加载功能,是Thrift编程接口所不转载 2012-12-19 16:37:09 · 10522 阅读 · 1 评论 -
hadoop命令大全
1、列出所有Hadoop Shell支持的命令$ bin/hadoop fs -help2、显示关于某个命令的详细信息$ bin/hadoop fs -help command-name3、用户可使用以下命令在指定路径下查看历史日志汇总$ bin/hadoop job -history output-dir这条命令会显示作业的细节信息,失败和终止的任务细节。4、关于作业转载 2012-12-20 22:22:45 · 1113 阅读 · 0 评论 -
通过jobtracker、tasktraker的log分析mapreduce的过程
网上有很多mapreduce的源码解析以及执行过程,这里从相关的日志角度看mapreduce的执行过程,以便于在通过日志分析定位分析问题先简单说一下mapreduce的执行过程,如下图:1、应用程序客户端client准备作业(数据split划分,作业配置等),并上传值HDFS中;并提交作业至JobTracker。2、JobTracker根据job的配置信息(jobconf,spli原创 2012-12-21 15:39:35 · 5162 阅读 · 0 评论 -
map和reduce的数量是如何定义的
一般情况下,在输入源是文件的时候,一个task的map数量由splitSize来决定的,那么splitSize是由以下几个来决定的goalSize = totalSize / mapred.map.tasksminSize = max {mapred.min.split.size, minSplitSize}splitSize = max (minSize, min(goalSize,原创 2012-12-19 16:09:36 · 3391 阅读 · 0 评论 -
关于几种压缩算法以及hadoop和hbase中的压缩配置说明
Hadoop中常用的压缩算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系统安装native库才可以支持下面这张表,是比较官方一点的统计,不同的场合用不同的压缩算法。bzip2和GZIP是比较消耗CPU的,压缩比最高,GZIP不能被分块并行的处理;Snappy和LZO差不多,稍微胜出一点,cpu消耗的比GZIP少。通常情况下,想在CPU和IO之间取得平衡的原创 2013-01-06 22:51:31 · 24058 阅读 · 0 评论