Hadoop 编程初步认识
来源:互联网 发布:steam数据扫号 编辑:程序博客网 时间:2024/05/20 02:53
Mapper 类有四个参数,分别是输入键、输入值、输出键和输出值的类型。
Hadoop 提供一套“可优化网络序列化传输”的基本类型,在org.apache.hadoop.io 包里。
LongWritable 相当于Java Long 类型。
Text 相当于Java String类型。
Intwritable 相当于 Java Integer类型。
新API放在org.apache.hadoop.mapreduce包内。
Hadoop 提供一套“可优化网络序列化传输”的基本类型,在org.apache.hadoop.io 包里。
LongWritable 相当于Java Long 类型。
Text 相当于Java String类型。
Intwritable 相当于 Java Integer类型。
新API放在org.apache.hadoop.mapreduce包内。
旧API放在org.apache.hadoop.mapred包内。
package wordcount;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;import org.apache.hadoop.util.GenericOptionsParser;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 // 把Object 改成NullWritable 后,运行出错。不知为何。 ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); // Text.toString(); 把Text类型变为字符串类型。 while (itr.hasMoreTokens()) { // StringTokenizer 实现Enumeration接口 // 默认以空白字符分割。 word.set(itr.nextToken()); // Text.set(String); Text的一种构造方法 context.write(word, one); } } } /** * 1.reducer 接收各个mapper的输出。 * 2.按key值进行排序分组。 * 3.相同key值的键值对在一个集合内。( Reduce第二个参数为Iterable接口变量。) * 4.然后调用reduce( )函数。 * * @author ooc */ 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(); // IntWritable.get(); 返回 IntWritable的int值 } result.set(sum); // IntWritable.set(int) ; IntWritable的一种构造方法 context.write(key, result); // 写入结果。 } } public static void main(String[] args) throws Exception { /** String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length < 2) { System.err.println("Usage: wordcount <in> [<in>...] <out>"); System.exit(2); } **/Configuration conf = new Configuration(); Job job = new Job(conf, "word count"); // Job job=new Job(); // 用这条代替上面两条,eclipse卡死,但HDFS里还有输出 job.setJarByClass(WordCount.class); //设置类名,Hadoop以此寻找包含此类的jar文件并运行。 job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); // 设置map reduce的类名 job.setOutputKeyClass(Text.class); // 设置输出键的类型 job.setOutputValueClass(IntWritable.class); // 设置输出值的类型 /** for (int i = 0; i < otherArgs.length - 1; ++i) { FileInputFormat.addInputPath(job, new Path(otherArgs[i])); } FileOutputFormat.setOutputPath(job, new Path(otherArgs[otherArgs.length - 1])); **/ for (int i = 0; i < args.length - 1; ++i) { FileInputFormat.addInputPath(job, new Path(args[i])); //输入路径,可添加多个路径 } FileOutputFormat.setOutputPath(job, new Path(args[args.length - 1])); // 设置Reduce函数的输出路径。运行前路径应该不存在。 System.exit(job.waitForCompletion(false) ? 0 : 1); //waitForCompletion 方法提交作业并等待执行完成。 //waitForCompletion 参数为true时,作业把进度写入控制台。 // 任务成功返回true,则为exit(0); }}
Hadoop 命令
hadoop fs -put ~/file/file* /input
// 把本地磁盘~file/file*的文件导入HDFS里的input文件夹。
hadoop jar share/hadoopxxxx/xxxx.jar wordcount /input /output
// 运行jar中的wordcount 其中HDFS中的input为输入,output为输出。
Linxu命令
cat file1 file2 > file // 将file1与file2的文件合并输出在新建文件file中
cat file1 - > file // - 是标准输入,就是把file1和一会键盘输入的,输出在file中。 输入以Ctrl+Z结束。
0 0
- Hadoop 编程初步认识
- 初步认识Hadoop
- Hadoop的初步认识
- PHP编程初步认识
- Linux网络编程初步认识
- Hadoop云计算的初步认识
- Hadoop云计算的初步认识
- Hadoop云计算的初步认识
- Hadoop云计算的初步认识
- Hadoop之HDFS初步认识(一)
- 网络编程初步认识(一)
- 关于编程语言学习的初步认识
- 初步认识Unix/Linux系统编程
- 初步认识套接字编程(1)
- java网络编程的初步认识,服务器端编程
- UNIX环境编程初步认识——编程环境搭建
- 初步认识windows socket服务器端与客户端编程
- UNIX环境编程初步认识——进程
- javaweb学习总结(十)——HttpServletRequest对象(一)
- <网络编程培训之三> 实现TCP/UDP的简单Echo服务器
- hdu 1584蜘蛛牌(DFS)
- 每日一篇:关于斐波拉契数列的应用
- mfc完整的自动填表实例
- Hadoop 编程初步认识
- ios第一课 关于类的声明和实现
- postgresQL备份数据库shell
- 7、osg中响应键盘鼠标事件以及鼠标和键盘编码表
- Flume日志采集系统的安装和部署
- poj1611 The Suspects
- C++Primer学习:模板特例化
- 【docker】 windows 7 dockertoolbox 1.9 安装
- 无缝滚动原理与具体实现