- 浏览: 20784 次
- 性别:
- 来自: 杭州
最新评论
-
spark_li:
wantodare 写道对于这句引用3. 当客户端收到全部写入 ...
Hadoop学习笔记——Hadoop 读写文件过程剖析 -
wantodare:
对于这句引用3. 当客户端收到全部写入成功的回执(ack pa ...
Hadoop学习笔记——Hadoop 读写文件过程剖析
文章列表
1. CyclicBarrier : 初始化count是固定的, 通常用于多个线程同时等待彼此,当所有线程到达某一点时,同时继续进行。例子:
Int N = 3;
final CyclicBarrier cb = new CyclicBarrier(N);
for (int i = 0; i < N; i++) {
new Thread(new Runnable() {
public void run() {
Do xxx;
cb.await( ...
一个例子看懂协变和LSP
- 博客分类:
- Java
package org.spark;
public class app {
public static void main(String[] args) {
Convertor<Object> objConvertor = new Convertor<Object>();
String result = convert(2, objConvertor);// 协变, 看起来好像是把一个基类的对象转换为子类,其实不是。
System.out.print(result);
...
读取文件:
下图是HDFS读取文件的流程:
这里是详细解释:
1.当客户端开始读取一个文件时,首先客户端从NameNode取得这个文件的前几个block的DataNode信息。(步骤1,2)
2.开始调用read(),read()方法里,首先去读取第一次从NameNode取得的几个Block,当读取完成后,再去NameNode拿下一批Block的DataNode信息。(步骤3,
概念:HDFS会把一个很大的文件分块(与传统的文件系统类似),存放在不同的DataNode上。不过这个块是个逻辑概念,比较大,默认是64M。Hadoop以“管理者-工作者”模式运行。NameNode就是管理者,它保存了文件系统中所有文件以及目录信息。也记录了每个文件的分块信息。但这些分块具体在哪些机器上存储则由DataNode自己上报。容错:NameNode的容错:所有的文件访问都要通过NameNode来进行,所以NameNode至关重要。一旦NameNode发生毁坏,则整个系统都不可用。HDFS提供了两种容错机制来保证NameNode的可用性:1 第一种方法是把文件元数据写入NFS,备份在另一 ...
Hadoop不是万能的,有些场景适用,有些不适用。
Hadoop设计的目的主要包括下面几个方面,也就是所谓的适用场景:
1:超大文件
可以是几百M,几百T这个级别的文件。
2:流式数据访问
Hadoop适用于一次写入,多次读取的场景,也就是数据复制进去之后,长时间在这些数据上进行分析。
3:商业硬件
也就是说大街上到处都能买到的那种硬件,这样的硬件故障率较高,所以要有很好的容错机制。
接下来说说不适用的场景:
1: 低延迟数据访问
Hadoop设计的目的是大吞吐量,所以并没有针对低延迟数据访问做一些优化,如果要求低延迟, ...
在Hadoop中实现Map/Reduce模型,我们需要继承如下两个类:
public class MaxTemperatureMapper extends MapReduceBase
implements Mapper<LongWritable, Text , Text , IntWritable>
public class MaxTemperatureReducer extends MapReduceBase
implements Reducer、<Text , IntWritable , Text , IntWritable>
...
ASP.Net MVC 中配置Route的时候可以设置一个默认的Route。比如我要在输入http://localhost的时候默认进入http://localhost/home/index。可以在Global.asax中这么配置:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
...
在Ibatis中我们要执行一个事务,代码是这样的:
sqlMapClient.startTransaction ();
sqlMapClient.add (xxxxx);
sqlMapClient.update (xxxxx);
sqlMapClient.commitTransaction ();
看到这段代码你会不会有一个问题,sqlMapClient里面到底是怎么做的?
我能猜到有两种做法:
1. 调用sqlMapClient.startTransaction时会通知数据库事务开始了,然后依次执行add和update,最后告诉数据库 ...
Razor的模板文件.cshtml会在运行时被编译为一个C#的class,基类为WebViewPage。
也就是说在cshtml中选中一个变量,比如说@Html 然后按F12. 会跳到WebViewPage的类定义中。
我在下载了MVC的源码,并把web工程中的引用指向源码的工程后,再在cshtml中F12过去的话,就跑到WebPage类中去了。困扰了好久,发现是个bug。正常引用官方的MVC dll的话是正常的。
解决问题的办法是在你的cshtml中显式指定BaseView,像这样:
@inherits System.Web.Mvc.WebViewPage<YourM ...
大部分企业应用开发和互联网项目的开发都在应用IOC框架。
但是大部分时候,我们也就是这么用用,很少人有去考虑用的到底对不对,合适不合适。
大家都知道依赖倒置原则,这里给出定义:
高层模块不能依赖于底层模块,两者都应该依赖于抽象。
是不是有点颠覆三观!! 难道业务层不应该依赖数据访问层吗。难道是数据访问层依赖业务层吗?
下面是一个最常见的设计,业务层依赖 数据访问层,远程调用,文件访问,log模块等等:
这种设计被称之为 Naive Design。 一旦业务层依赖的任何一个模块发生变化,都会影响到业务层。变化通常是引入错误的原因。
那么我们以依赖倒置的原则来重新 ...
用习惯Visual Studio的人一开始学习Maven可能很难以理解。
VS里面有个solution的概念,一个sln可以包含多个project,这些project之间的依赖都可以通过可视化的方式添加。如下图:
这里有三个项目,main依赖dao和domain,dao依赖domain。
在Maven中没有solution的概念,一般是通过一个父工程来充当管理子工程的角色,达到和solution同样的目的。
这种关系在Maven中如何表达呢,看下图:
图中有4个工程,parent工程就充当了solution的作用,一般在它里边并不会写代码,只是用来组织子工程。
来看一下它 ...
依赖注入是指在创建一个对象时,自动地创建它依赖的对象,并注入。大家都知道有三种途径来实现依赖注入,我这里总结一下这三种方式的优缺点:
1.构造方法注入:
优点:
在构造方法中体现出对其他类的依赖,一眼就能看出这个类需要其他那些类才能工作。
脱离了IOC框架,这个类仍然可以工作,POJO的概念。
一旦对象初始化成功了,这个对象的状态肯定是正确的。
缺点:
构造函数会有很多参数(Bad smell)。
有些类是需要默认构造函数的,比如MVC框架的Controller类,一旦使用构造函数注入,就无法使用默认构造函数。
这个类里面的有些方法并不需要用到这些依赖(Bad ...