- 博客(39)
- 资源 (10)
- 收藏
- 关注
原创 从几个角度看hadoop相关参数优化
HDFS文件系统调优 1、系统角度 存储方式,NameNode采用raid1+0,DataNode采用磁盘组JBOD方式 在顺序读文件的场景中,比如mapreduce,可以调整文件系统预读缓存的大小。 文件挂载设置noaptime、nodiratime,提升文件系统的性能2、hdfs的参数优化
2012-12-31 11:29:15 1974 1
原创 简单分享开放平台的设计理念和思路
以前的一个电商开放平台,里面的设计思路和理念拿出来和大家分享一下该平台统一各大电商服务提供方的服务,进行编排后提供为开放的API为各个业务产品服务。在设计平台架构时,主要考虑以下几个因素:1、高并发和高吞吐量,我们采用分段式的架构,段与段之间采用同步非阻塞方式的通信方式,并且在http协议接入部分采用异步servlet方式。2、整个平台的可用性,这其中包括以下几个方面
2012-12-30 21:39:56 11436 1
转载 项目经理怎样处理技术见解不同导致的人员冲突?
自古以来,我们的价值观就不断强调:家和万事兴、以和为贵。但在软件开发项目中我们经常会遇到一个问题:冲突。冲突是软件项目开发的一种常态,无从回避,冲突影响的好坏取决于冲突管理的成效。因此,开发项目经理常被人们戏称为冲突经理。 在冲突管理中,一旦发现冲突,就要对问题进行研究,判断冲突的产生是否由项目任务、个人利益或个性等问题所引起,找出问题的潜在根源,然后针对实际情况提出具体的解决办法。
2012-12-30 17:06:21 2391
原创 IO模型介绍以及同步异步阻塞非阻塞的区别
先说一下几个单词。阻塞:用户进程访问数据时,如果未完成IO,等待IO操作完成或者进行系统调用来判断IO是否完成非阻塞:用户进程访问数据时,会马上返回一个状态值,无论是否完成同步:用户进程发起IO(就绪判断)后,轮询内核状态异步:用户进程发起IO后,可以做其他事情,等待内核通知 介绍一下IO模型 网络IO模型和文件IO模型是一样的,上图是IO的5种模型,包括阻塞IO、
2012-12-30 16:44:17 1789
原创 关于mysql innodb的监控
关于mysql 的监控,mysql提供了数据采集的命令,比如show status命令或者读取数据库informat_schema的GLOBAL_STATUS对象;也可以用一些现成的监控工具进行查询,目前用的比较多的innotop、mysqlreport、mtop、mytop,还有淘宝perl语言研发的orzdba。就监控的指标而言,有系统层面的,数据库层面的。1、系统层面包括系统的loa
2012-12-30 14:30:01 5945
原创 关于HFile的存储结构梳理以及快速定位rowkey
一、HFile结构介绍 为了支持数据的随机查询,HFile结构分为六个部分:1、数据块–保存表中的数据,每一个数据块由块头和一些keyValue(record)组成,key的值是严格按照顺序存储的。块大小默认为64K(由建表时创建cf时指定或者HColumnDescriptor.setBlockSize(size)),这一部分可以压缩存储。在查询数据时,是以数据块为单位从硬盘loa
2012-12-29 21:37:58 10843 2
原创 关于SolrCloud的索引分片和查询的可增强点
Solr4.0包含了分布式的sorl解决方案solrCloud,可以做sharding切分,每个sharding中节点支持选举算法(leader,replica),在sharding里面支持query的负载均衡。在集群启动时,就需要声明当shard、collection等信息,启动过程中把集群的状态信息维护在zookeeper节点里。集群中的任何一台server都可以响应客户端的请求,包括
2012-12-29 13:42:24 11809 4
原创 梳理一下流式处理、实时计算、Add-hoc、离线计算、实时查询等区别
流式处理、实时计算、Add-hoc、离线计算、实时查询 这几个概念在数据处理中经常提高,这里简单的梳理一下他们的区别。流处理、实时计算属于一类的,即计算在数据变化时,都是在数据的计算实时性要求比较高的场景,能够实时的响应结果,一般在秒级,Yahoo的S4,twiter的storm都属于流处理和实时计算一类的。Add-hoc和实时查询都计算在query时,实时查询是响应可能千变万化的结果,无
2012-12-28 22:23:44 11253 1
转载 解析从堆到优先队列的实现
优先队列,顾名思义,就是一种根据一定优先级存储和取出数据的队列。它可以说是队列和排序的完美结合体,不仅可以存储数据,还可以将这些数据按照我们设定的规则进行排序。先说说优先队列的实现吧。有一点需要澄清,很多人一直以为Priority Queue就是一个Priority Heap,这种说法当然是片面的。既然优先队列只是存储数据和排序的结合,那么根据我们学过的知识,可以列出以下的实现方法:无序数组、
2012-12-27 21:40:02 1205
原创 HBase Coprocessor Endpint运行机制
Observer包括MasterObserver,RegionObserver和WALObserver,就类似RDBMS里面的trigger,Observer能够让我们针对Hbase的各种事件(比如put操作、get操作、Region的split或者是move等等)hook我们的代码,可以让我们的代码在这些事情对应操作之前执行(pre*)还是之后执行(post*),需要注意的就是我们hook的代码
2012-12-25 21:41:04 1685
原创 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 6923
原创 实现自定义的UDF永久生效
UDF永久生效现在是只能修改源代码.不过可以变通一下处理也可以实现.在HIVE_HOME的bin目录下新建一个.hiverc的文件,把写好的udf的注册语句写在这里就可以类似HIVE内置的用法一样用原理是,在运行./hive命令时,同时会加载HIVE_HOME/bin/.hiverc and $HOME/.hiverc作为初始化所需要的文件 在.hiverc文件中加入以下内容:ad
2012-12-24 21:58:08 3322
原创 Mysql inndodb 存储引擎的简单总结(组成结构,锁,事务,备份,优化)
上面这张图总结了innodb mysql的逻辑和物理架构组成,锁与事务,备份策略以及调优点,以下就每个点进行总结说明。在线程处理方面,Mysql是多线程的架构,由一个master线程,一个锁监控线程,一个错误监控线程,和多个IO线程组成。并且对一个连接会开启一个线程进行服务。io线程又分为节省随机IO的insert buffer,用于事务控制的类似于oracle的redo log,
2012-12-24 15:43:58 2680
原创 关于BlockCache
Blockcache主要是为了提高对storefile的访问效率而增加的内存结构,通过将常访问的数据缓存在内存中来实现。其实hbase中除了常常介绍的lrublockcache以外,还有一种是slabcache。先简单的说明下slabcache。如果对oracle的cache管理比较熟悉的话就很容易理解slabcache,他们的基本原理是相同的。将cache根据不同的slabsize分成若
2012-12-23 20:01:16 2440
原创 关于数据库索引设计的几个常用算法
B+、B- Tree(mysql,oracle,mongodb) 主要用在关系数据库的索引中,如oracle,mysql innodb;mongodb中的索引也是B-树实现的;还有HBase中HFile中的DataBlock的索引等等。 动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tre
2012-12-23 19:57:50 10607
原创 Hbase的优化总结
Hbase的优化总结 上面这张图不是一太清晰,我后面给个单独的连接 这里的HBase的优化主要从三个大的维度来进行分析1、系统硬件 采用普通的PC Server即可,Master要求高一点(比如8 CPU,48G内存,SAS raid),Regionserver(如8CPU,24G内存,1T*12 SATA JBOD) 对于存储regionserver
2012-12-23 17:45:06 8832 3
转载 JBOD的使用问题
1)组建JBOD是,多个硬盘通过BIOS让上层安装的操作系统如windows,linux认为有只有一个单一的磁盘存在了。进入系统后,所以要是分区的话,无须考虑原来几块硬盘的大小了。2)增加一个硬盘到原来的JBOD存储阵列,在早期一些阵列卡或者主板上需要重新格式化所有硬盘。 这2、3年生产的主板或者阵列卡已经可以直接把新硬盘加入原有的JBOD存储阵列,不破坏任何数据。3) JBOD存储阵列,
2012-12-23 16:55:45 7782
原创 设计一套实时分布式日志流收集平台(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 7414
原创 用顺序表链表分别实现栈和队列
顺序表(查找比较块O(1),插入效率不高O(n))、链表(插入比较快0(1),只能顺序查询0(n))用顺序表实现栈,用position保存栈顶的位置,push操作,position移动,pop操作position后移动用顺序表实现队列(两个position),push操作,队尾position向前移动,pop操作,队头position向前移动。涉及到队列溢出,进行回路 链表初始
2012-12-22 22:50:54 1721
原创 实现java class动态更新的几个机制
java 类的动态加载主要有这么几个方面1、新classloading,缺点是无法保存类实例的状态2、JVM TI,java instrument底层实现是JVMTI,可以在JVM启动之后,进行动态装载:可以改造类,Instrument 更适用于监控和控制虚拟机的行为(在不改变类的情况下,改变类的行为,在JVM底层做AOP)。3、jdk proxy,cglib--->封装了ASM(Ja
2012-12-22 22:21:03 2162
原创 分布式数据库的一致性探讨
数据库大体分为以下几类,有关系型(事务型)的数据库,以oracle、mysql为代表,有keyvalue数据库,以redis和memcached db为代表,有文档型数据库如mongodb,有列式数据库以HBase,cassandra,dynamo为代表,还要其他的图形数据库、对象数据 库、xml数据库等。有些数据库本身就是分布式的数据库设计理念,比如上面的列式数据库;有些本身是单节点的设计架
2012-12-22 19:32:17 8594
原创 一起分享,一起成长,好好总结吧
从传统的企业应用到中间件的研发,再到互联网,摸爬滚打了10多年,无论了团队和项目的管理,还是技术架构,或许是自己平时的懒惰,还是忙于其他的事情,一直没有好好的总结和分享,从09年开博到现在,没写上几篇。该是好好总结的时候了,俗话说,好记性不如烂笔头,一方面对于自己来说是一个梳理,另外一方面也把自己平时的经验知识和大家一起分享,一起成长。
2012-12-22 09:24:28 1681
原创 HBase的的管理笔记
一、数据移植1、 bulk load toolimporttsv用法:importtsv -Dimporttsv.columns=a,b,c -Dimporttsv.skip.bad.lines=false - fail if encountering an invalid line'-Dimporttsv.separator=|' - eg separate on pi
2012-12-21 22:27:24 4299
原创 Hbase和solr在海量数据查询中的应用
对于历史数据的查询,在数据规模不大的情况下,可以用传统的关系型数据库,如oracle,mysql等,可以利用他们提供的索引功能,实现高效的查询。但是当数据上升到一定规模后,用传统的关系型数据库就不太合适了,当然可以把数据存到分布式数据库HBase中。HBase目前只支持对rowkey的一级索引,对于二级索引还不支持,当然可以把所有要索引的字段都拼接到rowkey中,根据hbase的filt
2012-12-21 20:51:48 16679 8
原创 通过jobtracker、tasktraker的log分析mapreduce的过程
网上有很多mapreduce的源码解析以及执行过程,这里从相关的日志角度看mapreduce的执行过程,以便于在通过日志分析定位分析问题先简单说一下mapreduce的执行过程,如下图:1、应用程序客户端client准备作业(数据split划分,作业配置等),并上传值HDFS中;并提交作业至JobTracker。2、JobTracker根据job的配置信息(jobconf,spli
2012-12-21 15:39:35 5124
转载 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 1095
原创 经常遇到的java.lang.OutOfMemoryError: unable to create new native thread解决方法
简单分享一下,类似问题的解决方法刚才在某机器上上xxx用户下压测时遇到这个问题,连xxx都进不去了说明xxx用户下无法创建跟多的线程了(当然root用户没这个问题) 系统能够创建的最大线程数:(MaxProcessMemory - JVMMemory –系统内存) / (ThreadStackSize) = Number of threads有两种方式:
2012-12-20 11:08:42 13865
转载 几种序列化之间的比较Thrift&protocolbuffer&avro
thrift和avro都提供rpc服务和序列化,而protocolbuffer只是提供序列化功能Avro是强调一种高效的序列化,标准性的云计算的数据交换和存储的ProtocolAvro的创新之处在于融合了显式,declarative的Schema和高效二进制的数据表达,强调数据的自我描述,克服了以往单纯XML或二进制系统的缺陷。Avro对Schema动态加载功能,是Thrift编程接口所不
2012-12-19 16:37:09 10428 1
原创 OAuth2的流程梳理
三种角色:用户,客户端网站,服务提供者流程: a、用户访问客户端网站需要登录,客户端网站请求服务提供者,服务提供者返回客户端key和临时token b、客户端网站引导用户redirect至服务提供者的授权页面,并提供客户端key和临时token,以及登录成功后客户端网站的回调URL c、用户在授权页面上输入用户和密码登录,进行登录 d、授权登录成功后,服务提供方引导用户
2012-12-19 16:24:00 2109
原创 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 3308
原创 hive架构原理简析-mapreduce部分
整个处理流程包括主要包括,语法解析(抽象语法树,AST,采用antlr),语义分析(sematic Analyzer生成查询块),逻辑计划生成(OP tree),逻辑计划优化,物理计划生成(Task tree),以及物理计划执行组成。下面这张图(不知道是谁画的)简要的说明了整个处理的流程 这里重点说一下物理计划生成,以及执行。物理计划的生成是根据逻辑操作树(operator)来
2012-12-19 15:47:16 7476
原创 结合源码分析HBase相关操作流程
1、RegionServer打开region的过程: 首先master给regionServer发出打开region的命令(AssignmentManager.assign) RegionOpeningState regionOpenState = ServerManager.sendRegionOpen(plan .getDestinatio
2012-12-17 22:02:32 2888
原创 mongodb和redis设计原理简析
redis: 1、NIO通信 因都在内存操作,所以逻辑的操作非常快,减少了CPU的切换开销,所以为单线程的模式(逻辑处理线程和主线程是一个)。 reactor模式,实现自己的多路复用NIO机制(epoll,select,kqueue等) 单线程处理多任务2、数据结构 hash+bucket结构,当链表的长度过长时,会采取迁移的措施(扩展原来两
2012-12-17 21:36:31 7387
原创 Mina总结
MinaMINA(IO和处理逻辑共用一个线程,对于handler处理逻辑比较复杂耗时长的来说,需要给handler一个单独的线程来处理,也就是io处理线程和handler线程分开,ioservice和ExecutorFilter分开):服务端,1、创建NIOSocketAcceptor2、bind绑定地址端口,启动一个线程Accept线程,轮询是否有新的端口绑定
2012-12-17 17:24:52 11697
原创 执行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 2479
原创 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 3923
原创 Jmeter和Tsung之间的对比
Jmeter和Tsung之间的对比1、压力生成原理对比 Jmeter采用多线程的方式来设置并发度,对CPU和内存的消耗比较大 tsung采用面向高并发的erlang语言开发的,轻量级的进程方式,在并发方面有天然优势2、多client的压力器支持 都可以进行分布式的部署多个压力器,来承担大并发的压力,当然应对大并发首先需要先对系统做调优,如tcp/ip的相关参数、文
2012-12-17 16:41:06 4939
原创 分析系统的性能问题的维度
如何分析系统的性能问题:从以下几个维度进行考虑 当并发压力加大时,往往是吞吐量上不去,肯定是某一个方面出现了瓶颈,(比如CPU,内存(大量的swap),磁盘IO,网络IO,操作系统,应用) 如果CPU比较高(user,sys,wa),user高,可以把系统的线程dump出来,观察系统正在做的逻辑,优化逻辑;sys高,则说明kernel耗费了大量的CPU时间,比如当前的线程的切换比较厉
2012-12-17 16:38:19 2342
原创 如何设计高并发的系统
a、空间换时间(多级缓存) 1)客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 2)反向代理缓存 3)应用端的缓存(memcache)
2012-12-17 15:12:07 2689
TCP.IP.Sockets.in.Java.2nd.Edition
2010-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人