1 / 19

Hadoop 使用

Hadoop 使用. 聂志 niezhixuesen@163.com. outline. 云计算概念 Hadoop 使用 Mapreduce 详解. 1 云计算概念. 概念 狭义云计算是指 IT 基础设施的交付和使用模式,通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。 广义云计算是指服务的交付和使用模式,通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是 IT 和软件、互联网相关的,也可以是任意其他的服务。 三层模型 Saas : more Paas : hadoop Iaas : openstack.

amal-conway
Download Presentation

Hadoop 使用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hadoop使用 聂志 niezhixuesen@163.com

  2. outline 云计算概念 Hadoop使用 Mapreduce详解

  3. 1云计算概念 概念 狭义云计算是指IT基础设施的交付和使用模式,通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。 广义云计算是指服务的交付和使用模式,通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务。 三层模型 Saas:more Paas:hadoop Iaas: openstack

  4. google vs hadoop

  5. 2Hadoop使用 编写map和reduce函数 运行测试 命令行运行 eclipse运行 查看结果

  6. map 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 ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasMoreTokens()) { word.set(itr.nextToken()); context.write(word, one); //设置 key value } } } 说明: map的输出key 、value和reduce的输入key、value要一致,见上面红色部分

  7. reduce 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(); //聚集操作 } result.set(sum); context.write(key, result); } } 说明: map的输出key 、value和reduce的输入key、value要一致,见上面红色部分

  8. Job 配置 public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); if (otherArgs.length != 2) { System.err.println("Usage: wordcount <in> <out>"); System.exit(2); } Job job = new Job(conf, "word count"); //job name job.setJarByClass(WordCount.class); job.setMapperClass(TokenizerMapper.class); job.setCombinerClass(IntSumReducer.class); job.setReducerClass(IntSumReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(otherArgs[0])); //file input FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); //file output System.exit(job.waitForCompletion(true) ? 0 : 1); }

  9. 2Hadoop使用 编写map和reduce函数 运行测试 命令行运行 eclipse运行 查看结果

  10. 命令行运行 • 打包mapreduce函数,wordcount.jar 设类名WordCount • 进入hadoop安装目录 • $bin/hadoop jar 本地jar包目录类名 hdfs输入文件目录 hdfs输入文件目录 • 例子: • $bin/hadoop jar /home/deke/wordcount.jar WordCount hdfs输入文件目录 hdfs输入文件目录

  11. 2Hadoop使用 编写map和reduce函数 运行测试 命令行运行 eclipse运行 查看结果

  12. Eclipse 配置 • 1. 下载 eclipse • 2. 将 hadoop 文件夹下的 contrib/eclipse-plugin/hadoop-*-eclipse- plugin.jar 拷贝到 eclipse 文件夹下的/plugins 文件夹里 • 3. 启动 Eclipse • 4. 设置 Hadoop 安装文件夹的路径 Window->Preferences ,见下一页

  13. Eclipse 配置

  14. 2Hadoop使用 编写map和reduce函数 运行测试 命令行运行 eclipse运行 查看结果 http://10.77.110.161:50030/jobtracker.jsp http://10.77.110.161:50070/dfshealth.jsp

  15. 3Mapreduce详解 程序流程例子1

  16. 3Mapreduce详解 程序流程例子2

  17. 直接访问hdfs文件接口 1程序 如果我们只需要访问文件系统,而不需要对文件中的数据进行处理, 那么只需要使用下面的访问 hdfs的接口就行了。 而不需要编写mapreduce函数 String dir = "/user/nz/btc/pvint"; //the input directory Configuration conf = new Configuration(); //get conf FileSystem fs = FileSystem.get(conf); Path path = new Path(dir); //get the directory FileStatus stat = fs.getFileStatus(path); //get directory FileStatus[] filelist = fs.listStatus(path); //get file list for(FileStatus list: filelist) { String filename = list.getPath().getName(); System.out.println("result:"+filename); }

  18. 直接访问hdfs文件接口 2 命令行 上传文件到hdfs: bin/hadoop fs -copyFromLocal 本地文件/目录 hdfs文件目录 下载到本地: bin/hadoop fs -copyToLocal hdfs文件目录本地文件/目录

  19. 参考文献 • JefferyDean, Sanjay Ghemawat.: MapReduce: Simplified data processing on large clusters. OSDI, San Francisco, CA, 2004. • S. Ghemawat, H. Gobioff, and S.-T. Leung, The Google File System,in Proceedings of the 19th ACM Symposium on Operating System Principles, 2003. • http://hadoop.apache.org/

More Related