自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(144)
  • 收藏
  • 关注

转载 hbase简介

上周介绍了Mysql索引,我们知道一个完整的记录是保存在一个page中的连续的空间,类似如下图具体一个表包含了哪些字段、每个字段类型、长度等,都是在表定义的时候确定的。后续需要新增字段、修改字段类型等,那么代价是很大的,需要做很多的空间腾挪和数据的复制。 今天介绍的hbase就是没有这么多的约束了。一 基本概念rowKey...

2020-01-05 00:08:48 205

原创 spring源码学习---bean获取

bean获取我们从容器中获取一个bean对象,首先需要看下bean的scope属性,如果是singleton,那么就比较简单,直接获取获取返回就可以,如果是prototype,那么就相对复杂一点,下面分别介绍下。 singleton如果让我来实现,应该有两种方式:第一种:容器在启动时候,把所有的singleton bean对象都创建好并保存起来,应用来拿时候直接返回第二种:容器启动时候不创建,第一个

2017-03-16 22:30:18 1261 1

原创 spring学习——scope属性

scope属性scope表示spring容器对一个bean的请求的处理方式,我们常用的设置值有:singleton(默认的)和prototypesingleton在容器中,从请求bean到容器生命周期结束,有且仅有一个bean的实例,每次请求都返回这个,所以对应生命周期从创建到容器销毁prototype每次请求bean,容器都会给生成一个新的实例并返回,返回后容器就不负责这个实例的管理。实例的生命周

2017-03-16 22:26:44 805

原创 spring 学习

http://www.iteye.com/topic/1123081

2017-03-09 20:03:12 700

原创 java源码分析:重入锁ReentrantLock

