自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

anzhsoft的技术专栏

专注分布式资源管理和大数据处理平台: Since Dec. 2013

  • 博客(104)
  • 资源 (6)
  • 收藏
  • 关注

原创 Shell在大数据时代的魅力:从一道百度大数据面试题想到的点滴

对于在Linux下开发的同学来说,Shell可以说是一种基本功。对于运维的同学来说,Shell可以说是一种必备的技能,而且应该要非常熟练的书写Shell。对于Release Team,软件配置管理的同学来说,Shell也起到了非常重要的作用。尤其是分布式系统发展的如火如荼,很多开源项目都开展的如火如荼(好像不是分布式的系统都不好意思拿出来说事)。分布式系统的配置,管理,Shell也起到了非常重要的作用,虽然只是简单的文件拷贝,但是谁让Shell天生是做这些的呢?当然了,以上不是本文的主题。本文的主题是

2014-07-17 00:59:38 19444 2

原创 CSDN专访:大数据时代下的商业存储

我的CSDN专访。摘要:EMC公司作为全球信息存储及管理产品方面的领先公司,不久前,EMC宣布收购DSSD加强和巩固了其在行业内的领导地位,日前我们有幸采访到EMC中国的张安站,他就大数据、商业存储、Spark等给大家分享了自己的看法。

2014-07-05 10:52:42 19712

原创 Spark技术内幕:一个图搞定Spark到底有多少行代码

Spark1.0.0发布一个多月了,那么它有多少行代码(Line of Code, LOC)?

2014-06-30 17:04:54 24155 5

原创 博客流量分析

博客访问的详细统计,可以发现挺多有意思的事情,比如上午9点的访问量最高, 尤其是对推荐到CSDN首页的文章;北京,广东的码农较多,访问量近半;推荐到CSDN首页的文章访问量要比推荐到博客首页要好得多。

2014-06-28 14:18:34 21982 13

原创 Spark技术内幕:Master基于ZooKeeper的High Availability(HA)源码实现

本文详细讲解了Spark在Standalone模式下的Master的HA的源码分析。为了解决Standalone模式下的Master的SPOF,Spark采用了ZooKeeper提供的选举功能。Spark并没有采用ZooKeeper原生的Java API,而是采用了Curator,一个对ZooKeeper进行了封装的框架。采用了Curator后,Spark不用管理与ZooKeeper的连接,这些对于Spark来说都是透明的。Spark仅仅使用了100行代码,就实现了Master的HA。当然了,Spark是

2014-06-24 20:25:39 32970 10

原创 Spark技术内幕:Client,Master和Worker 通信源码解析

本文分析了Spark1.0.0的Client,Master和Worker之间是如何通信的。通过对通信的分析,可以清楚的理解各个角色的作用和责任,和它在集群中扮演的不同角色。当然了,为了便于源码分析,本文开始分析了akka,一个非常优秀的actor的实现:高性能,易于编程,可扩展和弹性无中心。

2014-06-17 21:43:06 35062 15

原创 Spark:大数据的电花火石!

Apache Spark™is a fast and general engine for large-scale data processing: 一种快速通用可扩展的数据分析引擎。如果想要搞清楚Spark是什么,那么我们需要知道它解决了什么问题,还有是怎么解决这些问题的。本文将带领你进入Spark的世界,首先阐述了为什么Spark能够在众多的大数据分析平台中脱颖而出:通用,易用,高性能和与Hadoop的有效整合。Spark All in One的解决方案使用一个通用栈解决了流式,交互式,实时查询,迭代

2014-06-13 23:19:10 29749 23

原创 Redefine:Change in the Changing World

