只需足够的Java for Hadoop

时间:2011-04-20 14:45:12

标签: java hadoop

我已经是C ++开发人员大约10年了。我需要为Hadoop选择Java。我怀疑我会在Java中做任何其他事情。所以,我想要一个我需要拿起的东西列表。当然,我需要学习核心语言,但还有什么?

我为此做了谷歌,这可能被视为“我想学习Java的可能重复。请告诉我怎么样?”但事实并非如此。 Java是一种庞大的编程语言,有很多库,我需要学习的内容在很大程度上取决于我使用的Hadoop。但是我想有可能说不喜欢学习这个。这也非常有用。

12 个答案:

答案 0 :(得分:48)

在我的日常工作中,我花了一些时间帮助C ++人员通过JNI(Java Native Interface)获取足够的Java来使用一些Java库,然后将内存共享到他们主要的C ++应用程序中。以下是我注意到的一些关键事项:

  1. 如果没有IDE,您无法管理玩具项目之外的任何事情。你应该做的第一件事是下载一个流行的Java IDE(Eclipse是一个很好的选择,但也有其他选择,包括Netbeans和IntelliJ)。不要试图用vi / emacs和javac / make来管理。 你将生活在一个山洞里而没有意识到这一点。一旦你掌握了基本的IDE功能,你就会比没有IDE的情况下提高几十倍。
  2. 了解如何布局简单的项目结构和包。将有关于如何在Eclipse站点或其他地方执行此操作的简单演练。切勿将任何内容放入默认包中。
  3. Java有一个类型系统,由于历史/性能原因,引用和基元类型相对独立。
  4. Java的泛型与C ++模板相同。阅读“类型擦除”。
  5. 您可能希望了解Java的GC是如何工作的。只需谷歌“标记和扫描” - 首先,您可以选择最天真的心理模型,然后了解现代生产GC如何在以后执行此操作的详细信息。
  6. 应该毫不拖延地学习Collections API的核心。 Map / HashMap,List / ArrayList& LinkedList和Set应该足够了。
  7. 学习现代Java并发。与java.util.concurrent中的一些很酷的东西相比,Thread是一个汇编语言级原语。学习ConcurrentHashMap,Atomic *,Lock,Condition,CountDownLatch,BlockingQueue和来自Executors的线程池。这里的好书是Brian Goetz和Doug Lea的作品。
  8. 只要您想使用第三方库,就需要了解类路径的工作原理。这不是火箭科学,但它有点冗长。
  9. 如果你是一个低级别的C ++人,那么你也可能会发现其中一些有趣的东西:

    1. 默认情况下,Java具有虚拟分派功能。 Java方法上的关键字static用于表示类方法。私有Java方法使用invokespecial dispatch,它是对正在使用的确切类型的调度。
    2. 至少在Oracle VM上,对象包含两个标题的机器字(标记字和类字)。标记字是VM使用的一堆标志 - 特别是用于线程同步。您可以将类词视为指向VM的Class对象表示的指针(这是方法的vtable所在的位置)。类字后面是对象实例的成员字段。
    3. Java .class文件是一种中间语言,与x86对象代码不太相似。特别是.class文件有很多有用的工具(包括JVM附带的javap反汇编程序)
    4. 符号表的Java等价物称为常量池。它是打字的,里面有很多信息 - 可以说比x86对象代码更等。
    5. Java虚方法分派包括查找要在常量池中调用的正确方法,然后将其转换为偏移到vtable中。然后向上遍历类层次结构,直到在该vtable偏移量处找到非空值。
    6. Java开始解释然后编译(对于Oracle和其他一些VM无论如何)。切换到编译模式是根据需要逐个方法完成的。在进行基准测试和性能调整时,您需要确保在启动之前已经预热了系统,并且通常应该在方法级别进行概要分析。所做的优化可能非常积极/乐观(如果违反了假设,则会进行检查和回退) - 因此,性能调整是一种艺术。
    7. 希望有一些有用的东西可以继续 - 请评论/询问后续问题。

答案 1 :(得分:17)

学习“足够”Java正在学习Java。你要么学习所有的核心原则和语言设计决策,要么就是容易犯错误。考虑到你已经知道如何编程,可以掠过许多信息(着眼于它与你熟悉的其他语言的不同之处)。

所以你需要学习:

  1. 如何get started
  2. The language itself
  3. 核心essential classes
  4. major Collections
  5. 如果您没有适当的构建框架,那么如何package your compiled code

    除此之外,您可能需要学习的几乎所有其他项目在很大程度上取决于您打算做什么。不要打折the on-line tutorials from Oracle/Sun,它们相当不错(与其他在线教程相比)。

