Java8并发教程:Threads和Executors

原文地址  原文作者:Benjamin Winterberg 译者:张坤

欢迎阅读我的Java8并发教程的第一部分。这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程。这是一系列教程中的第一部分。在接下来的15分钟,你将会学会如何通过线程,任务(tasks)和 exector services来并行执行代码。

  • 第一部分:Threads和Executors
  • 第二部分:同步和锁

并发在Java5中首次被引入并在后续的版本中不断得到增强。在这篇文章中介绍的大部分概念同样适用于以前的Java版本。不过我的代码示例聚焦于Java8,大量使用lambda表达式和其他新特性。如果你对lambda表达式不属性,我推荐你首先阅读我的Java 8 教程

阅读全文

Java8中CAS的增强

几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因查找,有了如下发现:

在jdk1.7中,AtomicInteger的getAndIncrement是这样的:

阅读全文

并发编程模型

原文链接 作者: Jakob Jenkov 译者: 林威建 [weakielin@gmail.com]

并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型。
阅读全文

Java ThreadLocal的使用

原文链接  作者: Jakob Jenkov 译者: 林威建[weakielin@gmail.com]

Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量。
阅读全文

Java代码到字节码——第一部分

原文地址 作者:James Bloom 译者:张坤

理解在Java虚拟机中Java代码如何别被编译成字节码并执行是非常重要的,因为这可以帮助你理解你的程序在运行时发生了什么。这种理解不仅能确保你对语言特性有逻辑上的认识而且做具体的讨论时可以理解在语言特性上的妥协和副作用。 阅读全文

为什么我的JVM能实际使用的内存比-Xmx指定的少?

原文链接

作者:Nikita Salnikov-Tarnovski   译者:Amanda    校对:

你好,你能过来看看帮我解决一个奇怪的问题么。”就是这个技术支持案例使我想起写下这篇帖子。眼前的这个问题就是关于不同工具对于可用内存大小检测的差异。

其实就是一个工程师在调查一个应用程序的过高的内存使用情况时发现,尽管该程序已经被指定分配2G堆内存,但是JVM检测工具似乎并不能确定进程实际能用多少内存。例如 jconsole显示可用堆内存为1,963M,然而 jvisualvm 却显示能用2,048M。所以到底哪个工具才是对的,为什么检测结果会出现差异呢?

这确实是个挺奇怪的问题,特别是当最常出现的几种解释理由都被排除后,看来JVM并没有耍一些明显的小花招:

  • -Xmx-Xms是相等的,因此检测结果并不会因为堆内存增加而在运行时有所变化。
  • 通过关闭自适应调整策略(-XX:-UseAdaptiveSizePolicy),JVM已经事先被禁止动态调整内存池的大小。

阅读全文

颠覆大数据分析之结论

颠覆大数据分析之结论

译者:吴京润    购书

随着Hadoop2.0到来——被称作YARN的Hadoop新版本——超越Map-Reduce的思想已经稳固下来。就像本章要解释的,Hadoop YARN将资源调度从MR范式分离出来。需要注意的是在Hadoop1.0,Hadoop第一代,调度功能是与Map-Reduce范式绑定在一起的——这意味着在HDFS上惟一的处理方式就是Map-Reduce或它的业务流程。这一点已在YARN得到解决,它使得HDFS数据可以使用非Map-Reduce范式处理。其含义是,从事实上确认了Map-Reduce不是惟一的大数据分析范式,这也是本书的中心思想。 Hadoop YARN允许企业将数据存储在HDFS,并使用专业框架以多种方式处理数据。比如,Spark可以借助HDFS上的数据迭代运行机器学习算法。(Spark已重构为工作在YARN之上,感谢Yahoo的创新精神),还有GraphLab/Giraph可以借助这些数据用来运行基于图的算法。显而易见的事实是,主要的Hadoop发行版已宣布支持Spark(Cloudera的),Storm(Hortonworks的),还有Giraph(Hortonworkds的)。所有的一切,本书一直主张的超越Hadoop Map-Reduce的思想已通过Hadoop YARN得到了验证。本章概述了Hadoop YARN以及不同的框架(Spark/GraphLab/Storm)如何工作在它上面工作。

 
阅读全文

颠覆大数据分析之实时分析的应用

颠覆大数据分析之实时分析的应用

译者:吴京润    购书

在这一节,我们将看到构建两个应用的步骤:一个工业日志分类系统和一个互联网流量过滤应用。

工业日志分类