EMC World 2014的主题就是REDEFINE。的确,现在科技的发展在重新定义了技术,影响了生活,改变了你我。 我现在也需要Redefine。对于一个有数万员工,甚至数十万员工的企业来说,Redefine无疑更加具有挑战,对于未来的把握,稍有不慎可能导致企业的命运无可挽回。就如许多局外人都在据理分析Nokia, Motorola应该要如何改变才能适应趋势,但是就如泰坦尼克,危险就发生在眼前,但是巨擘已经没有时间去调转。员工的轨迹也一样,如果企业转型不成功,企业失败了,对于个人的影响也是巨大。毕

2014-05-31 13:01:36 5761 18

原创 HDFS追本溯源:租约,读写过程的容错处理及NN的主要数据结构

Lease 的机制:hdfs支持write-once-read-many,也就是说不支持并行写,那么对读写的互斥同步就是靠Lease实现的。Lease说白了就是一个有时间约束的锁。客户端写文件时需要先申请一个Lease,对应到namenode中的LeaseManager,客户端的client name就作为一个lease的holder,即租约持有者。LeaseManager起什么作用呢?读写过程的容错是怎么做的?数据块是如何复制的?数据块的恢复机制?本文都有涉及。

2014-05-01 09:43:16 8741 2

原创 HDFS追本溯源:HDFS操作的逻辑流程与源码解析

本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合。Client和NameNode,主要是介绍了Client对NN的各种文件系统目录树元数据的操作。还通过源码分析了HDFS在读取文件时,Client,NN和DN发生的事件和这些事件的顺序。 即使不考虑出现错误的情况,写文件也是HDFS最复杂的流程。本文通过创建一个新文件并向文件写入数据,结束后关闭这个文件为例,分析文件写入时各个节点之间的配合。还讨论了DN的启动及其与NN之间的交互。包括DN从启动到

2014-04-13 19:37:43 16022 2

原创 HDFS追本溯源:体系架构详解

Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算。HDFS在Hadoop中扮演了非常基础的作用,以文件系统的形式为上层应用提供海量数据的存储服务。 HDFS作为一个分布式文件系统,具有高容错的特点。它可以部署在廉价的通用硬件上,提供高吞吐率(Throughput)的数据访问,特别适合那些需要处理海量数据集的应用程序。它没有遵循POSIX的要求,不支持ls,cp这样标准的UNIX命令,也不支持fopen和fread这

2014-04-11 21:13:47 18354 3

原创 HDFS HA: 高可靠性分布式存储系统解决方案的历史演进

HDFS,为Hadoop这个分布式计算框架提供高性能、高可靠、高可扩展的存储服务。HDFS的系统架构是典型的主/从架构,早期的架构包括一个主节点NameNode和多个从节点DataNode。 HDFS HA的解决方案可谓百花齐放,Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quorum Journal Manager, BackupNode等等。目前普遍采用的是shared NAS+NFS,因为简单易用,但是需要提供一个HA的共享存储设备。而

2014-04-10 11:50:32 22046 6

原创 有些事情, 做起来要比想象中的容易

文章https://groups.google.com/forum/#!topic/pongba/mkWbbv6UmFo 的作者分享了自己的经验。一个问题,如果不实际动手做,仅仅是从外面看,往往会被一些表面上的困难阻塞住,产生不可逾越的感觉,及至真的动手做了,才会发现未必然 。的确,小马过河的故事现在仍然发人深省。随着年龄越来越大,我们逐渐摆脱了年少轻狂,做事也越来越谨慎。但是,是不是思维中的那面墙已经阻碍了你的进一步发展呢?亦或是,你缺少了年少时的天马行空;亦或是,安逸的生活已经消磨了你的斗志?别

2014-04-08 18:36:21 14216

原创 关于大数据时代传统商业存储的思考: 中心存储 VS 分布式存储

