Hadoop学习第三篇Hadoop的第一个Mapreduce程序

作者: 云计算机网 分类: 云计算知识 发布时间: 2016-07-31 15:46

Mapreducer程序写了好几个了,但是之前一直都没有仔细的测试过本地运行和集群上运行的区别,今天写了一个Mapreduce程序,在此记录下来。

本地运行注意事项有以下几点:

1、本地必须配置好Hadoop的开发环境

2、在src里不加入配置文件运行,或者如果本地的src里有mapred-site.xml和yarn-site.xml配置文件,那么mapreduce.framework.name=local以及yarn.resourcemanager.hostname=local

测试说明:src里的配置文件修改为本地后打出jar包到集群运行,测试发现读取的是集群的配置文件,而不是本地src里面的配置文件,src配置主要是在本地运行时读取,没有 配置那么读取的是default.xml配置文件

以下是Mapreduce的代码:

package cn.zxl.mrlocalrun;import java.io.IOException;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;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 MapreduceLocalRunTest {static class MapreduceLocalRunTestMapper extends Mapper<LongWritable, Text, Text, Text>{@Overrideprotected void map(LongWritable key, Text value,Context context)throws IOException, InterruptedException {String line=value.toString();String[] fields=line.split("@");String name=fields[0];String idserial=fields[1];String sex=fields[2];context.write(new Text(name), new Text(idserial+"\t"+sex));}}//reducer代码块虽然没有写排序,但是默认会根据key进行排序static class MapreduceLocalRunTestReducer extends Reducer<Text, Text, Text, Text>{@Overrideprotected void reduce(Text key, Iterable<Text> values,Context context)throws IOException, InterruptedException {for(Text value:values){context.write(key, value);}}}//本地运行程序测试,不在Hadoop集群测试程序//特别说明:本地必须配置好Hadoop的开发环境,在src里不加入配置文件运行,//如果本地的src里有mapred-site.xml和yarn-site.xml配置文件,那么mapreduce.framework.name=local以及yarn.resourcemanager.hostname=local//src里的配置文件修改为本地后打出jar包到集群运行,测试发现读取的是集群的配置文件,而不是本地src里面的配置文件,src配置主要是在本地运行时读取,没有配置那么读取的是default.xml配置文件/** * 说明:main右键--->选择Run As--->Run Configuration--->Name:指定运行的类名; * Main里:Protect指定工程名; Main class指定主函数的包名+类名--->Arguments里的Program arguments: * 指定要输入的参数,本类指定输入数据源和输出数据源的路径E:\localrun\data\Users.txt  E:\localrun\data\out * @param args * @throws Exception */public static void main(String[] args) throws Exception {Configuration conf=new Configuration();Job job=Job.getInstance(conf);//指定jar类job.setJarByClass(MapreduceLocalRunTest.class);//指定mapper和reducer类job.setMapperClass(MapreduceLocalRunTestMapper.class);job.setReducerClass(MapreduceLocalRunTestReducer.class);//job.setNumReduceTasks(0);//不运行reducer,程序也不会进行排序//指定map输出key和value的类型,如果和reducer类型一致,mapper的输出可以省略不写,默认和reducer一致job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);//指定reducer的key和value输出类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);//分别指定数据源的输入和数据的输出路径,在集群上输入的是hdfs里的路径,而不是本地路径FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));job.waitForCompletion(true);}} 
  • shell脚本学习指南

    书名: Shell脚本学习指南

    作者: (美)罗宾

    ISBN: 9787111255048

    前言

    近几年来,shell一直被忽略,是一个不受重视的脚本语言。shell虽然是UNIX的个脚本语言,但它仍是相当的。它结合了延展性与效率。持续保有独具的特殊,并不断地被改良,使它们多年来一直与那些花招很多的脚本语言保存抗衡。

    背景

    本书可以回答你这些问题。告诉你如何结合UNIX工具,将其与标准的shell相结合完成工作。shell脚本的编写是门艺术,需要的不只是shell语言的相关知识,还要你对各个独立的UNIX程序有基本认识:为什么会有这些工具,要怎么单独地使用它们,怎么将它们与其他程序结合应用。

    为什么需要学习编写shell命令?因为大部分情况下,中型到大型的问题都能拆成较小的部分,这些小部分也多半能找到现成的UNIX工具。用心编写的好用shell脚本常常能够比C或C++语言编写的程序更快地解决相同的问题。也可以让shell脚本提供可移植性,也是说,可以跨越UNIX与POSIX兼容的系统,有时仅需略作修改,甚至不必修改,即可使用。

    目录

    第1章 背景知识

    1.1 UNIX简史

    1.2 软件工具的原则

    1.3 小结

    第2章 入门

    2.1 脚本编程语言与编译型语言的差异

    2.2 为什么要使用Shell脚本

    2.3 一个简单的脚本

    2.4 自给自足的脚本:位于行的#!

    2.5 Shell的基本元素

    2.6 访问Shell脚本的参数

    2.7 简单的执行跟踪

    2.8 国际化与本地化

    2.9 小结

    第3章 查找与替换

    3.1 查找文本

    3.2 正则表达式

    3.3 字段处理

    3.4 小结

    第4章 文本处理工具

    4.1 排序文本

    4.2 删除重复

    4.3 重新格式化段落

    4.4 计算行数、字数以及字符数

    4.5 打印

    4.6 提取开头或结尾数行

    4.7 小结

    第5章 管道的神奇魔力

    5.1 从结构化文本文件中提取数据

    5.2 针对Web的结构型数据

    5.3 文字解谜好帮手

    5.4 单词列表

    5.5 标签列表

    5.6 小结

    第6章 变量、判断、重复动作

    6.1 变量与算术

    6.2 退出状态

    6.3 case 语句

    6.4 循环

    6.5 函数

    6.6 小结

    第7章 输入/输出、文件与命令执行

    7.1 标准输入、标准输出与标准错误输出

    7.2 使用read读取行

    7.3 关于重定向

    7.4 printf的完整介绍

    7.5 波浪号展开与通配符

    7.6 命令替换

    7.7 引用

    7.8 执行顺序与eval

    7.9 内建命令

    7.10 小结#p#分页标题#e#

    第8章 产生脚本

    8.1 路径查找

    8.2 软件构建自动化

    8.3 小结

    第9章 awk的惊人表现

    9.1 awk命令行

    9.2 awk程序模型

    9.3 程序元素

    9.4 记录与字段

    9.5 模式与操作

    9.6 在awk里的单行程序

    9.7 语句

    9.8 用户定义函数

    9.9 字符串函数

    9.10 数值函数

    9.11 小结

    第10章 文件处理

    10.1 列出文件

    10.2 使用touch更新修改时间

    10.3 临时性文件的建立与使用

    10.4 寻找文件

    10.5 执行命令:xargs

    10.6 文件系统的空间信息

    10.7 比较文件

    10.8 小结

    第11章 扩展实例:合并用户数据库

    11.1 问题描述

    11.2 密码文件

    11.3 合并密码文件

    11.4 改变文件所有权

    11.5 其他真实世界的议题

    11.6 小结

    第12章 拼写检查

    12.1 spell程序

    12.2 最初的UNIX拼写检查原型

    12.3 改良的ispell与aspell

    12.4 在awk内的拼写检查程序

    12.5 小结

    第13章 进程

    13.1 进程建立

    13.2 进程列表

    13.3 进程控制与删除

    13.4 进程系统调用的追踪

    13.5 进程账

    13.6 延迟的进程调度

    13.7 /proc文件系统

    13.8 小结

    第14章 Shell可移植性议题与扩展

    14.1 迷思

    14.2 bash的shopt命令

    14.3 共通的扩展

    14.4 下载信息

    14.5 其他扩展的Bourne式Shell

    14.6 Shell版本

    14.7 Shell初始化与终止

    14.8 小结

    第15章 安全的Shell脚本:起点

    15.1 安全性Shell脚本提示

    15.2 限制性Shell

    15.3 特洛伊木马

    15.4 为Shell脚本设置setuid:坏主意

    15.5 ksh93与特权模式

    15.6 小结

    下载地址:http://pan.baidu.com/s/1nt7dCl7

  • 相关推荐:

  • shell脚本学习指南
  • 网页开发工具有哪些?
  • 服务器租用找景安
  • 河南第三届互联网大会圆
  • 第三届中国互联网安全领
  • 戴尔全新解决方案将机器
  • 思科加入人工智能阵营发
  • IDC:2018年第三季度全球
  • win10怎么添加第三方输入
  • 如何学习电脑知识?
  • 网站内容禁止违规转载,转载授权联系中国云计算网