自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

坐禅小和尚的专栏

记录自己在学习当中的一些心得,不一定正确,但重在分享

  • 博客(60)
  • 问答 (1)
  • 收藏
  • 关注

原创 Kafka在Zookeeper中保存数据的结构

* Consumer id registry */consumers/[group_id]/ids[consumer_id] -> topic1,...topicN每一个group中的每一个consumer都有一个唯一的ID。每一个consumer都将其ID在zookeeper中创建一个ephemeral znode,节点的值是该consumer订阅的所有topic。当consumer断开其与zoo

2016-05-23 15:53:37 2816

原创 STROM state persist操作的基本理解

在state存储过程中,STORM对于state对象并没有进行任何操作.Storm框架只是把batch中的每一个tuple按照输出列的要求保存到一个List当中,在Batch处理完成后统一交由StateUpdater函数进行处理。 public void startBatch(ProcessorContext processorContext) { processorConte

2016-05-16 14:48:48 1596

原创 STORM StateQuery方法的使用与底层原理

Stream.stateQuery(TridentState state, Fields inputFields, QueryFunction function, Fields functionFields)方法主要是根据输入从持久化存储系统中读取相应的数据并将其当作一个数据流供Strom Topology使用。下面我们看一下stateQuery的具体执行过程:@Override publi

2016-05-16 14:48:00 1860

原创 Storm Aggregator原理与底层框架调用

package org.apache.storm.trident.operation;import org.apache.storm.trident.tuple.TridentTuple;public interface Aggregator<T> extends Operation { T init(Object batchId, TridentCollector collector);

2016-05-16 14:46:58 1271

原创 Jafka源代码分析——Processor

Jafka Acceptor接收到客户端请求并建立连接后,Acceptor会将Socket连接交给Processor进行处理。Processor通过以下的处理步骤进行客户端请求的处理:1. 读取客户端请求。2. 根据客户端请求类型的不同,调用相应的处理函数进行处理。Processor读取客户端请求是一个比较有意思的事情,需要考虑两个方面的事情:第一,请求规则(Processor需要按照

2014-06-27 16:19:47 1422

原创 Jafka源代码分析——网络架构

在kafka中,每一个broker都是一个服务器。按照一般理解,服务器就是一个SocketServer,其不断接收用户的请求并进行处理。在Java中进行网络连接有两种方式一种为阻塞模式一种为非阻塞模式。Jafka采用非阻塞模式进行网络通讯。在Java的非阻塞模式中,建立socket server的一般流程如下:1.启动ServerSocketChannel并将其绑定到特定的端口。2.将Se

2014-06-27 16:14:36 1385

原创 Jafka源代码分析——LogManager

在Kafka中,LogManager负责管理broker上所有的Log(每一个topic-partition为一个Log)。通过阅读源代码可知其具体完成的功能如下:1. 按照预设规则对消息队列进行清理。2. 按照预设规则对消息队列进行持久化(flush操作)。3. 连接ZooKeeper进行broker、topic、partition相关的ZooKeeper操作。4. 管理brok

2014-06-27 16:12:54 2715 1

原创 Jafka源代码分析——随笔

Kafka是一个分布式的消息中间件,可以粗略的将其划分为三部分:Producer、Broker和Consumer。其中,Producer负责产生消息并负责将消息发送给Kafka;Broker可以简单的理解为Kafka集群中的每一台机器,其负责完成消息队列的主要功能(接收消息、消息的持久化存储、为Consumer提供消息、消息清理.....);Consumer从Broker获取消息并进行后续的操作。

2014-06-27 16:03:40 1654

原创 Hadoop RPC通信协议

Hadoop RPC客户端(Client)向RPC建立连接时向RPC服务器发送两部分内容:RPC Header和Header。RPC Header的格式如下:private void writeRpcHeader(OutputStream outStream) throws IOException { DataOutputStream out = new DataOutputStream

2014-04-17 12:12:36 2885

原创 Hadoop 2.2.0 Symlink的使用

Hadoop 2.2.0允许创建软连接并且允许MapReduce程序直接处理这些Symlink。为了允许在集群中创建symlink,需要在配置文件hdfs-site.xml中增加如下的配置项:             test.SymlinkEnabledForTesting           true      创建symlink有两种方式:一种是FileSyste

2013-12-04 17:36:42 4406

原创 Hadoop LZO的安装与配置

Hadoop支持好几种压缩算法,包括:Bzip2GzipDEFLATEHadoop提供这些算法的Java实现,所以可以很方便的通过FileSystem API来进行文件的压缩和解压缩。这些压缩算法都有一个缺陷,那就是文件不能被分片(splittable)。这就意味着采用这些算法进行压缩的文件需要读取整个文件才能将文件解压缩。这对MapReduce会产生致命的

2013-10-17 21:33:02 5494 1

原创 Hadoop fuse_dfs编译与安装

Hadoop fuse_dfs编译与安装Fuse-dfs可以将HDFS文件系统mount到本地,用于执行一些ls等基本的系统操作命令。Fuse-dfs位于$HADOOP_HOME/src/contrib/fuse-dfs目录下,需要用户进行编译。现将其编译步骤总结如下:1.安装autoconf(autoconf-latest.tar.gz)、automake(automake-1.13.4

2013-10-16 18:17:36 3026

原创 Hadoop DBOutputFormat的使用

最近在研究数据在HDFS和关系型数据库之间的迁移,主要使用了两种方式:一是,按照数据库要求的文件格式生成文件,然后由数据库提供的导入工具进行导入;二是采用JDBC的方式进行导入。MapReduce默认提供了DBInputFormat和DBOutputFormat,分别用于数据库的读取和数据库的写入。为了使用DBOutputFormat我们需要完成以下工作。首先,对于每一个数据库表编写对应的

2013-10-15 21:16:03 3241

原创 Mina源代码分析—概述

Mina是Apache旗下非常著名的开源的网络编程框架,支持TCP、UDP以及其他的一些网络通讯协议,具体的使用说明可以参照UserGuide(http://...)。本文不再介绍Mina的使用,而是记录在阅读源码过程中的一些心得。我们知道网络编程的一般流程如下:1. 监听端口,等待连接2. 建立连接3. 建立线程,读取并处理内容4. 关闭连接Mina的处理流程在逻辑上与上面所

2013-10-10 21:45:55 1715

原创 HBase的目录结构

根目录文件(Root-level files)第一部分文件是被Hlog处理的write-ahead日志文件,这些日志文件被保存在HBase根目录下的.logs文件夹。.logs目录下面为每一个HRegionServer单独创建一个文件夹,每一个文件夹下有几个HLog文件(因为log rotation)。每一个HRegionServer的所有region都共享一个HLog文件。当一个日志文件

2013-10-10 21:44:14 3771

原创 Hadoop自定义Counter

1.通过enum自定义Counterpublic static num LOG_PROCESSOR_COUNTER {BAD_RECORDS};2.在Mapper或者Reducer中操作Countercontext.getCounter(LOG_PROCESSOR_COUNTER.BAD_RECORDS). increment(1);3.在Job完成后可以进行最终统计结

2013-09-10 22:22:25 1751

原创 Hadoop SequenceFile

SequenceFile格式:每一个SequenceFile都包含一个“头”(header)。Header包含了以下几部分。1.SEQ三个字母的byte数组2.Version number的byte,目前为数字3的byte3.Key和Value的类名4.压缩相关的信息5.其他用户定义的元数据6.同步标记,sync marker对于每一条记录(K-V),其内部格式根据

2013-09-10 22:21:34 2111

原创 用Hadoop AVRO进行大量小文件的处理

使用 使用使用 使用 HDFS 保存大量小文件的缺点:1.Hadoop NameNode 在内存中保存所有文件的“元信息”数据。据统计,每一个文件需要消耗 NameNode600 字节内存。如果需要保存大量的小文件会对NameNode 造成极大的压力。2.如果采用 Hadoop MapReduce 进行小文件的处理,那么 Mapper 的个数就会跟小文件的个数成线性相关(备注:FileIn

2013-06-18 19:41:18 8027

原创 Hadoop HPROF 的使用

我们编写的MapReduce程序不一定都是高效的,我们需要确定MapReduce的瓶颈在什么地方。Hadoop框架提供对HPROF的支持,HPROF能够跟踪CPU、堆的使用以及线程的生命周期,对于确定程序的瓶颈能够提供很大的帮助。为了使用HPROF我们需要在JobConf中进行一些设置,具体操作如下:JobConf jobConf = new JobConf(conf);    job

2013-05-30 19:33:08 1778

原创 Hadoop实现数据库表关联

Hadoop实现数据库表关联主要有两种方式:Map Side Join和Reduce Side Join。本文主要讨论Reduce Side Join的实现与优化。Reduce Side Join是一个完整的MapReduce Job。在Map阶段将来自不同源的原始数据进行区分,对来自不同表的记录构造关联键并将来自不同“表”的记录划分到同一个分组。在Reduce阶段,将来自不同的表记录进行关联。

2013-05-29 20:32:55 2398

原创 Hadoop框架排序和分组的理解

MapReduce框架会确保每一个Reducer的输入都是按Key进行排序的。一般,将排序以及Map的输出传输到Reduce的过程称为混洗(shuffle)。每一个Map都包含一个环形的缓存,默认100M,Map首先将输出写到缓存当中。当缓存的内容达到“阈值”时(阈值默认的大小是缓存的80%),一个后台线程负责将结果写到硬盘,这个过程称为“spill”。Spill过程中,Map仍可以向缓存写入结果

2013-05-28 18:54:50 7291

原创 RCFileInputFormat的使用方法

在使用RCFileInputFormat时可以设置需要读取的列的序号:  /**   * Sets read columns' ids(start from zero) for RCFile's Reader. Once a column   * is included in the list, RCFile's reader will not skip its value.

2013-05-14 19:27:01 1189

原创 H2DBEngine——Driver的设计与实现

首先,我们通过下面的代码看一下JDBC是如何使用Driver的。Connection conn = null;String driver = "oracle.jdbc.driver.OracleDriver";Class.forName(driver);String jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL";String use

2013-04-17 19:28:14 963

原创 Hadoop Reducer个数设置

在默认情况下,一个MapReduce Job如果不设置Reducer的个数,那么Reducer的个数为1。具体,可以通过JobConf.setNumReduceTasks(int numOfReduceTasks)方法来设置Reducer的个数。那么,如何确定Reducer的个数呢,Hadoop documentation 推荐了两个计算公式:0.95 * NUMBER_OF_NOD

2013-04-08 19:06:20 5108

原创 Hadoop控制输出文件命名

Hadoop 控制输出文件命名在一般情况下,Hadoop 每一个 Reducer 产生一个输出文件,文件以part-r-00000、part-r-00001 的方式进行命名。如果需要人为的控制输出文件的命名或者每一个 Reducer 需要写出多个输出文件时,可以采用 MultipleOutputs 类来完成。MultipleOutputs 采用输出记录的键值对(output Key

2013-04-07 19:36:35 9371

原创 Hadoop依赖包处理方式

在编写MapReduce程序时,有时需要很多依赖的Jar包,那么如何处理依赖的Jar包呢?方法一:其中最简单的一种方式是,在项目的根目录下创建lib文件夹,将所依赖的所有Jar包都放在该目录下。在将程序进行打包时将lib一并打包。Jar包的具体结构如下图所示:方法二:在执行Hadoop程序,在命令行直接指定(采用-libjars jar1,jar2,.....):had

2013-04-07 19:31:38 5584

原创 自定义实现Hadoop Key-Value

自定义实现Value:如果需要自定义一个一个Value类型,那么需要实现Hadoop预定义接口org.apache.hadoop.io.Writable。Writable包含两个重要的方法:readFields和write,主要用于数据的序列化和反序列化。对于Writable的子类的成员变量必须是Java的基本类型或者是其他实现了Writable接口的类型。如果是Java的基本类型则可以使用D

2013-03-06 19:33:35 4914

原创 Hadoop字符转码的实现

Hadoop默认使用的是UTF-8编码方式。在Hadoop使用过程中,需要将其他的编码方式进行转码以防止乱码的出现。在Hadoop中出现乱码的情景是TextFileInputFormat,即处理Text的情景。在这种情况下,Value一般是Text。为了实现转码我们看一下Text的实现。在Text中包含了源数据的byte数组以及其中数据的长度,这是原始数据,不经过编码的。在Text类中包含了C

2012-12-07 20:17:25 1686

原创 Hive UDTF and LateralView

UDTF在使用过程中的一些限制:1. 在select语句中不能有其他表达式,例如SELECT   pageid,   explode(adid_list )  AS myCol. . . 这种语句是不支持的2. UDTF不能嵌套使用,例如:SELECT   explode(explode(adid_list ))  AS myCol. . . 这种语句也是不支持的3. GROUP BY

2012-11-26 21:44:44 2128

原创 HBase Key-Value的组成

在HBase中,Key-Value是最小的存储单元。在这个存储单元中,每一个Key-Value对应一个列。Value对应于一个列的列值。在HBase中Key-Value都是以Byte数组的形式存储的。下面我们看一下Key-Value的具体存储格式:KeyLengthValueLengthRowKeyLengthRowKeyColu

2012-11-21 20:39:27 10142 1

原创 HDFS Client如何从Datanode读取block

Datanode中包含DataXceiverServer。DataXceiverServer是一个socket server,负责接收client发起的socket连接。DataXceiverServer接收到一个socket连接后,启动一个线程DataXceiver,由DataXceiver具体负责该scoket的处理。DataXceiver从client读取client想要进行操作的操作码。如

2012-10-26 19:22:07 2875

原创 HDFS Datanode与Client之间的数据传输

在HDFS之中,Datanode与Namenode之间是通过RPC进行通信的;在Datanode和Client之间的通信通过两种方式来完成,一种是通过RPC(主要有三个方法recoverBlock、getBlockInfo、getBlockLocalPathInfo),另外一种方式是通过普通的socket。Client与Datanode之间的数据传输就是通过普通的socket来进行传输的。在类

2012-10-25 20:33:17 2982

原创 HDFS Datanode数据存储格式分析

首先在Datanode中,每一个block都对应一个数据存储文件,数据存储文件以_blk开头;同时,每一个block还对应一个元数据文件,元数据文件以.meta结尾(注意:meta file的命名格式如下blokcFileName_generationStamp.meta)。首先将一下我理解的几个概念。在HDFS中有storage的概念,每一个节点对应一个storage。我们可以理解为一个Da

2012-10-25 20:32:01 2408

原创 HBase每一次put内部存储的设计

在HBase中,每一次put操作都会在HBase内部生成一个Put对象。Put类被用来插入一行。在Put类内部,最终的存储单元是(rowkey,columnFamily,columnQualifier,timestamp,value)。在HBase中有一个KeyValue类,KeyValue类代表了(rowkey,columnFamily,columnQualifier,timestamp,val

2012-10-18 20:15:57 2150

原创 HBase基本原理

HBase以表的形式存储数据。与关系型数据库一样,在HBase中,表由行和列组成。与关系型数据库不同的是,HBase还有“列簇”(column family)的概念。一个表有若干“列簇”组成,每一个“列簇”包含若干列(column)。与此同时,表中的每一个cell都是有时间戳的。因此我们可以把其想象成一个三维数据库。除了行和列之外,还有一个时间维度,每一个单元格(cell)的不同版本都被保存。

2012-10-18 20:14:29 6178

原创 HDFS DatanodeProtocol——sendHeartbeat

Datanode周期性的向Namenode发送心跳信息,心跳信息的发送通过sendHeartbeat方法来完成。sendHeartbeat向Namenode表明Datanode依然存活并且完好。sendHeartbeat还向Namenode传输一些Datanode的状态信息,包括Datanode的容量、Datanode DFS消耗的容量、Datanode还可以使用的容量等。最后Namenode向D

2012-10-17 20:01:08 2005

原创 HDFS DatanodeProtocol——register

每当Datanode启动的时候,Datanode需要向Namenode注册自己。对于Datanode来说,注册的目的有两个:1)报告Datanode当前正在提供的存储(storage);2)从Namenode获取registrationID用来标识当前的Datanode。对于Namenode来说:Namenode通过注册来区分Datanode是不是提供一个新的storage(这个新的storage

2012-10-16 20:21:54 1241

原创 Java ClassLoader

Java类加载 JVM包含三种ClassLoader,Bootstrap ClassLoader、Extension ClassLoader和Application ClassLoader。其中,Bootstrap ClassLoader用本地语言实现,一般为C/C++,另外两种用Java语言实现。Bootstrap用于载入Java核心类(所有java.*package下的类),Exten

2012-10-11 21:36:06 604

原创 Java并行编程

class Particle { protected int x; protected int y; protected final Random rng = new Random(); public Particle(int initialX, int initialY) { x = initialX; y = initialY; } public synchronize

2012-10-11 21:35:14 1355

原创 Java內隐类(Java Inner Class)

內隐类是一个定义在Class中的Class,有static和非static两种。inner class是外部类的一个成员变量。non-static的inner class可以访问外部类的所有变量。因为inner class是外部类的一个成员变量,其可以用public、private、protected和package private等modifier来定义。       Static Nest

2012-10-11 21:32:59 1057

空空如也

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

TA关注的人

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