Electronic Joint Business

Solution for E-Business

java

Spark,一种快速数据分析替代方案

Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。

Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。

尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。

Spark 集群计算架构
虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

Spark 还引进了名为 弹性分布式数据集 (RDD) 的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。

>>> 阅读全文

 

, , , , ,

Java内部类释疑 之一

内部类(Inner class),本质上就是定义在一个类内部的类,它扮演着其外部类(enclosing class)成员的角色。内部类有两种类型,静态内部类和非静态内部类。正如其名字所示,它们的差异在于,静态内部类与外部类相关联,扮演着静态成员的角色,而非静态内部类与外部类的对象相关联。我们后面会继续探讨这两种内部类。内部类是编译器层面的把戏,它会将内部类转换为普通class文件,并用奇怪的名字命名,对于虚拟机来说,普通类和内部类的class文件并无任何区别。

第三条路线
当你设计类的层级的时候,总是在考虑类之间的关联。这种关联不是总可以被定义为”is a”和”has a”关联。”is a” 关联代表着一种继承关系,子类是父类的一种(is a)。例如下面的员工/经理的例子:

class Employee {
  private String name;
  private Date dateHire;
  …..
  …..
  public float getSalary() {
  }
  …
}

接下来是Manager类。

Class Manager extends Employee {
  private Employee[ ] subOrdinates;
  ….
  public Employee[ ] getSubOrdinates() {
    return subOrdinates;
  }
}

Manager类继承了Employee类,因此它是”is a”关联,即Manager类型的对象同时也是Employee类型。

面向对象设计的另一种关联是”has a”关联。在设计策略上,这种包容关系的设计要比继承关系常见得多。例如Company类的对象可以包含Employee类和Manager类对象和其他对象。

>>> 阅读全文

 

,

JVM基础概念 之一 JVM基本结构剖析

JVM主要包括两个子系统和两个组件。两个子系统分别是Class loader子系统和Execution engine(执行引擎) 子系统;两个组件分别是Runtime data area (运行时数据区域)组件和Native interface(本地接口)组件。

Class loader子系统的作用:根据给定的全限定名类名(如cc.ejb.example.HelloWorld)来装载class文件的内容到 Runtime data area中的method area(方法区域)。

Execution engine子系统的作用:执行classes中的指令。任何JVM specification实现(JDK)的核心都是Execution engine,不同的厂商有自己不同的实现。

Native interface组件:与native libraries交互,是其它编程语言交互的接口。当调用native方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界,所以也很容易出现JVM无法控制的native heap OutOfMemory。

最后是Runtime Data Area组件:这就是我们常说的JVM的内存了。它主要分为五个部分——

>>> 阅读全文