传参关键代码:

//从配置文件获取参数,必须在作业创建的前面

conf.addResource("hadoop-bigdata.xml");
keepUrl=conf.get("KeepUrlString","");
filterUrl=conf.get("FilterUrlString","");
conf.set("FilterUrl", filterUrl);
conf.set("KeepUrl", keepUrl);
//获取参数
String fstr=context.getConfiguration().get("FilterUrl");
String kstr=context.getConfiguration().get("KeepUrl");
 
package org.apache.hadoop.examples;

import java.io.IOException;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class FilterUrl { public static class FilterUrlMap extends Mapper<Object,Text,Text,Text>
{
private static Text word=new Text(); public void map(Object key,Text values,Context context) throws
IOException,InterruptedException
{
boolean fflag=false;
boolean kflag=false;
//获取参数
String fstr=context.getConfiguration().get("FilterUrl");
String kstr=context.getConfiguration().get("KeepUrl");
//循环的方式
// StringTokenizer fitr=new StringTokenizer(fstr,"|");
// StringTokenizer kitr=new StringTokenizer(kstr,"|"); //正则表达式,替换特殊字符
Pattern filter=Pattern.compile(fstr.replace(".","\\."));
Pattern keep=Pattern.compile(kstr.replace(".","\\.")); //有一大段的内容
StringTokenizer itr = new StringTokenizer(values.toString(),"\n");
String url="";
while(itr.hasMoreTokens())
{
url=itr.nextToken().toLowerCase(); //正则表达式的模式匹配
Matcher mkeep=keep.matcher(url);
if(mkeep.find())
{
kflag=true;
Matcher mfilter=filter.matcher(url);
if(mfilter.find())
fflag=true;
} //需要保留的URL
/**
//循环的模式匹配
while(kitr.hasMoreTokens())
{
if(url.indexOf(kitr.nextToken())>0)
{
kflag=true;
break;
}
}
//需要过滤掉的URL
while(kflag && fitr.hasMoreTokens())
{
if(url.indexOf(fitr.nextToken())>0)
{
fflag=true;
break;
}
}
*/
//是需要保留的并且不是需要过滤掉的URL
if(kflag && !fflag)
{
word.set(url);
context.write(word,new Text(""));
}
}
}
}
public static class FilterUrlReduce extends Reducer<Text,Text,Text,Text>
{
public void reduce(Text key,Iterable<Text> values,Context context) throws
IOException,InterruptedException
{
context.write(key, new Text(""));
}
}
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
Configuration conf=new Configuration();
String filterUrl=new String();
String keepUrl=new String();
if(args.length!=2)
{
System.err.println("please input two args:<in> <out>");
System.exit(2);
}
//从配置文件获取参数,必须在作业创建的前面
conf.addResource("hadoop-bigdata.xml");
keepUrl=conf.get("KeepUrlString","");
filterUrl=conf.get("FilterUrlString","");
conf.set("FilterUrl", filterUrl);
conf.set("KeepUrl", keepUrl); //这句必须在参数设置语句的后面,否则参数获取失败
Job job=new Job(conf,"filter url");
job.setJarByClass(FilterUrl.class);
job.setMapperClass(FilterUrlMap.class);
job.setReducerClass(FilterUrlReduce.class);
//job.setNumReduceTasks(0); //如果不要的话会有多个小的文件
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));
System.exit(job.waitForCompletion(true)?0:1);
}
}

需要从配置文件获取的参数:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>
<property>
<!--C net keep url string -->
<name>KeepUrlString</name>
<value>anjueke.com|soufun.com</value>
</property>
<property>
<!--filter url-->
<name>FilterUrlString</name>
<value>.js|.jpg|.jpeg|.gif|.png|.css|error.html</value>
</property>
</configuration>

