hadoop 2.x 编译打包

1. 需要编译打包的代码如下:

package org.apache.hadoop.examples;

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

import org.apache.hadoop.mapreduce.Reducer;

import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;

import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

public static class TokenizerMapper

extends Mapper<Object, Text, Text, IntWritable>{

private final static IntWritable one = new IntWritable(1);

private Text word = new Text();

public void map(Object key, Text value, Context context

) throws IOException, InterruptedException {

StringTokenizer itr = new StringTokenizer(value.toString());

while (itr.hasMoreTokens()) {

word.set(itr.nextToken());

context.write(word, one);

}

}

}

public static class IntSumReducer

extends Reducer<Text,IntWritable,Text,IntWritable> {

private IntWritable result = new IntWritable();

public void reduce(Text key, Iterable<IntWritable> values,

Context context

) throws IOException, InterruptedException {

int sum = 0;

for (IntWritable val : values) {

sum += val.get();

}

result.set(sum);

context.write(key, result);

}

}

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();

String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();

if (otherArgs.length < 2) {

System.err.println("Usage: wordcount <in> [<in>...] <out>");

System.exit(2);

}

Job job = new Job(conf, "word count");

job.setJarByClass(WordCount.class);

job.setMapperClass(TokenizerMapper.class);

job.setCombinerClass(IntSumReducer.class);

job.setReducerClass(IntSumReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(IntWritable.class);

for (int i = 0; i < otherArgs.length - 1; ++i) {

FileInputFormat.addInputPath(job, new Path(otherArgs[i]));

}

FileOutputFormat.setOutputPath(job,

new Path(otherArgs[otherArgs.length - 1]));

System.exit(job.waitForCompletion(true) ? 0 : 1);

}

}

2.编译

编译之前需要设置classpath,有两种方式一种是修改 /etc/profile文件,另一种是在编译时动态指定classpath

a .修改/etc/profile添加如下代码:

export CLASSPATH=$HDOOP_HOME/share/hadoop/common/hadoop-common-2.5.0.jar:$HDOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar:$HDOOP_HOME/share/hadoop/common/lib/hadoop-annotations-2.5.0.jar:$HDOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0.jar

保存并生效 source /etc/profile

javac  -d /root/test/bin/ /root/test/org/apache/hadoop/examples/WordCount.java

注意:$HDOOP_HOME  为hadoop的根目录

/root/test/bin/  为生成class文件的存放路径

b.动态设置classpath

javac -classpath $HDOOP_HOME/share/hadoop/common/hadoop-common-2.5.0.jar:$HDOOP_HOME/share/hadoop/common/lib/commons-cli-1.2.jar:$HDOOP_HOME/share/hadoop/common/lib/hadoop-annotations-2.5.0.jar:$HDOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0.jar -d
/root/test/bin/ /root/test/org/apache/hadoop/examples/WordCount.java

3.打包

切换到打包目录下 cd /root/test/bin/