可重入:一个线程可以连续多次获得锁Lock.lock() 获取锁 final void lock() { acquire(1); }很简单,就是调用acqire函数,后面的参数1表示,如果获得了锁,对于第一次获取的,那么就锁的值就是1,否则值+1 public final void acquire(int arg) { if (

2017-02-24 21:56:51 732

原创 java线程的状态

Thread.Status中定义了线程的状态,也就是我们通过jstack能看到的线程的状态,主要有下面几种: 线程可以处于下列状态之一: 1.NEW 至今尚未启动的线程的状态。 2.RUNNABLE 可运行线程的线程状态。处于可运行状态的某一线程正在 Java 虚拟机中运行,但它可能正在等待操作系统中的其他资源,比如处理器。在这里没有RUNNING状态的,真正在运行的线程状态也都是现实RUNNAB

2017-02-24 21:49:27 695

原创 java源码分析

arrayBlockQueue生成(插入元素)在往队列中插入数据由下面几个函数,他们的区别就是对队列满的情况处理不同 - put 一直等待着 - offer(无时间) 如果空了直接返回false - offer(有时间) 等待指定的时间,在指定时间内如果空了,那么插入,负责返回false - add 抛出一个IllegalStateException异常首先来看put实现 public

2017-02-24 21:30:51 683

原创 java conditions源码分析

private Node addConditionWaiter() { Node t = lastWaiter; // If lastWaiter is cancelled, clean out. if (t != null && t.waitStatus != Node.CONDITION) {

2017-02-24 00:03:29 653

原创 jetty源码分析:QueuedThreadPool

概括我们从几个问题入手,如果搞清楚这几个问题,也就理解了这个线程池的原理了1. 重要的成员线程池常规成员: private int _idleTimeout; //线程空闲多久后退出 private int _maxThreads; //最大线程数

2017-02-19 21:30:48 2665

原创 java interrupt理解

理解 当一个线程被阻塞的时候(io, sleep等),我们取消这种阻塞,这个时候就可以使用interrupt 例子和讲解我们先看个例子,代码入下:package com.renzhan;class TestRunnable implements Runnable{ public void run(){ while(true) { S

2017-02-18 23:29:53 1291

原创 ThreadPoolTaskExecutor 使用和原理

使用ThreadPoolTaskExecutor是一个spring的线程池技术,利用他可以轻松的视线线程池,下面代码是具体的使用pom.xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <

2017-02-08 20:04:31 23904 1

原创 hdfs 块信息

# 基础数据block这里是我们数据存储的基本单位,我们可以看到一个数据块对应的两个文件: blk_1234 blk_1234_5678.meta上面的1234就是这个数据块的编号, 5678是版本号。 对应的block结构就很简单 private long blockId; //块的唯一id private long numBytes; //占据的空间大小

2016-12-07 10:35:12 1121

原创 jstorm源码分析: zookeeper

作用zookeeper在整个系统中主要用户各个角色信息传递的中介,所以里面存了不少的信息信息我们只要打开zookeeper目录,可以看到很多的信息,下面一一介绍supervisors这里存放了集群中所有的supervisor的信息, 具体保存时候按照supervisor_id为目录名保存,具体的信息使用SupervisorInfo类进行保存,如下 private static final lon

2016-10-16 21:36:36 1557

原创 jstorm 源码分析: supervisor

定位supervisor在整个jstorm集群中主要是作用类似一个小管家:管理一台机器上的任务,包括从zookeeper上来负责领取任务、管理本机上的work、汇报本机信息到zookeeper上结构整体结构比较简单 private final String hostName; //机器的名称 private final String supervisorI

2016-10-01 23:24:01 1646

原创 jstorm 源码分析汇总

# 待分析问题:1  信息如何保证补丢失2 disruptor实现原理3 full of queue如何产生的4 性能、运行状况信息如何传递的

2016-09-27 00:09:43 1372

原创 jstorm源码分析: nimbus

nimbustopologyAssign准备工作分配worker和task信息写入nimbus里面有很重要的成员的topologyAssigntopologyAssign这个类实现了Runnable, 在里面通过创建thread并通过start()启动了线程public class TopologyAssign implements Runnable {那么我们可以直接看他的run函数 p

2016-09-25 22:57:02 2273

原创 jstorm源码分析:work管理

管理work前面已经知道了,通过SyncProcessEvent 可以从zookeeper上获取分配到一台机器的任务信息,那么有了这些信息,我们能干什么呢?接下来我们就来揭开SyncProcessEvent的面纱主要成员private LocalState localState; 本地状态,主要是本地所有的work状态信息,包括心跳检测信息等 private Map入口整个入口还是在我们的ru

2016-05-31 08:57:15 2442

原创 jstorm源码分析:任务领取

任务领取每个jstorm的工作机器会定时的扫面zookeeper的任务分配的目录,看是否有自己的任务,如果有,那么把对应的信息写到本地机器的制定目录中,这个工作主要是有SyncSupervisorEvent 线程中的run方法来完成的,我们主要来分析这个函数 @Override public void run() { LOG.debug("Synchronizing

2016-05-22 00:17:25 2922

原创 jstorm源码分析:提交任务过程

submitTopologyWithOpts(ServiceHandler)1 首先是校验任务的名称是否合法 if (!Common.charValidate(topologyName)) { throw new InvalidTopologyException(topologyName + " is not a valid topology name"

2016-03-17 23:03:03 3266

原创 idea 使用

1   进入函数实现快捷键 ctrl+ alt + B 2  返回上次浏览的函数   ctrl+alt + 这里有个问题,快捷键会把系统设置给拦截,可以通过如下设置解决:以Intel集成显卡为例打开【控制面板】打开【英特尔图形和媒体控制面板】进入【选项和支持】\【快捷键管理中心】将【快捷键功能】取消勾选即可

2016-03-17 17:56:33 991

原创 问题记录

1  把路径加入PATH环境变量export JAVA_HOME=/user/javaexport PATH=$JAVA_HOME/bin:$PATH

2016-02-26 16:46:33 911

转载 hadoop 0.20.2 搭建

转载: http://www.cnblogs.com/xia520pi/archive/2012/05/16/2503949.html

2015-10-18 10:39:21 649

转载 SSH-KeyGen 的用法

转自:http://blog.163.com/chen98_2006@126/blog/static/158584272007101862513886/假设 A 为客户机器,B为目标机;要达到的目的:A机器ssh登录B机器无需输入密码;加密方式选 rsa|dsa均可以,默认dsa做法:1、登录A机器 2、ssh-keygen -t [rsa|

2015-10-18 08:23:19 672

原创 hadoop combine 使用场景

hadoop中的combine函数,本质上是一个本地的reducer。其设计初衷是在本地将需要reduce操作的数据就行合并,以减少不必要的通信代价,combine可以提高hadoop的运行性能。    但值得注意的是,并不是所有的mapreduce程序都可以将reduce过程移植到本地进行combine,这需要在逻辑上考虑这种移植是否可行!要想进行本地reduce

2014-06-11 16:58:17 4555

原创 grep的时候Binary file (standard input) matches

grep 识别文件的时候,认为这个是个二进制文件,报告错误,

2014-06-11 10:01:26 13702

原创 hive 优化

1  把字段值是空的结果过滤掉    bb on (bb.rdid is not null and a.rdid =bb.rdid)

2014-06-10 17:37:31 952

原创 storm 基本命令

1 提交storm jar storm-starter-0.0.1-SNAPSHOT-jar-with-dependencies.jar  storm.starter.WordCountTopology  wordcount 2 退出任务/home/a/storm/bin/storm kill  wordcount3

2014-03-04 15:23:09 4505

原创 hadoop 命令

1   getmerge      用于从hdfs上的文件合并为一个本地的文件      hadoop fs -getmerge

2014-01-28 15:24:51 1080

原创 hadoop 笔记

1  如何设置hadoop 输入为二进制?         首先包含文件:                  import org.apache.hadoop.mapred.SequenceFileInputFormat;         再在confJob中设置:        conf.setInputFormat(SequenceFileInputFormat.class);

2014-01-27 15:29:25 1100

原创 leveldb 查找过程

我们先看下面代码1074 {1075 mutex_.Unlock();1076 // First look in the memtable, then in the immutable memtable (if any).1077 LookupKey lkey(key, snapshot);1078 if (mem->Get(lkey, valu

2013-05-19 15:17:52 2354

原创 UIButton 使用的感受

1    如果在UIView上加了一个button 并添加了事件,那么需要整个button就需要放到父view中,否者外面部分无法驱动事件 2  如果在  UIImageView 添加了一个button并有事件,那么需要设置userInteractionEnabled =YES; 否者也无法触发

2013-04-02 14:44:41 1277

原创 redis 事件处理

事件处理其实很简单,下面这个函数403 //主函数404 void aeMain(aeEventLoop *eventLoop) {405 eventLoop->stop = 0;406 while (!eventLoop->stop) {407 if (eventLoop->beforesleep != NULL)408 ev

2012-10-25 15:03:45 2018

原创 tornado httpclient 超时设置

需要创建一个request对象,在这个对象中可以制定超时时间,具体代码如下:  http_client = httpclient.HTTPClient() response = None req = httpclient.HTTPRequest(url, request_timeout=time_out response = http_client.fetch(req) r = res

2012-10-23 10:50:22 7931

原创 内核基本概念

1   get_fs 和 set_fs         设置和得到用户能访问虚拟地址空间,   经常使用的两个直 kernel_ds和user_ds  , 其中允许访问内核空间和用户空间,而后者只能访问用户空间。          我们在内核代码中经常看到如下代码//如果仅仅能访问用户空间,那么需要对地址进一步校验,是否超出用户空间if (!segment_eq(get_fs()

2012-10-18 10:57:29 1232

原创 内核模块

1 源代码   #include #include #include MODULE_LICENSE("DUAL BSD/GPL"); static int hello_init(void){ printk(KERN_INFO "Hello World!\n"); return 0;}static void hello_exit(void){

2012-10-17 13:41:10 1004

原创 redis中ziplist

ziplist 是一个压缩的双向列表。传统的双向链表,在每个节点,都需要指向下一个和前一个节点的指针,占据了一定的空间;同时双向链表中使用字符串保存了节点的值,对于整形的数值而言,比较费空间。ziplist 在这些方面进行了一些优化。       下面跟着源码来学习下:          结构               其中 zlbytes   整个列表所占据的空间。

2012-07-28 16:49:20 4086

原创 redis中list长度

我们使用redis , 其中经常需要得到一个list长度,那么这个list长度是否存储了还是每次都需要遍历整个list呢?           看了下源码 78 unsigned long listTypeLength(robj *subject) { 79 if (subject->encoding == REDIS_ENCODING_ZIPLIST) { 80

2012-04-28 11:06:02 30772 2

原创 sphinx python api 误用导致查询不到

对外服务的是使用一个sphinxapi对象的,每次一个请求过来,我会使用  SetFilter 进行城市的过滤,本来根据名字的意思应是个设置操作,但实际它是一个append过程,所以当 SetFilter过滤不同城市的时候, 其实存在两个过滤, 而过滤操作之间是进行and操作的,所以会导致无结果,所以我们在每次查询之前进行一个.ResetFilters()操作,就可以了。

2012-03-28 14:39:40 1711

原创 redis 删除超时key

该功能主要通过expireIfNeeded 这个函数来实现的,redis对于需要设置超时的key,放到了单独的一个hash中,所以只要检测这个超时hash就可以了。//检查是否超时,超时了那么就删除int expireIfNeeded(redisDb *db, robj *key) { time_t when = getExpire(db,key); //该key

2012-03-19 13:42:06 4655

原创 mysql group_concat

使用group by 可以对数据进行分组,那么我们想知道每个组内的成员怎么样,就可以使用group_concat,他能把组内的数据的字段进行聚合,形成一个新的字段         比如小朋友按照男和女的进行分组,那么分好后,你还可以知道男的小朋友具体有哪几个

2012-03-09 20:53:19 897

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除