hadoop参数传递的更多相关文章

  1. hadoop参数传递实例

    要求: 根据输入文件中的信息,计算出某几个字符串出现的个数 输入文件格式:xxx,xxx,xxx,xx,x,x,xxx,x,x,xx,x,x,x,x,x,x,x, 输出文件:xx    10 xx   ...

  2. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  3. Ubuntu下eclipse开发hadoop应用程序环境配置

    第一步:下载eclipse-jee-kepler-SR2-linux-gtk-x86_64.tar.gz 注意:如果电脑是64位,就下载linux下的64位eclipse,不要下载32位的eclips ...

  4. Eclipse上运行第一个Hadoop实例 - WordCount(单词统计程序)

    需求 计算出文件中每个单词的频数.要求输出结果按照单词的字母顺序进行排序.每个单词和其频数占一行,单词和频数之间有间隔. 比如,输入两个文件,其一内容如下: hello world hello had ...

  5. Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)

    1    运行环境说明 1.1     硬软件环境 1.2     机器网络环境 2    :安装Eclipse并测试 2.1     内容 2.2     实现过程 2.2.1   2.2.2   ...

  6. Hadoop学习笔记2---配置详解

    配置系统是复杂软件必不可少的一部分,而Hadoop配置信息处理是学习Hadoop源代码的一个很好的起点.现在就从Hadoop的配置文件谈起. 一.Hadoop配置格式 Hadoop配置文件格式如下所示 ...

  7. hadoop streaming 编程

    概况 Hadoop Streaming 是一个工具, 代替编写Java的实现类,而利用可执行程序来完成map-reduce过程.一个最简单的程序 $HADOOP_HOME/bin/hadoop jar ...

  8. Nutch+Hadoop集群搭建

    转载自:http://www.open-open.com/lib/view/open1328670771405.html 1.Apache Nutch    Apache Nutch是一个用于网络搜索 ...

  9. Hadoop MapReduce开发最佳实践(上篇)

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. Axiom3D:Buffer漫谈

    在前面数据绑定基本流程,简单说了下,在Axiom中,数据从我们C#的托管环境到下面的OpenGL或是D3D的非托管环境,有个转化过程,相关实现我们可以从BufferBase看起.BufferBase与 ...

  2. Form 表单验证

    #!/usr/bin/env python # -*- coding:utf- -*- import tornado.ioloop import tornado.web import re class ...

  3. MyBatis打印输出SQL语句

    Hibernate是可以配置 show_sql 显示 自动生成的SQL 语句,用 format_sql 可以格式化SQL 语句,但如果用 mybatis 怎么实现这个功能呢?如果你搜索看一下,基本都是 ...

  4. CI框架 -- 核心文件 之 Model.php

    class CI_Model { /** * Class constructor * * @return void */ public function __construct() { log_mes ...

  5. 允许root远程登录Solaris

    注释掉:/etc/default/login文件中CONSOLE=/dev/console

  6. TensorFlow-tensorboard可视化

    运行了很多次出现错误,错误原因在于运行tensorboard时,需要退出python编辑

  7. linux nginx,php开机启动

    nginx开机启动 1.首先,在linux系统的/etc/init.d/目录下创建nginx文件 vim /etc/init.d/nginx 2.加入脚本 #!/bin/bash # nginx St ...

  8. UITextField禁用掉编辑之后...

    某些UITextField只为了摆数据,还有响应点击,为了避免频繁出现键盘,所以把UITextField的人机交互(userInteractionEnabled)给关闭了 此时,给UITextFiel ...

  9. 在Eclipse中查看Javadoc文档

    当我们需要查看JDK中类的API介绍时,通常采用的方式是直接查看离线文档或者某些网站提供的在线文档.如下图: 而本文档最终达到的效果是,不需要切换出eclipse,直接在eclipse中查看JDK的J ...

  10. QT QTransform与QMatrix 有啥区别?

    刚开始学习QT,我使用的是QT5.12进行开发,要不时地查阅QT的官方帮助文档~ 仔细阅读QT官方帮助QTransform类以及QMatrix类,发现两个类的作用描述一模一样(“The QTransf ...