jar -cvf WordCount.jar org/apache/hadoop/examples/*.class

4.运行

hadoop jar WordCount.jar org/apache/hadoop/examples/WordCount hdfs://hadoop1:9000/home/input/ hdfs://hadoop1:9000/home/output/result

注意:hdfs 的/home/input/目录下存放需要统计的文件。

在hdfs上创建/home/output/目录result目录不用创建,运行程序时会自己创建,否则会提示给文件已经存在

5.查看

hdfs dfs -cat /home/output/result/part-r-00000

时间: 2024-08-11 01:35:46

hadoop 2.x 编译打包的相关文章

6.命令行编译打包运行五个MapReduce程序

对于如何编译WordCount.java,对于0.20 等旧版本版本的做法很常见,具体如下: javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java 但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此编辑和打包自己的MapReduce程序与旧版本有所不同. Hadoop 2.x 版本中的依赖 jar Hadoop 2.x 版本中jar不再集中在一个

[hadoop]命令行编译并运行hadoop例子WordCount

首先保证JDK.Hadoop安装设置成功 可以参考[linux]ubuntu下安装hadoop [linux]ubutnu12.04 下安装jdk1.7 使用hadoop版本为1.2.1,jdk为1.7 在hadoop-1.2.1\src\examples\org\apache\hadoop\examples找到WordCount.java 源码如下: 1 /** 2 * Licensed under the Apache License, Version 2.0 (the "License&q

Ubuntu14下Hadoop开发&lt;2&gt; 编译64位Hadoop2.4

Hadoop官方网站只提供了32位的Hadoop包,我装的是64位的系统,自然无法使用,会报错误,导致的结果是无法启动hadoop libhadoop.so.1.0.0 which might have disabled stack guard. 我们可以在${Hadoop-Home}/lib/native文件夹下找到libhadoop.so.1.0.0文件,会出现如下 [email protected]:$ file /usr/mytools/hadoop-2.4.0/lib/native/l

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0

使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0 网上的 MapReduce WordCount 教程对于如何编译 WordCount.java 几乎是一笔带过… 而有写到的,大多又是 0.20 等旧版本版本的做法,即 javac -classpath /usr/local/hadoop/hadoop-1.0.1/hadoop-core-1.0.1.jar WordCount.java,但较新的 2.X 版本中,已经没有 hadoop-core*.jar 这个文件,因此

Hadoop源码编译与调试汇总

虽然在运行Hadoop的时候可以打印出大量的运行日志,但是很多时候只通过打印这些日志是不能很好地跟踪Hadoop各个模块的运行状况.这时候编译与调试Hadoop源码就得派上场了.这也就是今天本文需要讨论的. 先说说怎么编译Hadoop源码,本文主要介绍在Linux环境下用Maven来编译Hadoop.在编译Hadoop之前,我们需要准备好编译环境: 1.安装好1.6或以上的JDK;2.安装Maven,被做好相应的配置;3.安装ProtocolBuffer 2.5.0,MapReduce和HDFS

Java 编译打包命令

背景 编译 打包 解压 运行 参考 背景 我们有的时候总是要使用将自己写的工程编译成 class 文件,同时打包成 jar,虽然有各种工具可以帮助我们,但是毕竟掌握使用 java 本来的命令去做这些更灵活 编译 比如我要编译包名为 com.demo,全称为 com.demo.Main 的这个类,同时将生成的文件指定到当前目录下的 bin 文件夹下,那么在么做呢? Main.java 内容: 1 package com.demo; 2 public class Main{ 3 4 public s

前端工程编译打包优化尝试

近期对公司前端项目的文件组织结构和编译打包方式做了一些调整,记录如下. 1. 文件结构总览 1.1 开发环境说明 随着项目逐渐庞大,考虑到代码的组织维护以及项目架构的可扩展性,采用前后端分离的部署方案.前端项目作为独立的项目维护,由后台提供Restful API进行交互. 前端项目采用了AngularJS框架,Jade模板编写网页,基于Nodejs环境使用bower进行依赖管理,使用gulp编译和打包. 1.2 项目文件总体结构 app:使用gulp编译打包生成的路径: master:jade.

Ant编译打包Android工程流程

一.Ant编译打包android工程步骤 二.Ant apk签名 1.keystore签名    定义自己的签名文件 生成keystore文件:keytool -genkey -alias android.keystore -keyalg RSA - validity 20000 -keystore android.keystore 对应的java命令:jarsigner -verbose -keystore android.keystore -signedjar android_signed.

Storm-0.9.2-incubating源代码编译打包

近期遇到一些同学询问Storm-0.9.2-incubating源代码编译打包的问题,现将编译步骤说明例如以下: 1.凝视掉project各pom文件里关于maven插件(maven-gpg-plugin)的内容,目的是规避错误: 当然,该错误也能够忽略,即能够不进行上述凝视操作 2.在project根文件夹下运行maven命令: mvn clean compile package -P dist -Dmaven.test.skip=true 3.进入文件夹:storm-dist/binary,