答案 2 :(得分:12)

Hadoop可以使用C ++:WordCount example in C++

答案 3 :(得分:7)

如果不了解标准API中的这些软件包,就无法真正使用Java:

java.lang
java.util
java.io

而且,程度较轻:

java.text
java.math
java.net
java.lang.reflect
java.util.concurrent

它们包含许多你需要经常用于任何应用程序的类,并且最好仔细查看它们,直到你知道它们包含哪些类以及哪些类是有用的,以免你最终重新发明车轮。

答案 4 :(得分:7)

  • 放轻松,学习Java就可以了 如果你已经知道,快乐和快速 C ++

    购买这两本书:

    1. JavaTM编程语言,(第4版)Ken Arnold,James 戈斯林,戴维斯霍姆斯
    2. Effective Java(第2版),Joshua Bosh

你很快就会掌握Java,你不会后悔的。祝你好运。

答案 5 :(得分:4)

由于C ++和Java共享共同的根源,核心语言不应该给你带来太多麻烦。你需要熟悉java SDK,特别是java.lang和Collections框架(java.util。)

但是如果你没有看到自己在其他地方使用它,那么学习java可能会有点过分。 Hadoop还绑定了Python - 也许学习python会是一个更好的选择吗? See Java vs Python on Hadoop

答案 6 :(得分:3)

Here是您需要的所有快速入门 我建议Eclipse(java)开始工作,请参阅this了解

答案 7 :(得分:3)

也许你甚至不需要知道Java就可以使用Hadoop。

Pig远远不够简单到高级使用Hadoop。

答案 8 :(得分:3)

我不知道你对其他更高级别的编程语言有多熟悉。 垃圾收集是Java中的一项重要功能。在您选择的VM中阅读一些关于GC的信息非常重要。

除了显而易见的软件包外,请查看java.utilcollection framework个软件包。您可能想查看某些类的来源。我建议HashMap来了解这些操作的计算/内存成本。

Java在处理大量数据时喜欢使用而不是缓冲区。这可能需要一段时间才能适应。

Java没有无符号类型。根据您需要立即处理的数据包,您可以使用更大的变量并使用arythetics(如果我们讨论的是相对较小的数据包),或者每次读取时都必须(b[i] & 0xff)例如无符号字节。另请注意,Java在序列化多字节数字时使用网络字节顺序(msbf)。

API最受欢迎的设计模式是Singleton,Decorator和Factory。检查JFC本身的来源以获取最佳实践,以及如何使用该语言实现这些模式。

...你仍然可以在SO上发布更具体的问题:)

答案 9 :(得分:2)

大多数东西应该对你很熟悉。我只是下载eclipse并google一个教程网站。熟悉类加载,关键字。许多C ++人员遇到的一个棘手的问题是如何运行java应用程序以便找到它的库类(类似于动态链接)。了解JRE和JDK之间的区别。如果您可以使用一些hello world类型的应用程序,那么如果您按照教程,您应该能够开始使用hadoop。

答案 10 :(得分:2)

回答1:

  • 非常希望了解Java。 Hadoop是用Java编写的。其流行的序列文件格式依赖于Java。
  • 即使您使用Hive或Pig,您可能有一天需要编写自己的UDF。有些人仍然试图用其他语言编写它们,但我想Java有更强大的主要支持。
  • 大多数Hadoop工具都不够成熟(比如Sqoop,HCatalog等),所以你会看到很多Java错误堆栈跟踪,可能你有一天想要破解源代码

回答2

  • 您不需要了解Java。
  • 正如其他人所说,取决于您的处理能力有多复杂,这将非常有用。然而,只有Pig和Hive可以做到令人难以置信的数量。
  • 我同意你很可能最终需要编写用户定义的函数(UDF),但是,我用Python编写了这些函数,并且用Python编写UDF非常容易。
  • 当然,如果您有非常严格的性能要求,那么基于Java的MapReduce程序将是最佳选择。然而,Pig和Hive都在不断地提高性能。
  • 因此,对您的问题的简短回答是“不”,您不需要了解Java才能执行Hadoop开发。
  

资料来源:   http://www.linkedin.com/groups/Is-it-must-Hadoop-Developer-988957.S.141072851

答案 11 :(得分:1)

你不需要学习java来使用hadoop。

你需要知道linux到installand配置hadoop

然后您可以使用任何理解标准输入/输出的语言的流线api编写地图减少作业

此外,您可以使用其他库(如hive等)进行更复杂的地图缩减

即使像hbase / cassandra这样的hadoop的其他组件也拥有大多数语言的客户端