Hadoop MR编程
Hadoop开发job需要定一个Map/Reduce/Job(启动MR job,并传入参数信息),以下代码示例实现的功能:
1)将一个用逗号分割的文件,替换为“|”分割的文件;
2)对小文件合并,将文件合并为reduceNum个文件。
DataMap.java
- package com.dx.fpd_load;
- import org.apache.hadoop.io.LongWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapreduce.Mapper;
- import java.io.IOException;
- public class DataMap extends Mapper<LongWritable, Text, Text, Text> {
- private final Text key = new Text();
- @Override
- protected void map(LongWritable longWritable, Text value, Context context) throws IOException, InterruptedException {
- // 如果数据为空,则不进行处理,跳出map输入
- if (value.getLength() == 0) {
- return;
- }
- String newValue = value.toString().replace(",", "|") + "|NULL|NULL";
- String[] newValues = newValue.split("\\|");
- // 输入的文件路径
- String filePath = context.getInputSplit().toString().toUpperCase();
- // 如果路径包含了fpd_bak才进行处理否则不处理
- if (filePath.contains("fpd_bak".toUpperCase()) && newValues.length > 10) {
- key.set(newValues[6]); //objid
- context.write(key, new Text(newValue));
- }
- }
- }
DataReducer.java
- package com.dx.fpd_load;
- import org.apache.hadoop.io.NullWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapreduce.Reducer;
- import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
- import java.io.IOException;
- public class DataReducer extends Reducer<Text, Text, NullWritable, Text> {
- public MultipleOutputs multipleOutputs;
- public final Text key = new Text();
- @Override
- protected void setup(Context context) throws IOException, InterruptedException {
- multipleOutputs = new MultipleOutputs(context);
- }
- @Override
- protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
- for (Text text : values) {
- String data = text.toString();
- String[] p_days = context.getConfiguration().getStrings("p_day");
- String[] p_cities = context.getConfiguration().getStrings("p_city");
- String p_day = "p_day";
- if (p_days != null) {
- p_day = p_days[0];
- }
- String p_city = "p_city";
- if (p_cities != null) {
- p_city = p_cities[0];
- }
- multipleOutputs.write("fpdload", NullWritable.get(), new Text(data), "/thetenet/my_hive_db/fpd_new/p_day=" + p_day + "/p_city=" + p_city + "/fpd_data");
- }
- }
- @Override
- protected void cleanup(Context context) throws IOException, InterruptedException {
- multipleOutputs.close();
- }
- }
DataJob.java
- package com.dx.fpd_load;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.Path;
- import org.apache.hadoop.io.NullWritable;
- import org.apache.hadoop.io.Text;
- import org.apache.hadoop.mapreduce.Job;
- import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
- import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
- import org.apache.hadoop.mapreduce.lib.output.MultipleOutputs;
- import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
- import org.apache.hadoop.util.GenericOptionsParser;
- public class FingerLib_Load_DataJob {
- public static void main(String[] args) throws Exception {
- Configuration conf = new Configuration();
- String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
- String p_city = otherArgs[0];
- String p_day = otherArgs[1];
- String reducerNum = otherArgs[2];
- String inputPath = otherArgs[3];
- String outputPath = otherArgs[4];
- if (p_day == null) {
- throw new Exception("p_day is null");
- }
- conf.set("p_day", p_day);
- if (p_city == null) {
- throw new Exception("p_city is null");
- }
- conf.set("p_city", p_city);
- Job job = Job.getInstance(conf);
- job.setJobName("LoadDataIntoFPD_p_city" + p_city + "_p_day_" + p_day);
- job.setJarByClass(DataJob.class);
- job.setMapperClass(DataMap.class);
- job.setReducerClass(DataReducer.class);
- job.setMapOutputKeyClass(Text.class);
- job.setMapOutputValueClass(Text.class);
- job.setOutputKeyClass(NullWritable.class);
- job.setOutputValueClass(Text.class);
- job.setNumReduceTasks(Integer.parseInt(reducerNum));
- MultipleOutputs.addNamedOutput(job, "fpdload", TextOutputFormat.class, NullWritable.class, Text.class);
- FileInputFormat.addInputPath(job, new Path(inputPath));
- FileOutputFormat.setOutputPath(job, new Path(outputPath));
- System.exit(job.waitForCompletion(true) ? 0 : 1);
- }
- }
调用脚本:
- #!/usr/bin/env bash
- source /app/mylinux/login.sh
- #./submit_fpdload.sh
- DAY=$
- CITY=$
- REDUCER_NUMBER=$
- JAR="/app/mylinux/service/dx-1.0-SNAPSHOT.jar"
- MAIN_CLASS="com.dx.fpd_load.DataJob"
- INPUT_PATH="/thetenet/my_hive_db/fpd_bak/p_day=$DAY/p_city=$CITY/"
- OUT_DIR="/thetenet/my_hive_db/fpd_load_out/"
- hadoop fs -rm -r /thetenet/my_hive_db/fpd_new/p_day=$DAY/p_city=$CITY/
- hadoop fs -rm -r $OUT_DIR
- time yarn jar $JAR $MAIN_CLASS $CITY $DAY $REDUCER_NUMBER $INPUT_PATH $OUT_DIR
- #beeline -e "
- #alter table my_hive_db.fpd_new add if not exists partition(p_day=$DAY,p_city=$CITY)
- #location '/thetenet/my_hive_db/fpd_new/p_day=$DAY/p_city=$CITY/';"
- echo "Complete..."
Hadoop MR编程的更多相关文章
- Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)
不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...
- hadoop streaming 编程
概况 Hadoop Streaming 是一个工具, 代替编写Java的实现类,而利用可执行程序来完成map-reduce过程.一个最简单的程序 $HADOOP_HOME/bin/hadoop jar ...
- 【Hadoop】Hadoop MR 如何实现倒排索引算法?
1.概念.方案 2.代码示例 InverseIndexOne package com.ares.hadoop.mr.inverseindex; import java.io.IOException; ...
- 【Hadoop】Hadoop MR 自定义分组 Partition机制
1.概念 2.Hadoop默认分组机制--所有的Key分到一个组,一个Reduce任务处理 3.代码示例 FlowBean package com.ares.hadoop.mr.flowgroup; ...
- 【Hadoop】Hadoop MR 自定义排序
1.概念 2.代码示例 FlowSort package com.ares.hadoop.mr.flowsort; import java.io.IOException; import org.apa ...
- 【Hadoop】Hadoop MR异常处理
1.代码示例 package com.ares.hadoop.mr.flowsort; import java.io.IOException; import org.apache.hadoop.con ...
- 【Hadoop】Hadoop MR 自定义序列化类
1.基本概念 2.Mapper代码 package com.ares.hadoop.mr.flowsum; import java.io.IOException; import org.apache. ...
- 【Hadoop】Hadoop mr wordcount基础
1.基本概念 2.Mapper package com.ares.hadoop.mr.wordcount; import java.io.IOException; import java.util.S ...
- 《Hadoop高级编程》之为Hadoop实现构建企业级安全解决方案
本章内容提要 ● 理解企业级应用的安全顾虑 ● 理解Hadoop尚未为企业级应用提供的安全机制 ● 考察用于构建企业级安全解决方案的方法 第10章讨论了Hadoop安全性以及Hado ...
随机推荐
- ConcurrentHashMap源码解析(JDK1.8)
package java.util.concurrent; import java.io.ObjectStreamField; import java.io.Serializable; import ...
- Angular组件——父子组件通讯
Angular组件间通讯 组件树,1号是根组件AppComponent. 组件之间松耦合,组件之间知道的越少越好. 组件4里面点击按钮,触发组件5的初始化逻辑. 传统做法:在按钮4的点击事件里调用组件 ...
- Python : Module
在Python中,一个.py文件代表一个Module.在Module中可以是任何的符合Python文件格式的Python脚本.了解Module导入机制大有用处. 1 Module 组成 1.1 Mod ...
- gif文件解析
详细资料:http://blog.csdn.net/wzy198852/article/details/17266507 MD5:98206F88B84CCC399C840C8EEC902CCF GI ...
- Maven-06: 插件的内置绑定
Maven的生命周期与插件相互绑定,用以完成实际的构建任务.具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务.例如项目编译这一任务,它对应default生命周期的compile ...
- 关于css选择器中有小数点的标签获取
需求说明 因为项目中章节配置的时候有小数点,1,1.1,1.2,1.11的标题,这个时候每一行标题的id,class设置成标题号是独一无二的标记.但是,直接用js获取是获取不到的,例如$('#3.22 ...
- PHP Session 常用的函数
我们在前面的文章里面讲到session的原理和最佳实践,感到意犹未尽.现在再来聊下PHP Session用到的几个相关的函数. session_start() session_start() 会创建新 ...
- Java实现单向链表基本功能
一.前言 最近在回顾数据结构与算法,有部分的算法题用到了栈的思想,说起栈又不得不说链表了.数组和链表都是线性存储结构的基础,栈和队列都是线性存储结构的应用- 本文主要讲解单链表的基础知识点,做一个简单 ...
- Java基础笔记(1)----语言基础
变量 变量:是内存中的一块存储空间,是存储数据的基本单元. 使用:先声明,后赋值,在使用. 声明:数据类型 + 变量名 = 值.(例:int a = 5:) 数据类型 分类:如图: 详解: Strin ...
- 云计算之路-阿里云上-容器难容:容器服务故障以及自建 docker swarm 集群故障
3月21日,由于使用阿里云服务器自建 docker swarm 集群的不稳定,我们将自建 docker swarm 集群上的所有应用切换阿里云容器服务 swarm 版(非swarm mode). 3月 ...