pig2 发表于 2014-2-7 22:15:29

零基础利用Java开发hadoop需要考虑的问题

本帖最后由 pig2 于 2014-2-7 22:29 编辑

做过其他开发,懂一门语言,但是对于Java基本没有接触过,面临诱惑的hadoop,我们又想做开发。在使用Java过程中我们会遇到什么问题。
如果说传统开发,我们的学习步骤应该下面:
1.看视频,了解Java基础开发
通过这里,如果我们有一定的基础,相信只需要花三天时间,基本就没有问题了。最起码能够输出“hello word ”了。
java视频教程

2.与hadoop相结合。
首先hadoop是一个java架构,也就是一个Java包。如果你是.net程序员,那么就相当于引用一个.dll。

可能会遇到问题:
大数据时代之前,我们可能不会遇到这个问题。但是随着时间和大数据时代的来临。开发环境变得更加复杂些了。
有的开发环境在windows 32位,64位,有的是在Linux 32位,64位。这样让我们想到该如何解决这个问题。我们该选择什么样的操作系统。
幸好Java是跨平台。
如果在本地机器java 32位下开发的web程序,那么能否运行于线上服务器java 64位版本上呢?
用java开发的web程序在window(32位)下面部署到tomcat下面,是不是直接可以把编译好的webapp下的工程目录放到linux(redhat 64位)相同软件版本号的运行环境(jdk,tomcat)中运行呢?
在企业中是如何做的?

------解决方案--------------------
java程序和计算机位数没有关系,重要的是jdk位数和计算机要一致。
------解决方案--------------------
Java的可以,VM能保证你的基础类型在所有机器一样长。
------解决方案--------------------
所谓java32和java64位其实都是JVM,而JVM是遵循JVM规范的;
JAVA代码可以跑在所有遵循JVM规范实现的JAVA虚拟机上;
所以,可以放心,没问题的;

可能的问题在于,在64位中,所有的引用类型都是64位的,包括INT可能也会被强制填充到64位,因此,32位的程序在内存不变的情况下,在64位的平台上更易发生内存溢出;

------解决方案--------------------
总的来说是没有问题,以前做的项目,都没这方面问题。

上面可能不具有说服力:
下面从原理来解说:

Java 编译的结果是 byte code,不分 32 位、64 位。在 32 位的 JVM 上运行,就解释为 32 位 native code,在 64 位 JVM 上运行就解释为 64 位 native code。部分会被 JIT 编译为 native code。
Java是「一次编译,到处运行」,用Java是不能写出只能在64位或则32位下运行的软件的。

java的一次编译,到处运行,也是对于同一个版本的jre而言的,比如你用1.5版本编译出来的,在1.4版本的就不一定能运行了(jre包括jvm以及运行时的类库)。但是,就同一个版本的jre而言,java的确做到一次编译,到处运行。因为java编译出来的并不是具体某个平台的二进制指令,而是一种伪代码,jre就是在运行java程序的时候,把这些伪代码解析为具体某个平台的二进制指令。计算机只认识二进制,这点大家都知道的,对于不同的平台,每条指令的二进制代码不一定相同,比如move指令,windows下可能010,而unix下可能是001。java编译出来的并不是具体的010或001,而是一种可以让jre解释为010或001的伪代码。



Hadoop技术组

sandy山迪 发表于 2017-9-24 22:41:23

这个帖子没有评论。感觉是开发者对这类问题不屑

jaki 发表于 2018-6-28 15:19:32

谢谢lz,这对开发部署环境帮助很大
页: [1]
查看完整版本: 零基础利用Java开发hadoop需要考虑的问题