- 浏览: 10001 次
文章列表
What's MapReduce?
- 博客分类:
- 云计算
MapReduce,包括两个单词:Map&Reduce,是对大规模数据处理过程中的两个关键阶段,Map阶段将任务分解成多个任务并行完成,Reduce阶段把各部分的成果汇总回来。整个数据处理过程简化如下图五部分。
在Mapper处理过程中,为了减少最后Reduce的工作量,map函数结束之后还有一个被称为本地Reduce的combine过程,功能跟Reduce类似,对Map的结果(中间键值对)进行了汇总处理;除此之外还有个叫shaffle的过程,本意是洗牌,功能是把map结果按照Key值分为R分,对应R个Reducer,这个过程一般使用哈希算法,即Hash(key) mod R。 ...
GFS(Google File System)的设计目的是使得大规模的普通廉价机能够完成对大量数据的处理操作。
设计预期:
1.由于使用的是普通廉价设备,组件失效成为常态事件。
2.由于处理的文件规模巨大,系统将适当存储大文件。
3.读:1)大规模流式读取。
2)小规模随机读取。
4.写:采用大规模的、顺序的、数据追加方式(append)。
5.定义能够实现并行追加操作的明确语义。
6.高带宽比低延迟重要。实现大批量数据的快速处理。
架构:
master节点:两台master服务器(储存元数据),管理所有文件系统元数据及系统级别上的活动。
chunkserv ...
3.1Synchronization
线程之间的交流主要是通过共享访问域路径或引用参考段的对象。这种交流方式效率很高,但是会引发两种错误:线程干扰和内存一致性错误。防止这类错误出现就要用到线程同步这个工具。
不过,线程同步会导致线程contention,线程contention是在多个线程试图同时访问同一资源的时候出现的情况,它会导致线程运行变慢,甚至是被挂起。线程饥饿starvation和活锁livelock都是contention的形式。我们会在之后的Liveness中详细说明。
3.2Thread Interference 线程干扰是如何在多个线程访问共享数据时出现的。 ...
下面的例子SimpleThreads中用到了2-5节中的几个方法和概念。
SimpleThreads中有两个线程,一个是所有Java程序都有的主线程main,另一个就是在主线程中创建的runnble对象——循环输出消息的线程t,t在主线程中调用了join方法,因此主线程需等待线程t的完成。但如果t线程运行时间过长(本例中用patience加以控制),主线程就会中断。
在本例中有许多输出语句, 用以反映线程运行状态及线程对interrupt异常的反应。
public class SimpleThreads {
// Display a message, prec ...
JAVA线程对象2.4:join方法(参考官方)
- 博客分类:
- java
Join方法
两个线程AB一起吃午饭,吃啊吃啊,A吃完了,B还在吃:”喂,等我吃完一起走啊。“B终于吃完了 ,两只线程一起擦擦嘴巴走掉了。B那句”等我“,就是调用了join方法。没错我就是什么都能联想到吃唉没救了:-(
join方法就是一个线程(主线程)等待另一个线程(子线程)完成。
具体怎么用的吗:
http://www.open-open.com/lib/view/open1371741636171.html#_label0
这里面写的例子很好理解
假设有一个Thread对象t,其线程正在执行, t.join ()将导致当前线程暂停执行,直到线程t终止。
...
线程中断
interrupt方法作用是告知线程停止手头的工作转而去做别的事。通过interrupt终止线程是很常见的,不过你完全可以设定线程如何响应中断。这也是本节的重点。
调用某一线程的interrupt方法可以中断该线程。但想要中断机制正常工作,首先要得到线程支持。
支持中断
线程如何支持中断?这取决于线程当前在执行的内容。如果线程频繁调用抛出中断异常(InterruptedException)的方法,它就会在捕获异常后从run方法返回。例如,假设一个线程run方法中有一个循环,想要支持中断机制,它可以这样改:
for (int i = 0; i < importa ...
sleep暂停线程
thread.sleep方法可以使当前线程暂停执行一段时间。通过该方式,可以有效地将处理器的可用时间分配给同一应用或者其他应用的线程。睡眠的方法也可以用于调整节奏(如上例所示),还可用于等待另一个被认为有时间要求的线程(后面的章节将有实例)。
sleep方法有两个重载版本:一个指定的睡眠时间是毫秒,一个指定的睡眠时间是纳秒。
sleep(long millis) 该线程睡眠时间 millis 毫秒sleep(long millis, int nanos) 该线程睡眠时间 millis 毫秒 + nanos 纳秒
不过,这些睡眠时间不一定是精确的,因为它们还依 ...
创建线程实例有两种方式:
1.Runnable接口:
定义:实现Runnable接口对象,Runnable中定义了一个run()方法,线程需要执行的内容就写在该方法中。
启动:将Runnable对象传递给Thread的构造函数
public Thread(Runnable target)
,Thread对象再调用start()方法启动线程。
示例代码如上文引用。
2.Thread类:
定义:创建Thread类对象。Thread类本身实现了Runnable接口,但run()方法中的内容是空的,需要重写。
启动:Thread类对象调用start()方法。
示例代码如 ...
进程
进程拥有独立的执行环境。一个进程通常有一个完整的基本运行资源私有集合;另外,每个进程都有自己的内存空间。进程通常被等同为程序或应用。但是,用户所看到的一个应用程序实际上可能是一组进程。为了方便进程间的通信,大多数操作系统都支持进程间通信(IPC)资源,如pipe和socket。IPC可用于同一系统中的进程通信,也可用于不同系统中的进程通信。大多数Java虚拟机作为单一进程运行。一个Java应用可以用ProcessBuilder创建额外的进程。
线程
线程有时也被称为轻量级进程。进程和线程都提供一个执行环境,但是创建一个线程比创建一个进程需要的资源要少。线程存在于进程中 ...
报错:android.content.res.Resources$NotFoundException: String resource ID #0x20
原因:editText.setText(m); 其中参数m是int型,改为String后问题解决。
分析:虽然有参数为int型的方法:EditText.setText(int resId),但是这个int是个resourceID,因此EditText并不会显示这个int型的数,而是要根据int型值作为ID去找一个resource,找不到就报错了。
解决办法:int转成String或CharSequence(CharSequence与S ...
String的特别之处1
- 博客分类:
- java
【西口西】在Java中,感觉String是个很特别的存在,下面我来稍微总结一下,欢迎吐槽~
两种实例化方法的区别
String作为一个基本数据类型,实例化的时候可以直接赋值:
String s1=”blahblah”;
当然也可以调用String类的构造方法,通过new赋值:
String s2=new String(“blahblah”);
这两种方式有何区别呢?
首先“blahblah”一经声明,本身就是一个String类的匿名对象,在堆内存中开辟了空间,就算“blahblah”这个字符串没有名字,它也可以直接调用String类中的方法。
使用 ...
20150314
Android
抄了一段manifest.xml中的代码,一直报错,类似错误有多个,都是
No resource identifier found for attribute xxx in package xxx
原因:属性名错误,如minSdkVersion写成了minsdkVersion。自己掌嘴之后,我觉得原作者一定是故意的。
20150316
Android
在res文件夹中新建了一个raw文件夹用来存一个MP3文件,但是在R中却找不到相应的声明。
原因:MP3文件名不符合命名规范,应该只包含小写英文字母、数字和下划线,且开头须为小写英文字母。 ...
T-T..hashtable
- 博客分类:
- java
刚开始听说hashtable,hash,hashcode,这几个东西放一起真是让人不着头脑,还以为hash是个人名,像Huffman什么的 。原来hash就是散列的意思,hashtable也就是散列表,hash是一种散列算法,而hashcode是根据对象的数据算出来的一个int值。 ...
从哈弗曼压缩看数据结构
数据结构指的是数据的表示方式以及数据之间的各种联系。一个好的数据结构能在一定程度上提高数据的存储和计算效率。
数据结构包括三个方面:逻辑结构、存储结构(物理结构)和数据操作。
下面就把哈弗曼压缩掺杂其中对数据结构说下自己的理解。
逻辑结构:
逻辑结构就是数据之间的逻辑关系,常见的有:线性结构(包括链表,队列,栈等),树结构和图结构。
整个通信过程可以比拟成一个实际的例子,如图
一个消息从客户端1发送至服务器再从服务器发送回客户端1的过程,通过这个蓄水池的例子可以这样理解:
蓄水池1号打开放水闸放水,水通过管道1传送至净水处理 ...