随新旧生产工程系统的自动化以及电子工程的发展,大量的机器之间(M2M)的数据正在被生成出来。机器之间的数据可以来自多个不同的源头,包括无线传感器,电子消费设备,安全应用,还有智能家居设备。举个例子,2004年的地震和随后的海啸造就了由海洋传感器构成的海啸预警系统。自2011年的日本东北地区的地震以来,日本已经沿火车轨道安装了许多传感器,帮助探测不寻常的地震活动以便及时关闭火车运行。GE和其它大电子/电气公司拥有巨量的车间生产日志和其它的M2M数据。Splunk、Sumo Logic、Logscape,还有XpoLog是一些专注于M2M数据分析的公司。

这一切是如何组合在一起的:机器对机器的故障分析

这个用例来自电子制造公司。车间里的不同设备,接收输入,执行测试,以非结构化文本形式发送日志,记录测试运行的结果。日志基本上获取了每次测试的参数和它们的值以及输出的结果——这么做的意图就是确认测试是通过还是失败。为便于读者理解要处理和分析什么,下面给出日志文件样本。 阅读全文

颠覆大数据分析之Storm的设计模式

颠覆大数据分析之Storm的设计模式

译者:吴京润    购书

我们将要学习如何实现基于Storm的一些通用设计模式。设计模式,我们也称之为软件工程意识,是在给定上下文环境中,针对觉设计问题的可重用的通常解决方案。(Gamma et al. 1995)。它们是分布式远程过程调用(DRPCs),持续计算,以及机器学习。

分布式远程过程调用

过程调用为单机运行的程序提供了一个传输控制与数据的灵巧机制。把这一概念扩展到分布式系统中,出现了远程过程调用(RPC)——过程调用的概念可以跨越网络边界。客户机发起一次RPC时发生了下述事件顺序:

  1. 调用环境要么挂起要么忙等待。
  2. 参数被编组并通过网络传输到目的机、服务器或被调用者,也就是程序将要执行的地方。
  3. 参数被整理后,程序在远程节点执行。
  4. 远程节点的程序执行结束时,结果被传回客户机或源。
  5. 客户端程序就像刚从一个本地过程调用返回一样继续执行。

阅读全文

使用stream操作表达更高级的数据处理请求, Part 1

使用stream操作表达更高级的数据处理请求,Part 1

原文链接 作者:Raoul-Gabriel Urma 译者:石头狮子(v1.lion@qq.com) 校对:吴京润

没有了集合你会怎么做?几乎每一个Java应用都建立和处理集合。对于许多编程任务而言,这是基础的技术:集合分组和处理数据。例如,你可能想要建立一个银行交易集合来代表用户的账户记录。然后,你想要处理所有的集合找出用户花费了多少金额。尽管集合如此重要,但是Java的实现远非完美。

首先,典型的集合处理模式有点像SQL操作,例如”查找”(查找最大值的交易)或”分组”(编组所有与杂货购买有关的交易)。大部分的数据库可以允许我们声明式地指定这些操作。例如,后面的SQL查询可以让我们找出最高值的交易ID:”SELECT id, MAX(value) from transactions”。

阅读全文

JVM内部原理

JVM内部原理

原文链接 原文作者:James D Bloom 翻译:梅小西(904516706)  校对:吴京润

 

这篇文章详细描述了Java虚拟机的内在结构。下面这张图来自《The Java Virtual Machine Specification Java SE 7 Edition》,它展示了一个典型的JVM的主要的内部结构。

阅读全文

颠覆大数据分析之Storm简介

颠覆大数据分析之Storm简介

译者:吴京润    购书

之前我们已经极为简单的介绍了Storm。现在我们要对它做一个更详细的了解。Storm是一个复杂事件处理引擎(CEP),最初由Twitter实现。在实时计算与分析领域,Storm正在得到日益广泛的应用。Storm可以辅助基本的流式处理,例如聚合数据流,以及基于数据流的机器学习(译者注:原文是ML,根据上下文判断,此处应是指机器学习,下文相同不再缀述)。通常情况,数据分析(译者注:原文为prestorage analytics,意义应是保存分析结果之前的分析计算)在Storm之上进行,然后把结果保存在NOSQL或关系数据库管理系统(RDBMSs)。以气象频道为例,使用Storm以并行方式处理大数据集(译者注:原文用到munging,意义应是洗数据)并为离线计算持久化它们。 阅读全文

颠覆大数据分析之第二章结束语

颠覆大数据分析之第二章结束语

译者:黄经业    购书

