maven依赖avro_在MapReduce中使用Avro
个人认为在MapReduce中使用Avro可以提升数据的处理性能,主要是以下几点:
向Job提供数据文件时可以使用Avro序列化过的二进制数据文件
在数据解析方面速度比较快
排序功能
Avro官网也提供了一个ColorCount这样的一个案例,演示使用Avro序列化过的二进制数据文件作为MapReduce的Job的输入数据,并且完成计算之后,输出结果也是Avro序列化后的数据文件,下面是这个案例源码及相关步骤:
1. 项目的pom文件:
org.apache.avro
avro
1.7.7
org.apache.avro
avro-mapred
1.7.7
hadoop2 //这是maven的分类器,用来进一步来确定jar包的类别的
org.apache.hadoop
hadoop-client
2.9.2
junit
junit
4.12
test
org.apache.maven.plugins
maven-jar-plugin
com.zpark.demo.avro.mapreduce.MapReduceColorCount
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
注意事项:
在引入依赖 avro-mapred 时一定要设置分类器属性
hadoop2,并且在使用不熟悉的依赖时,一定看下它的pom文件内容,看里面是不是定义了分类器。
2. Mapper和Reducer代码
public class MapReduceColorCount extends Configured implementsTool {public static class ColorCountMapper extendsMapper, NullWritable, Text, IntWritable>{
@Overridepublic void map(AvroKeykey, NullWritable value, Context context)throwsIOException, InterruptedException {
String color= (String)key.datum().get("favorite_color");if (color == null) {
color= "none";
}
context.write(new Text(color), new IntWritable(1));
}
}public static class ColorCountReducer extendsReducer, AvroValue>{
@Overridepublic void reduce(Text key, Iterablevalues,
Context context)throwsIOException, InterruptedException {int sum = 0;for(IntWritable value : values) {
sum+=value.get();
}
context.write(new AvroKey(key.toString()), new AvroValue(sum));
}
}public int run(String[] args) throwsException {if (args.length != 2) {
System.err.println("Usage: MapReduceColorCount ");return -1;
}//Job job = new Job(getConf());
Job job= Job.getInstance(getConf(), "word count");
job.setJarByClass(MapReduceColorCount.class);
job.setJobName("Color Count");
FileInputFormat.setInputPaths(job,new Path(args[0]));
FileOutputFormat.setOutputPath(job,new Path(args[1]));
job.setInputFormatClass(AvroKeyInputFormat.class);
job.setMapperClass(ColorCountMapper.class);
AvroJob.setInputKeySchema(job, ColorCountSchema.schema);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
job.setOutputFormatClass(AvroKeyValueOutputFormat.class);
job.setReducerClass(ColorCountReducer.class);
AvroJob.setOutputKeySchema(job, Schema.create(Schema.Type.STRING));
AvroJob.setOutputValueSchema(job, Schema.create(Schema.Type.INT));return (job.waitForCompletion(true) ? 0 : 1);
}public static void main(String[] args) throwsException {int res = ToolRunner.run(newMapReduceColorCount(), args);
System.exit(res);
}
}
3. Avro Schema
通过下面这个类来产成Avro序列时的Schema对象
public classColorCountSchema {public static Schema schema = newSchema.Parser().parse(newStringBuilder()
.append("{\"namespace\": \"com.zpark.demo.avro.mapreduce\",")
.append("\"type\": \"record\",")
.append("\"name\": \"User\",")
.append("\"fields\": [")
.append("{\"name\": \"name\", \"type\": \"string\"},")
.append("{\"name\": \"favorite_number\", \"type\": [\"int\", \"null\"]},")
.append("{\"name\": \"favorite_color\", \"type\": [\"string\", \"null\"]}")
.append("]")
.append("}").toString()
);
}
下面是对应的user.avsc文件的内容
{"namespace": "com.zpark.demo.avro.mapreduce","type": "record","name": "User","fields": [
{"name": "name", "type": "string"},
{"name": "favorite_number", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
4. 打包上传Jar包到Hadoop环境下运行
一定要注意,同时需要把依赖jar包avro-mapred-1.7.7-hadoop2.jar上传到 $HADOOP_HOME/share/hadoop/mapreduce目录下,并且一定上传分类器版本对应haddop2的jar,否则会报下面的错:
5.查看计算结果执行后会输出part-r-00000.avro这样的计算结果文件,可以通过 java -jar avro-tools-1.9.1.jar tojson part-r-00000.avro来查看,此外通过java -jar avro-tools-1.9.1.jar help可以查看avro-tools的详细命令列表
Version 1.9.1of Apache Avro
Copyright2010-2015The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (https://www.apache.org/).
----------------Available tools:
canonical Converts an Avro Schema to its canonical form
cat Extracts samplesfromfiles
compile Generates Java codeforthe given schema.
concat Concatenates avro files without re-compressing.
fingerprint Returns the fingerprintforthe schemas.
fragtojson Renders a binary-encoded Avro datum asJSON.
fromjson Reads JSON records and writes an Avro data file.
fromtext Imports a text file into an avro data file.
getmeta Printsoutthe metadata of an Avro data file.
getschema Printsoutschema of an Avro data file.
idl Generates a JSON schemafroman Avro IDL file
idl2schemata Extract JSON schemata of the typesfroman Avro IDL file
induce Induce schema/protocol from Java class/interfacevia reflection.
jsontofrag Renders a JSON-encoded Avro datum asbinary.
random Creates a file with randomly generated instances of a schema.
recodec Alters the codec of a data file.
repair Recovers datafroma corrupt Avro Data file
rpcprotocol Output the protocol of a RPC service
rpcreceive Opens an RPC Server and listensforone message.
rpcsend Sends a single RPC message.
tether Run a tethered mapreduce job.
tojson Dumps an Avro data fileasJSON, record per line or pretty.
totext Converts an Avro data file to a text file.
totrevni Converts an Avro data file to a Trevni file.
trevni_meta Dumps a Trevni file's metadata as JSON.
trevni_random Create a Trevni file filled with random instances of a schema.
trevni_tojson Dumps a Trevni fileas JSON.
maven依赖avro_在MapReduce中使用Avro相关推荐
- maven依赖本地非repository中的jar包-依赖jar包放在WEB-INF/lib等目录下的情况客户端编译出错的处理...
2019独角兽企业重金招聘Python工程师标准>>> maven依赖本地非repository中的jar包 http://www.cnblogs.com/piaolingxue/a ...
- maven依赖avro_如何使用maven进行avro序列化
maven导入avro: org.apache.avro avro 1.7.7 maven导入avro的构建插件: org.apache.avro avro-maven-plugin 1.7.7 ge ...
- 怎么排除maven依赖
文章目录 怎么排除maven依赖 1.下载maven helper插件 2.查看依赖冲突 3.解决冲突 怎么排除maven依赖 当我们项目中引入其他模块时,就会产生依赖冲突,发生冲突会产生类似的报错: ...
- httpclient的maven依赖
httpclient的maven依赖 在pom.xml中加入下面内容: <dependency><groupId>org.apache.httpcomponents</g ...
- maven依赖avro_Apache Avro使用入门指南
Avro有C, C++, C#, Java, PHP, Python, and Ruby等语言的实现,本文只简单介绍如何在Java中使用Avro进行数据的序列化(data serialization) ...
- 解决IDEA中导入新的maven依赖后Language Level自动重置问题
解决IDEA中导入新的maven依赖后Language Level自动重置问题 参考文章: (1)解决IDEA中导入新的maven依赖后Language Level自动重置问题 (2)https:// ...
- 解决IDEA中,maven依赖不自动补全的问题
解决IDEA中,maven依赖不自动补全的问题 参考文章: (1)解决IDEA中,maven依赖不自动补全的问题 (2)https://www.cnblogs.com/flypig666/p/1179 ...
- java继承eclipse_Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性
之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...
- dependency报红_解决IDEA中Maven依赖包导入失败报红问题(总结最有效8种解决方案)...
问题描述: 真的,说来话长,这应该是我花最多时间去解决关于Maven依赖包导入的问题,以前粘贴复制导入,自动下载成功了, 这次怎么搞,怎么让他自动下载都还是红红的一片, 花了大半天,各种尝试,只为搏得 ...
最新文章
- linux ext4增加大小,如何修改 ext4 文件系统的大小
- Tensorflow一些常用基本概念与函数(1)
- 体验最火的敏捷-SCRUM!(网络直播课程 免费)
- java反射模式_Java反射机制详解
- python 单例模式的四种实现方法
- centos7安装yum_centos7下yum方式安装jenkins
- electron ajax路径,electron 打包用file协议的ajax请求路径问题
- python476集免费教材_476. 数字的补数 | python|python爬虫|python入门|python教程
- java 接口是抽象类吗_我是如何理解Java抽象类和接口的
- Mac中将 WEBP 图片转成 JPG、PNG 格式的 2 种方法
- 除了字节,腾讯也来“抢”阿里的这门生意
- 假设某台台式计算机的内存储器容量为128,假设某台计算机的内存储器容量为128MB,硬盘容量为10GB,硬盘的容量是内存容量的多少倍?...
- Word里的数学符号在哪里
- Excel如何查找两列数据不同项
- excel取整数的函数_EXCEL的知识考点
- 计算机内存与外存的区别及使用配合(内存外存区别与搭配;快速缓存;计算机总线结构;计算机程序内存分布(栈、堆、全局/静态、数据区、代码段))
- 蚂蚁金服杨军:蚂蚁数据分析平台的演进及数据分析方法的应用
- 电路设计_自恢复保险丝参数说明
- 「数据运营」理解DataOps运营
- python sort给字母排序_python sort、sorted高级排序技巧
热门文章
- 启用计算机浏览器摄像头,如何启用浏览器进行摄像头访问?
- php 测试数据整数,PHP中将字符串转化为整数(int) intval() printf() 性能测试
- js平滑滚动到顶部,底部,指定地方 animate()
- InvocationTargetException 浅析
- chkconfig命令及的使用 与linux的七个运行级别
- 尝试使用iReport4.7(基于Ubuntu Desktop 12.04 LTS)
- JSON.parse()函数处理json格式字符串方法
- 怎么做c语言的子程序,哪位师傅知道51单片机怎样编写子程序?C语言的。在主程序里调...
- Ogre1.7的地形、天空与雾
- java 异常总结_Java异常的十大问题总结