摘要: 这篇文章详细剖析了为什么在多核时代进行多线程编程时需要慎用volatile关键字。主要内容有:1. C/C++中的volatile关键字2. Visual Studio对C/C++中volatile关键字的扩展3. Java/.NET中的volatile关键字4. Memory Model(内存模型)5. Volatile使用建议1. C/C++中的volatile关键字1.1 传统用途C/C++作为系统级语言,它们与硬件的联系是很紧密的。volatile的意思是“易变的”,这个关键字最早就是为了针对那些“异常”的内存操作而准备的。它的效果是让编译器不要对这个变量的读写操作做任何优化,每次读的 阅读全文
posted @ 2012-03-09 19:09 vivianC 阅读(1077) 评论(0) 推荐(1) 编辑
摘要: 在并行程序中,锁的使用会主要会引发两类难题:一类是诸如死锁、活锁等引起的多线程Bug;另一类是由锁竞争引起的性能瓶颈。本文将介绍并行编程中因为锁引发的这两类难题及其解决方案。1. 用锁来防止数据竞跑在进行并行编程时,我们常常需要使用锁来保护共享变量,以防止多个线程同时对该变量进行更新时产生数据竞跑(Data Race)。所谓数据竞跑,是指当两个(或多个)线程同时对某个共享变量进行操作,且这些操作中至少有一个是写操作时所造成的程序错误。例1中的两个线程可能同时执行“counter++”从而产生数据竞跑,造成counter最终值为1(而不是正确值2)。例1:01020304050607080910 阅读全文
posted @ 2012-03-09 18:58 vivianC 阅读(316) 评论(0) 推荐(0) 编辑
摘要: 引最近关注Hadoop,因此也顺便关注了一下Hadoop相关的项目。HBASE就是基于Hadoop的一个开源项目,也是对Google的BigTable的一种实现。 BigTable是什么?Google的Paper对其作了充分的说明。字面上看就是一张大表,其实和我们想象的传统数据库的表还是有些差别的。松散数据可以说是介于Map Entry(key & value)和DB Row之间的一种数据。在我使用Memcache的时候,有时候的需求是需要存储的不仅仅是简单的一个key对应一个value,可能我需要类似于数据库表结构中多属性的存储,但是又不会有传统数据库表结构中那么多关联关系的需求,其 阅读全文
posted @ 2012-03-05 20:32 vivianC 阅读(308) 评论(0) 推荐(0) 编辑
摘要: 用过金山词霸的人可能都会发现,当你把金山词霸打开,如果再去双击金山词霸的快捷方式来启动它的时候,系统没有为我们再启动一个新的进程而是激活了前面我们已经打开的金山词霸程序,也就是说我们在一台计算机上同一时刻只能运行一个金山词霸的实例。这样的软件现在也很多,典型的还有winamp,暴风影音等…..这样的好处可以避免用户因为误点而启动了原本不想启动的程序,同时也使得我们的软件不会出现因为访问同一个资源而引起内部冲突问题。那么我们能不能在Java中也实现同样的功能呢? 有的人可能会说了,我用单一模式去实现我的Java类不就好了吗?其实单一模式只是保证了一个类在其他的类中只能构造一个实例,并不能实现只. 阅读全文
posted @ 2012-03-05 18:11 vivianC 阅读(1221) 评论(0) 推荐(0) 编辑
摘要: 在新文章“MapReduce模式、算法和用例”中,Ilya Katsov提供了一个系统化的综述,阐述了能够应用MapReduce框架解决的问题。文章开始描述了一个非常简单的、作为通用的并行计算框架的MapReduce应用,这个框架适用于很多要求大量节点进行的计算和数据密集型计算,包括物理和工程仿真,数值分析,性能测试等等。接下来是一组算法,通常用于日志分析、ETL和数据查询,包括计数及求和,数据整理(基于特定函数),过滤,解析,验证和排序。第二大部分是关于MapReduce模式,Katsov讨论了包括多关系形MapReduce模式,通常用于数据仓库应用程序。这些模式在Hive和Pig实现中广泛 阅读全文
posted @ 2012-03-05 17:38 vivianC 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 一、HDFSHDFS全称是Hadoop Distributed System。HDFS是为以流的方式存取大文件而设计的。适用于几百MB,GB以及TB,并写一次读多次的场合。而对于低延时数据访问、大量小文件、同时写和任意的文件修改,则并不是十分适合。目前HDFS支持的使用接口除了Java的还有,Thrift、C、FUSE、WebDAV、HTTP等。HDFS是以block-sized chunk组织其文件内容的,默认的block大小为64MB,对于不足64MB的文件,其会占用一个block,但实际上不用占用实际硬盘上的64MB,这可以说是HDFS是在文件系统之上架设的一个中间层。之所以将默认的bl 阅读全文
posted @ 2012-03-05 17:35 vivianC 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 一、环境配置1、Eclipse 版本 3.3.X2、Hadoop版本 0.20.2二、配置流程1、将/hadoop-0.20.2/hadoop-0.20.2/contrib/eclipse-plugin/下的hadoop-0.20.2-eclipse-plugin.jar拷贝到eclipse-SDK-3.3.2-win32/eclipse/plugins/下。2、启动eclipse,点击Window->Show View->Other,点击MapReudce Tools->Map/Reduce Locations,如图(我已创建一个):3、点击蓝色的大象,出现下图,配置:Ho 阅读全文
posted @ 2012-03-05 17:28 vivianC 阅读(348) 评论(0) 推荐(0) 编辑
摘要: 一、 Hadoop节点热拔插在Hadoop集群中经常会进行增添节点操作,即实现节点的热拔插。在这些操作中不希望对集群进行重启。2.在集群中添加节点:a. 把新节点IP或者主机名字加入到主节点的slaves文件。b. 登录到新节点,执行:cd $HADOOP_HOME && bin/hadoop-daemon.sh start datanode && bin/hadoop-daemon.sh start tasktracker3. 从集群中移走节点,且对移走节点的数据进行备份:a. 在主节点的hdfs-site.xml配置文件中添加<property> 阅读全文
posted @ 2012-03-05 17:26 vivianC 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 本文不是面向 HDFS 或 MapReduce 的配置使用,而是面向 Hadoop 本身的开发。进行开发的前提是配置好开发环境,即获取源代码并首先能够顺畅编译,本文即记录了在 Linux(Ubuntu 10.10)上配置 eclipse 编译 Hadoop 源代码的过程。开发 Hadoop 应该基于哪个版本的源代码呢?一种选择是通过 SVN 同步跟踪最新源代码,另一种选择是选择某个较新的稳定的 release 版本。如果是改进 Hadoop 本身,通常选择前者(比如对 SVN 源有写权限的 Hadoop 核心开发人员);如果是基于 Hadoop 开发其他产品,则通常选择后者,且只需在 Hado 阅读全文
posted @ 2012-03-05 17:06 vivianC 阅读(1232) 评论(1) 推荐(0) 编辑
摘要: HBase简介HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zook 阅读全文
posted @ 2012-03-05 17:00 vivianC 阅读(625) 评论(0) 推荐(0) 编辑