本章讨论了一些业务场景,以及它们在BDAS框架中的实现。同时还介绍了什么是BDAS框架,并重点介绍了Spark, Shark,以及Mesos。Spark在那些涉及到优化的场景中非常有用——比如说Ooyala希望基于约束条件来动态地选择最优的CDN,以便提升视频的用户体验。必须注意的是,正如第一章所说的,众所周知,约束及变量过多的优化问题是很难在Hadoop MR中解决的。随机法要更适合Hadoop。不过你应当时刻牢记一点,Hadoop很难解决优化问题指的是它很难高效地实现规模化。

诸如MPI这些传统的并行编程工具或者Spark这类的新范式则非常适用于这类优化的问题,它们能够高效地进行扩展。另有数位研究人员也同时指出,Hadoop并不擅长迭代式机器学习算法,包括发明了Spark的伯克利的研究人员,以及GraphLab的研究人员,还有加州大学圣巴巴拉分校的MapScale团队。Satish Narayana Srirama教授在他的论文中就这个问题进行了深入的讨论(Srirama等2012)。最主要的原因就是它缺少长期存活的MR以及内存编程的支持。每一次MR迭代都要启动新的MR作业,并将数据从HDFS中拷贝到内存里,然后进行迭代,再将数据写回到HDFS,检查迭代是否终止…每次迭代都重复这些会带来显著的开销。 阅读全文

颠覆大数据分析之Mesos:集群调度及管理系统

颠覆大数据分析之Mesos:集群调度及管理系统

译者:黄经业    购书

正如前面“Mesos:动机”一节中所述,Mesos的主要目标就是去帮助管理不同框架(或者应用栈)间的集群资源。比如说,有一个业务需要在同一个物理集群上同时运行Hadoop,Storm及Spark。这种情况下,现有的调度器是无法完成跨框架间的如此细粒度的资源共享的。Hadoop的YARN调度器是一个中央调度器,它可以允许多个框架运行在一个集群里。但是,要使用框架特定的算法或者调度策略的话就变得很难了,因为多个框架间只有一种调度算法。比如说,MPI使用的是组调度算法,而Spark用的是延迟调度。它们两个同时运行在一个集群上会导致供求关系的冲突。还有一个办法就是将集群物理拆分成多个小的集群,然后将不同的框架独立地运行在这些小集群上。再有一个方法就是为每个框架分配一组虚拟机。正如Regola和Ducom所说的,虚拟化被认为是一个性能瓶颈,尤其是在高性能计算(HPC)系统中。这正是Mesos适合的场景——它允许用户跨框架来管理集群资源。

Mesos是一个双层调度器。在第一层中,Mesos将一定的资源提供(以容器的形式)给对应的框架。框架在第二层接收到资源后,会运行自己的调度算法来将任务分配到Mesos所提供的这些资源上。和Hadoop YARN的这种中央调度器相比,或许它在集群资源使用方面并不是那么高效。但是它带来了灵活性——比如说,多个框架实例可以运行在一个集群里。这是现有的这些调度器都无法实现的。就算是Hadoop YARN也只是尽量争取在同一个集群上支持类似MPI这样的第三方框架而已。更重要的是,随着新框架的诞生,比如说Samza最近就被LinkedIn开源出来了——有了Mesos这些新框架可以试验性地部署到现有的集群上,和其它的框架和平共处。 阅读全文

颠覆大数据分析之类似Spark的系统

颠覆大数据分析之类似Spark的系统

译者:黄经业    购书

Nectar (Gunda 等2010),HaLoop (Bu 等2010),以及Twister(Ekanayake等2010)都是类似于Spark的系统。HaLoop是修改后的Hadoop,它增加了一个支持循环的任务调度器以及一定的缓存机制。缓存一方面是用于缓存映射器的循环数据变量,另一方面是用于缓存归约器的输出以便使得终止条件判断可以更高效地进行。Twister提供了订阅-发布的设施来实现一个广播的结构,同时它还能在历次迭代间指定及缓存静态数据。Twister和HaLoop都是扩展MR范式以支持迭代式运算的很有意思的实现。然而它们只能算是学术项目,并没有提供稳定的实现版本。除此之外,Spark通过世系所提供的容错性要比Twister和HaLoop所提供的要更先进和高效。另一个重要的不同在于Spark的编程模型更加通用,map和reduce只是它所支持的众多结构中的一组而已。它还有许多更强大的结构,包括reduceByKey以及前面所提到的一些。 阅读全文

return top