Category Archives: Java|Scala

JVM进程性能监控工具

1. jps — Java process state, 针对JVM进程的PS命令
相关参数:
-v 显示启动时给定的JVM参数
-q jps默认只带着类的短名称,如果指定-q则只显示pid
-l 显示完整类名
-m 显示传递给main主函数的参数,例如:

Continue reading

Posted in Dev, Java|Scala, Linux.

JVM堆内存设置和测试

首先Java虚拟机中gc的原理,可以参见
http://www.360doc.com/content/12/1023/16/9615799_243296263.shtml
http://ifeve.com/useful-jvm-flags-part-5-young-generation-garbage-collection/
以下是一些个人总结和测试。 Continue reading

Posted in Dev, Java|Scala.

Scala Note – 泛型

今天在看spark代码时,发现了spark代码中使用了大量的泛型。非OOD程序员出身表示压力很大。本文就简单整理一下Scala中的泛型。 Continue reading

Posted in Dev, Java|Scala.

Scala Note – Reflection

原文:Fun with Scala’s new Reflection API (2.10)
反射是程序可以检查、甚至修改自身的能力。在面向对象编程、函数式编程和逻辑程序设计范型中都有着悠久的历史。虽然有些语言将反射作为一个指导原则,也有很多语言逐渐发展出了反射的API等能力。Scala也在2.10引入了新的反射API,这个API比老的Manifest更加接近了实际类型系统(编译器实际上使用了TypeTags,参考官方文档typetags-manifests )。Scala在Java反射API的基础上提供了反射的原因之一是JVM擦出了泛型类型。下面让我们看下泛型类型在运行时被擦除:

Continue reading

Posted in Dev, Java|Scala.

Scala Note – Package Object

在2.8版本之前,能放入package内的只有class、trait和object,这些对象位于package 的最顶层是目前最常见的定义。但是2.8之后,定义的所有类型也可以放到class中。如果你有一些辅助方法、变量、常量想在整个包的范围内可控,可以将其放到包的最顶层,即放到package object中。每一个package可以有一个package object,所有在package object中定义的类型都可以看作是package自身的成员。
例如,假定类Fruit和三个Fruit对象在gardening.fruits包中:

假定你将一个常量planted和方法showFruit直接加入到gardening包中,使用下面的方法可以做到:

Continue reading

Posted in Dev, Java|Scala.

Scala Note – scala.App分析

traitApp extends DelayedInit
简单来说,App特质可以快速将一个objects变成一个可执行程序,它内部实现了main的方法。注意:真正的功能实现使用DelayedInit来实现,这意味着object的fields在main方法执行前不会被初始化。这个类一般用于多线程应用等实现。
示例如下

这里Main继承了App特质中的main方法,args返回了当前命令行参数的数组。 Continue reading

Posted in Dev, Java|Scala.

Spark as a Service之JobServer项目和命名RDD

JobServer项目

要创建一个JobServer项目,需要下面的流程。
1. 在build.sbt中加入jobserver和spark core的package

Continue reading

Posted in Java|Scala, Spark.

Spark as a Service之JobServer初测

spark-jobserver提供了一个用于提交和管理Apache Spark作业(job)、jar文件和作业上下文(SparkContext)的RESTful接口。该项目位于git(https://github.com/ooyala/spark-jobserver),当前为0.4版本。

特性

“Spark as a Service”: 简单的面向job和context管理的REST接口
通过长期运行的job context支持亚秒级低延时作业(job)
可以通过结束context来停止运行的作业(job)
分割jar上传步骤以提高job的启动
异步和同步的job API,其中同步API对低延时作业非常有效
支持Standalone Spark和Mesos
Job和jar信息通过一个可插拔的DAO接口来持久化
命名RDD以缓存,并可以通过该名称获取RDD。这样可以提高作业间RDD的共享和重用
Continue reading

Posted in BigData, Java|Scala, Spark.

Spark Streaming

Spark Streaming基于Spark处理流式数据的框架,在MapReduce中,由于其分布式特性——所有数据需要读写磁盘、启动job耗时较大,难以满足时效性要求。而Streaming能够在Spark上生根发芽的原因是因为其内存特性、低延时的执行引擎和高速的执行效率。
Streaming的原理是将Stream数据分成小的时间间隔(比如几秒),即将其离散化(Discretized)并转换成一个一个数据集(RDD),然后分批处理处理这小的RDD。所以Streaming很容易很mlib,Spark SQL等进行结合,做到实时的数据分析处理。此外,Streaming也继承了RDD的容错特性。如果RDD 的某些 partition 丢失了 , 可以通过 lineage 信息重新计算恢复。
Streaming的数据源主要分下面两类:
· 外部文件系统 , 如 HDFS,Streaming可以监控一个目录中新产生的数据,并及时处理。如果出现fail,可以通过重新读取数据来恢复 , 绝对不会有数据丢失。
· 网络系统:如MQ系统(Kafka、ZeroMQ、Flume等)。Streaming会默认会在两个不同节点加载数据到内存 , 一个节点 fail 了 , 系统可以通过另一个节点的数据重算。假设正在运行 InputReceiver 的节点 fail 了 , 可能会丢失一部分数据。
streaming-arch Continue reading

Posted in Dev, Java|Scala, Spark.

使用IDEA开发Spark应用

IDEA 全称IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新的GUI设计等方面的功能都非常棒,而且IDEA是目前Scala支持最好的IDE。IDEA分ultimate和free edition版,ultimate提供了J2EE等很多非常强力的功能,free edition我觉得已经对于我这样的初学者已经够用了。前面写过一篇配置IntelliJ IDEA 13的SBT和Scala开发环境,本文在这个基础上使用IDEA进行Spark应用的配置和开发。 Continue reading

Posted in Dev, Java|Scala, Spark.