传统的商业存储,诞生于大型机,小型机时代。那时候将所有的硬盘集中的放到几个机架上,大型机通过光纤,ISCSI等高速连接到存储系统上。存储系统需要保证高并发,高IO读写速度,数据冗余备份等保护。 现在x86服务器,尤其是Google这种互联网公司都是通过廉价的硬件组装成高大上的集群,分布式文件系统(GFS,HDFS),各种基于内存的系统(memcached, GemFire, RAMCloud),它们都是通过相对廉价的硬件来构建了高并发,高读写速度,高可靠性(虽然每个节点有很高的故障率,但是集群可以

2014-03-28 16:39:21 16689

原创 关于你们所谓的网络聚合,能不能留着原文衔接?

前天一篇文章《RAMCloud:内存云存储的内存分配机制》被推荐到首页:今天Google一下,发现这篇文章通过关键字 RAMCloud + 内存分配机制 发现博文在第一个出现,赞一个Google。接着用百度搜索了一下同样的关键字,发现原文衔接在第一页完全找不到,找到的都是一堆所谓的网络博客聚合网站:第一个tui'cool还好,最起码标注了原文衔接,但是一个所谓的 核心网络的家伙,完全拷贝了我整站的

2014-03-28 10:47:10 15554 2

原创 RAMCloud:内存云存储的内存分配机制

闪存速度的确就是现在存储系统的极限吗?现在有需要基于内存的数据库,比如Redis,TimesTen。也不得不提缓存系统的极佳实践memcached。spark也把操作的中间数据全都放入到内存中,避免了Hadoop实时性和可用性差的问题,有可能对Hadoop的生态圈产生深远影响。spark已经于2014年2月27日正式成为Apache基金会的顶级项目了。 RAMCloud,是一个完全使用DRAM的存储系统,它的所有数据都保存到内存中。当然了为了故障恢复RAMCloud会将日志和数据的备份持久化到

2014-03-23 21:02:38 30040 20

原创 RabbitMQ消息队列(九):Publisher的消息确认机制

有没有一种机制能保证Publisher能够感知它的Message有没有被处理的?答案肯定的。唯一能够保证消息不会丢失的方式是利用事务机制 -- 令 channel 处于 transactional 模式、向其 publish 消息、执行 commit 动作。在这种方式下,事务机制会带来大量的多余开销,并会导致吞吐量下降 250% 。为了补救事务带来的问题,引入了 confirmation 机制(即 Publisher Confirm)。 为了使能 confirm 机制,client 首先要发送

2014-03-20 13:28:38 57536 9

翻译 Douglas Adams - 3 Rules That Describe Our Reactions To Technologies 科技影响生活的三个规律

Chris Dixon披露了Douglas的非常有意思的一句关于科技以令人吃惊的方式在改变着世界,并且推动了世界的不断前行的名言 在你出生时你会感觉世界的一切事物都是普通的,同时你也感觉世界的运转方式也非常自然。 在你15岁到35岁的一切新生事物对你来说都是新的,革命性的。你也很可能在它们中获得了一份工作。 在你35岁之后,你会感觉新生事物是那么的反自然。现在你头脑中可能会浮现出:从马到汽车,索引卡到在线搜索,PC到移动设备,web到app,门户网站到实时通信,牛顿到爱因斯坦,

2014-03-19 22:15:18 5999

原创 并发编程(四):也谈谈数据库的锁机制

各种大型数据库所采用的锁的基本理论是一致的,但在具体实现上各有差别。 SQL Server更强调由系统来管理锁。在用户有SQL请求时,系统分析请求,自动在满足锁定条件和系统性能之间为数据库加上适当的锁,同时系统在运行期间常常自动进行优化处理,实行动态加锁。 SQLite采用粗放型的锁。当一个连接要写数据库,所有其它的连接被锁住,直到写连接结束了它的事务。SQLite有一个加锁表,来帮助不同的写数据库都能够在最后一刻再加锁,以保证最大的并发性。 MySQL数据库由于其自身架构的特点

2014-03-19 14:40:08 14286

原创 欢迎进入我的个人博客 anzhan.me

CSDN的博客依旧会更新,但是还是专注于技术。个人的博客 http://anzhan.me 不单单会同步csdn的技术文章,还会有个人的更多私人的分享,包括旅行日记。欢迎各位朋友经常去看看,大家有私人blog的私信交换衔接吧。

2014-03-16 21:00:25 5297 2

原创 今日成为CSDN认证专家

认证时写的申请材料: 程序猿一枚毕业于南开工作于上海。喜欢读书,喜欢跑步,激情似火,心静如水。 喜欢编程,喜欢寻根问底各种技术,喜欢在各种新技术中汲取营养。 喜欢分享,因此以一些高质量的博文来回报各位可爱可敬的程序猿们。 从2013年12月开博3个月,共发表博文43篇,访问量接近20万,多篇文章被推荐到首页和边栏的推荐文章;创建了专栏《Linux调试技巧》,收录博文7篇,有4万多的访问量;专栏《RabbitMQ从入门到精通》,收录博文8篇,有近2万的访

2014-03-14 17:49:45 6579 3

原创 存储那些事儿(五):BTRFS文件系统之Btree结构详解

Btree数据结构可以说是BTRFS文件系统的基础。它提供了一个通用的方式去存储不同的数据类型。它仅仅存储3个数据类型:key, item和block header。   btrfs_header的定义如下:struct btrfs_header { u8 csum[32]; u8 fsid[16]; __le64 blocknr; __le64 flags;

2014-03-13 20:06:02 11014 6

原创 Linux Debugging(七): 使用反汇编理解动态库函数调用方式GOT/PLT

本文主要讲解动态库函数的地址是如何在运行时被定位的。首先介绍一下PIC和Relocatable的动态库的区别。然后讲解一下GOT和PLT的理论知识。GOT是Global Offset Table,是保存库函数地址的区域。程序运行时,库函数的地址会设置到GOT中。由于动态库的函数是在使用时才被加载,因此刚开始GOT表是空的。地址的设置就涉及到了PLT,Procedure Linkage Table,它包含了一些代码以调用库函数,它可以被理解成一系列的小函数,这些小函数的数量其实就是库函数的被使用到的函数的数量

2014-03-06 18:46:50 16560 2

原创 Linux Debugging(六): 动态库注入、ltrace、strace、Valgrind

实际上,Linux的调试方法非常多,针对不同的问题,不同的场景,不同的应用,都有不同的方法。很难去概括。本篇文章主要涉及本专栏还没有涵盖,但是的确有很重要的方法。本文主要包括动态库注入调试;使用ltrace命令处理动态库的调试;使用strace调试系统调用的问题;Valgrind的简要介绍。

2014-03-06 11:20:23 13544 2

原创 存储那些事儿(四):传统商业存储融入云计算之路

一年前开始学习Hadoop。Hadoop, 大数据的事实标准,被Facebook, Yahoo,eBay,taobao,baidu广泛应用。Hadoop本身很复杂,包含了很多子项目,不同的应用场景催生了不同的子项目。        最近要做OpenStack的项目,开始学习OpenStack。也反思了一下我现在所从事的行业:企业存储,路在何方?        IT的技术发展可以说是日新月异。在人们

2014-03-05 15:59:33 6723 2

原创 存储那些事儿(三):OpenStack的块存储Cinder与商业存储的融合

OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算‎软件,以Apache许可证授权,并且是一个自由软件和开放源代码项目。OpenStack是IaaS(基础设施即服务)‎软件,让任何人都可以自行建立和提供云端运算服务。此外,OpenStack也用作建立防火墙内的“私有云”(Private Cloud),提供机构或企业内各部门共享资源。 Cinder提供了OpenStack的Block Service(块服务)。类似于 Amazon 的 EBS 块存储服务,OpenS

2014-03-04 18:03:25 11402 5

原创 存储那些事儿(二): 下一代Linux文件系统BTRFS简介

BTRFS,通常念成 Butter FS,Better FS 或B-tree FS。下一代的Linux文件系统。 它基于写时拷贝(copy-on-write),支持高效的snapshot和clone。它使用b-tree作为存储的数据结构。在BTRFS项目主页上对自己是这么描述的:"一个新的针对Linux的写时复制文件系统,致力于实施高级的功能,同时关注容错、修复和管理方便性。" 它有哪些高级功能呢?下面的feature来自BTRFS的项目主页:http://btrfs.wiki.kerne

2014-03-03 14:26:32 10528 1

原创 RabbitMQ消息队列的小伙伴: ProtoBuf(Google Protocol Buffer)

什么是ProtoBuf? 一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。 它可以作为RabbitMQ的Message的数据格式进行传输,由于是结构化的数据,这样就极大的方便了Consumer的数据高效处理。当然了你可能说使用XML不也可以吗?与XML相比,ProtoBuf

2014-02-24 15:29:36 31919 5

原创 RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成。那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会通过其它节点求来斐波纳契完成示例。

2014-02-23 21:37:14 40970 12

原创 RabbitMQ消息队列(六):使用主题进行消息分发

在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统。Consumer可以监听不同severity的log。但是,这也是它之所以叫做简单日志系统的原因,因为是仅仅能够通过severity设定。不支持更多的标准。 比如syslog unix的日志工具,它可以通过severity (info/warn/crit...) 和模块(auth/cron/kern...)。这可能更是我们想要的:我们可以仅仅需要cron模块的log。 为

2014-02-23 16:29:19 39544 3

原创 RabbitMQ消息队列(五):Routing 消息路由

上篇文章中,我们构建了一个简单的日志系统。接下来,我们将丰富它:能够使用不同的severity来监听不同等级的log。比如我们希望只有error的log才保存到磁盘上。1. Bindings绑定    上篇文章中我们是这么做的绑定:channel.queue_bind(exchange=exchange_name, queue=queue_na

2014-02-21 20:04:22 52861 8

原创 RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

上篇文章中,我们把每个Message都是deliver到某个Consumer。在这篇文章中,我们将会将同一个Message deliver到多个Consumer中。这个模式也被成为 "publish / subscribe"。 这篇文章中,我们将创建一个日志系统,它包含两个部分:第一个部分是发出log(Producer),第二个部分接收到并打印(Consumer)。 我们将构建两个Consumer,第一个将log写到物理磁盘上;第二个将log输出的屏幕。

2014-02-21 19:38:35 62653 8

原创 RabbitMQ消息队列(三):任务分发机制

在上篇文章中,我们解决了从发送端(Producer)向接收端(Consumer)发送“Hello World”的问题。在实际的应用场景中,这是远远不够的。从本篇文章开始,我们将结合更加实际的应用场景来讲解更多的高级用法。 当有Consumer需要大量的运算时,RabbitMQ Server需要一定的分发机制来balance每个Consumer的load。试想一下,对于web application来说,在一个很多的HTTP request里是没有时间来处理复杂的运算的,只能通过后台的一些工作线程来完

2014-02-21 17:59:25 106831 27

原创 RabbitMQ消息队列(二):”Hello, World“

本文将使用Python(pika 0.9.8)实现从Producer到Consumer传递数据”Hello, World“。 首先复习一下上篇所学:RabbitMQ实现了AMQP定义的消息队列。它实现的功能”非常简单“:从Producer接收数据然后传递到Consumer。它能保证多并发,数据安全传递,可扩展。 和任何的Hello world一样,它们都不复杂。我们将会设计两个程序,一个发送Hello world,另一个接收这个数据并且打印到屏幕。 整体的设计如下图:

2014-02-20 21:15:52 134208 15

原创 RabbitMQ消息队列(一): Detailed Introduction 详细介绍

对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展(Scalability);如果使用socket那么不同的模块的确可以部署到不同的机器上,但是还是有很多问题需要解决。比如: 1)信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据如何方式丢失? 2)如何降低发送者和接收者的耦

2014-02-20 20:13:41 232379 46

原创 并发编程(三): 使用C++11实现无锁stack(lock-free stack)

本文使用C++11实现无锁的stack。前几篇文章,我们讨论了如何使用mutex保护数据及使用使用condition variable在多线程中进行同步。然而,使用mutex将会导致一下问题 等待互斥锁会消耗宝贵的时间 — 有时候是很多时间。这种延迟会损害系统的scalability。尤其是在现在可用的core越多越多的情况下。 低优先级的线程可以获得互斥锁,因此阻碍需要同一互斥锁的高优先级线程。这个问题称为优先级倒置(priority inversion )。 可能因为分配的时间

2014-02-13 20:47:00 20965 4

原创 并发编程(二):分析Boost对 互斥量和条件变量的封装及实现生产者消费者问题

Boost的互斥量,条件变量做了很好的封装,因此比“原生的”POSIX mutex,condition variables好用。然后我们会通过分析boost相关源码看一下boost linux是如何对pthread_mutex_t和pthread_cond_t进行的封装。最后给出生产者消费者问题的boost实现。

2014-02-12 12:42:01 16532 10

原创 并发编程(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题

boost的mutex,condition_variable非常好用。但是在Linux上,boost实际上做的是对pthread_mutex_t和pthread_cond_t的一系列的封装。因此通过对原生态的POSIX 的mutex,cond的生成者,消费者的实现,我们可以再次体会boost带给我们的便利。

2014-02-10 19:57:05 15101 4

原创 Linux Debugging(五): coredump 分析入门

作为工作几年的老程序猿,肯定会遇到coredump,log severity设置的比较高,导致可用的log无法分析问题所在。 更悲剧的是,这个问题不好复现!所以现在你手头唯一的线索就是这个程序的尸体:coredump。你不得不通过它,来寻找问题根源。本文通过一个常见的coredump,逐步讲解如何发现导致coredump的原因

2014-01-27 17:33:00 30918

原创 Linux Debugging(四): 使用GDB来理解C++ 对象的内存布局(多重继承,虚继承)

关于C++虚函数,很多博文从各个角度来探究虚函数是如何实现的,或者说编译器是如何实现虚函数的。本文通过GDB来从另外一个角度来理解C++ object的内存布局,一来熟悉语言背后编译器为了实现语言特性为我们做了什么;二来熟悉使用GDB来调试程序。 同时,本文也将对如何更好的理解C++语言提供了一个方法:使用GDB,可以很直观的理解编译器的实现,从根本上掌握C++!我们不单单只会开车,还应该知道车的内部的构造。

2014-01-27 13:53:27 25629 1

Linux Debugging: coredump 分析的材料

本文是http://blog.csdn.net/anzhsoft/article/details/18762915用到的例子。下载后先unzip,在tar xf

2014-01-27

Linux Debugging: coredump 分析入门的材料

本文是http://blog.csdn.net/anzhsoft/article/details/18762915用到的例子。

2014-01-27

局域网活动主机的C++实现

局域网活动主机的C++实现;及其开发的说明文档,在VC6.0上可以正常编译通过!!!!!!!!这是研究生计算机网络的一个得分90的程序。源码+可执行程序+说明文档

2009-03-08

常见的端口扫描的C++实现

常见的端口扫描的C++实现;及其开发的说明文档,在VC6.0上可以正常编译通过!!!!!!!!这是研究生计算机网络的一个得分90的程序。源码+可执行程序+说明文档

2009-03-08

基于SNMP的网络拓扑发现程序

基于SNMP的网络拓扑发现程序 使用vc.net编写

2008-11-25

计算机网络的帧的封装与解析

计算机网络的帧的封装与解析 可以放送和解析以太网的帧。

2008-10-25

空空如也

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

TA关注的人

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