原生态在hadoop上运行java程序

简介:

第一种:原生态运行jar

1,利用eclipse编写Map-Reduce方法,一般引入hadoop-core-1.1.2.jar。注意这里eclipse里没有安装hadoop的插件,只是引入其匝包,该eclipse可以安装在windows或者linux中,如果是在windows中安装的,且在其虚拟机安装的linux,可以通过共享文件夹来实现传递。

2,编写要测试的数据,如命名为tempdata

3,利用eclipseexport来打包已编写好的,在利用eclipse打包jar的时候,只需要选择src即可,一般只打包程序文件,并且需要选择main class,将该jar放到如/home/hadoop/docum/Test.jar

4,将要分析的数据传到hdfs

hadoop fs -put /home/hadoop/myhadoopdata/tempdata  ./testdata/

5,开始执行jar

hadoop jar /home/hadoop/Docum/Test.jar  /user/hadoop/temperatur output

这是一种利用jar来运行的。

这里Test.jar在本地,jar没必要上传到hdfs

参数依次为

本地mapred程序,hdfs的测试数据即输入文件,输出文件夹。

hadoop jar /home/hadoop/Temperature.jar inputpath outputpath

注意:这里可以不需要指定类的名称,而输出的文件夹outputpath不能事先已经存在。

第二种:伪分布式下运行WordCount

1,拷贝源代码

cp /usr/local/hadoop1.1.2/src/examples/org/apache/hadoop/examples/WordCount.java  ~/ygch/hadoop/

2,编译源代码,放到指定的文件夹如这里的class

javac

-classpath /usr/local/hadoop1.1.2/hadoop-core1.1.2.jar:

/usr/local/hadoop1.1.2/lib/commons-cli-1.2.jarWordCount.java  -d class,

利用-classpath选项指定WordCount需要的jar包。hadoop目录下存放jar包的位置有两个:根目录和/lib目录。然后我们可以通过jar tvf  *.jar查看jar包内容,进而可以知道WordCount需要的是哪几个jar包。

-d选项指定生成的类文件的位置,在编译的时候这个选项必须重新指定,不能让class文件生成在当前目录下。

3,class文件打包成一个jar包:

jar cvf WordCount.jar -C classes/  .

注意不要忘记最后有一个点.,这个点点必须和前面要有空格,否则jar命令报错。该点指示jar命令的文件列表,表示指定目录下的所有文件。

4,生成input文件:

由于运行hadoop时指定的输入文件只能是HDFS文件系统中的文件,所以我们必须将要进行wordcount的文件从本地文件系统拷贝到HDFS文件系统中。

hadoop fs -mkdir input

hadoop fs -put testfile input

5. 运行jar包:

hadoop jar WordCount.jar org.apache.hadoop.examples.WordCount input output

在运行命令中由于WordCount.java中包括package信息,所以我们在指定类时要包含package的完整信息。

6. 查看结果

hadoop程序运行完后,结果会放在output目录下,该目录是自动生成的。查看命令为:

hadoop fs -cat output/part-r-00000

使用-cat或者-text都行

第三种Hadoop直接执行Class文件

可以事先在eclipse中编译好class,然后直接利用hadoop来执行该class文件

Hadoop集群中运行作业的时候,必须要将程序打包为jar文件。

Hadoop本地和伪分布中可以运行jar文件,也可以直接运行class文件,注意直接运行class文件,必须是没有mapreducer的,直接获取FileSystem来进行操作。

如果类有包名,拷贝的时候也要将其包名拷贝,然后

hadoopwhut/structfile/SequenceFileWriteDemo numbers.seq


利用Hadoop命令和Java命令都可以执行class文件,前者可以将Hadoop库文件路径加入到类路径中来,同时也能获取Hadoop的配置文件。

一般都需要提前设置一个HADOOP_CLASSPATH环境变量用于添加应用程序类的路径,注意这里的路径是用户本地的文件路径,不是hdfs中的路径。

具体的如下:

export   HADOOP_CLASSPATH=/home/hadoop/hadoopclass

hadoop FileSystemCat hdfs://localhost:9000/user/hadoop/inputdata/iodata.txt

也可以直接在IDE中将hadoopjar加入classpath中,然后直接run


第四种 Hadoopeclipse环境的搭建

hadoop jar 运行的实质是:

1.利用hadoop这个脚本启动一个jvm进程;

2.jvm进程去运行org.apache.hadoop.util.RunJar这个java;

3.org.apache.hadoop.util.RunJar解压Temperature.jar

hadoop.tmp.dir/hadoop-unjar*/目录下;

4.org.apache.hadoop.util.RunJar动态的加载并运行MainClass或参数中指定的Class;

5.MainClass或参数中指定的Class中设定Job的各项属性

6.提交jobJobTracker上并监视运行情况


执行hadoop jar的时候,jar不需要放到hdfs中,一般hadoop是到本地中寻找jar的,如果用户此时在jar目录下,可以直接写jar名。

对于输入文件夹和输出文件夹也不需要写上hadoop的内置路径名,默认是在/user/hadoop/这个目录下的,hadoop命令后可以不用加根路径。



本文转自 zhao_xiao_long 51CTO博客,原文链接:http://blog.51cto.com/computerdragon/1260871


相关文章
|
3天前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
24 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
3天前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
18 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
14天前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
16天前
|
分布式计算 Java Hadoop
java使用hbase、hadoop报错举例
java使用hbase、hadoop报错举例
43 3
|
18天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
38 1
|
3天前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
19 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
3天前
|
Java
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
这篇文章详细解释了Java中static和final关键字的用法,包括它们修饰类、方法、变量和代码块时的行为,并通过代码示例展示了它们的具体应用。
26 0
Java关键字 —— static 与 final 详细解释!一看就懂 有代码实例运行!
|
16天前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
25 5
|
16天前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
1天前
|
Java
java的程序记录时间
java的程序记录时间
8 0