Ubuntu中使用终端运行Hadoop程序

接上一篇《Ubuntu Kylin系统下安装Hadoop2.6.0》

通过上一篇,Hadoop伪分布式基本配好了。

下一步是运行一个MapReduce程序,以WordCount为例:

1. 构建实现类:

cd /usr/local/hadoop
mkdir workspacecd workspacegedit WordCount.java

将代码复制粘贴。

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;

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();
    Job job = Job.getInstance(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);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

对于代码的具体分析,下一篇再详细讲解。

2. 编译

(1) 添加JAVA_HOME

  export JAVA_HOME=/usr/lib/jvm/java-8u5-sun

  忘记JAVA_HOME的可以使用:

  echo $JAVA_HOME

(2) 将jdk目录下的bin文件夹添加到环境变量

export PATH=$JAVA_HOME/bin:$PATH

(3) 将hadoop_classpath添加到环境变量

export HADOOP_CLASSPATH=$JAVA_HOME/lib/tools.jar

编译WordCount.java文件

../bin/hadoop com.sun.tools.javac.Main WordCount.java

  其中com.sun.tools.javac.Main是生成一个编译器的实例

  上述语句生成三个class: WordCount.class  Reducer.class  TokenizerMapper.class

将上述三个class打包成.jar包

jar cf WordCount.jar WordCount*.class

生成WordCount.jar

3. 运行

bin/hdfs dfs -mkdir /user
bin/hdfs dfs -mkdir /user/hadoop

  构造输入文件:

bin/hdfs dfs -put etc/hadoop /input

  其中,etc/hadoop是输入文件,可替换为其他文件

bin/hadoop jar /usr/local/hadoop/workspace/WordCount.jar /input /output

  查看运行结果

bin/hdfs dfs -cat /output/*

4. 结束Hadoop

sbin/stop-dfs.sh

  

时间: 2024-10-15 16:45:38

Ubuntu中使用终端运行Hadoop程序的相关文章

【爬坑】在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案

0. 问题说明 环境为 Windows 10 在 IDEA 中运行 Hadoop 程序报   winutils.exe 不存在  错误 1. 解决方案 [1.1 解压] 解压 hadoop-2.7.3.zip 文件到自定义目录 [1.2 配置 Hadoop 环境变量] 新建HADOOP_HOME,变量值为D:\program\hadoop-2.7.3 添加PATH,添加%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin [1.3 重启 IDEA] [ 1.4 测试配置 ]

mac终端运行java程序

以前都在Windows环境下开发java,今天在mac上配置了java环境,结果测试运行hello world的时候竟然出错, sudo javac helloworld.java能通过,sudo java helloworld.class竟然报错 --> ClassNotFound ??? Google才发现 mac终端运行java程序需要带上完整包结构 首先回到包的根路径 包路径:/java/com/test/src/helloworld.class cd ./java sudo java

linux中安装wine运行windows程序

http://blog.csdn.net/pipisorry/article/details/41653361 Wine的介绍 Wine是Wine Is Not an Emulator(Wine不是模拟器)的缩写,其实是一个转换层(或程序装入器),能够在Linux及与POSIX兼容的其他类似操作系统上运行Windows应用程序.Wine在Linux上无法模拟Windows应用程序,而是提供了另外的方法来实施DLL(典型的Windows应用程序可以调用这些DLL)和代替Windows NT内核的进

使用ToolRunner运行Hadoop程序基本原理分析

为了简化命令行方式运行作业,Hadoop自带了一些辅助类.GenericOptionsParser是一个类,用来解释常用的Hadoop命令行选项,并根据需要,为Configuration对象设置相应的取值.通常不直接使用GenericOptionsParser,更方便的方式是:实现Tool接口,通过ToolRunner来运行应用程序,ToolRunner内部调用GenericOptionsParser. 一.相关的类及接口解释 (一)相关类及其对应关系如下: 关于ToolRunner典型的实现方

Python中四种运行其他程序的方式

在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数. [方式一]使用os.system()函数运行其他程序 os模块中的system()函数可以方便地运行其他程序或者脚本,模式如下: os.system(command) command: 要

Ubuntu中安装eclipse,运行出错处理

在Ubuntu中安装eclipse sudo apt-get install eclipse-cdt eclipse 安装完成后,启动程序时出现错误框: An error has occurred. See the log file/home/GOOD/.eclipse/org.eclipse.platform_3.7.0_155965261/configuration/1417143109545.log. 打开文件发现错误信息: !ENTRY org.eclipse.osgi 4 0 2014

在windows中:双击运行Python程序、后台运行Python程序

一.安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退.怎样避免闪退呢? 1.bat启动 start_show.bat  中 python main.py 2.升级版:vbs后台运行(无界面) start_hidden.vbs  中 Set ws = CreateObject("Wscript.Shell") ws.run "cmd /c start_show.bat",0 二.windows中怎么快捷杀掉Python程序? 答:bat杀

用java运行Hadoop程序报错:org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.

用java运行Hadoop例程报错:org.apache.hadoop.fs.LocalFileSystem cannot be cast to org.apache.所写代码如下: package com.pcitc.hadoop; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.h

在Eclipse中运行hadoop程序

1.下载hadoop-eclipse-plugin-1.2.1.jar,并将之复制到eclipse/plugins下. 2.打开map-reduce视图 在eclipse中,打开window-->open perspetive-->other,选择map/reduce. 3.选择Map/Reduce Locations标签页,新建一个Location 4.在project exploer中,可以浏览刚才定义站点的文件系统 5.准备测试数据,并上传到hdfs中. liaoliuqingdeMac