0


hadoop5.1和5.2

文章目录

hadoop第五章

!(*-*)! 关于下面windows要不要配置hadoop环境

  1. 此时我的window下是没有hadoop环境的

在这里插入图片描述

  1. 只有从集群下载文件到windows时报错,没有设置hadoop环境,需要配置hadoop环境

在这里插入图片描述

5.1 筛选日志文件生成序列化文件

5.1.1、设置MapReduce输入格式

  1. job.setInputFotmatClass(TextInputFormat.class)

5.1.2、设置MapReduce输出格式

  1. job.setOutputFormatClass(SequenceFileOutputFormat.class);

5.1.3、任务实现 筛选日志文件并生成序列化文件(完整代码)

  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.input.TextInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;importorg.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;importorg.apache.hadoop.util.GenericOptionsParser;importjava.io.IOException;publicclassSelectData{publicstaticclassMyMapextendsMapper<Object,Text,Text,Text>{publicvoidmap(Object key,Text value,Context context)throwsIOException,InterruptedException{String line = value.toString();String arr[]= line.split(",");if(arr[4].contains("2021/1")|| arr[4].contains("2021/2")){
  2. context.write(newText(arr[2]),newText(arr[4].substring(0,9)));}}}publicstaticvoidmain(String[] args)throwsException{Configuration conf =newConfiguration();String[] otherArgs =newGenericOptionsParser(conf, args).getRemainingArgs();if(otherArgs.length <2){System.err.println("必须输入读取文件路径和输出路径");System.exit(2);}Job job =Job.getInstance(conf,"Select Data");
  3. job.setJarByClass(SelectData.class);
  4. job.setMapperClass(MyMap.class);
  5. job.setOutputKeyClass(Text.class);
  6. job.setOutputValueClass(Text.class);// 设置输入格式
  7. job.setInputFormatClass(TextInputFormat.class);// 设置输出格式
  8. job.setOutputFormatClass(SequenceFileOutputFormat.class);// 设置Reducer任务数为0
  9. job.setNumReduceTasks(0);for(int i =0; i < otherArgs.length -1;++i){FileInputFormat.addInputPath(job,newPath(otherArgs[i]));}FileOutputFormat.setOutputPath(job,newPath(otherArgs[otherArgs.length -1]));System.exit(job.waitForCompletion(true)?0:1);}}
  1. pom.xml文件配置 !!!!!!!!不要全复制,复制依赖就行了
  1. <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>hadoop5.2</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.1.4</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.1.4</version></dependency></dependencies></project>
  1. 使用maven进行打包,打包完成在target文件夹下生产jar

打包

  1. 上传jar包到master节点下的/opt/jars/Hadoop文件夹下

上传jar包

  1. 运行jar
  1. hadoop jar /opt/jars/Hadoop/hadoop5.1-SelectData.jar SelectData
  2. /Tipdm/Hadoop/MapReduce/raceData.csv
  3. /Tipdm/Hadoop/MapReduce/Result/Select_Data
  1. 结果

运行结果
在这里插入图片描述
在这里插入图片描述

5.2 使用Hadoop Java API 读取序列化文件(完整代码)

列举子目录

  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclass view_folders {publicstaticvoidmain(String[] args)throwsException{Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);// 声明文件路径Path path =newPath("/user/root");// 获取文件列表FileStatus[] fileStatuses = fs.listStatus(path);// 遍历文件列表for(FileStatus file : fileStatuses){// 判断是否是文件夹if(file.isDirectory()){System.out.println(file.getPath().toString());}}// 关闭文件系统
  3. fs.close();}}
  1. 结果

在这里插入图片描述

列举文件

  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileStatus;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclass view_files {publicstaticvoidmain(String[] args)throwsException{Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);// 声明文件路径Path path =newPath("/user/root");// 获取文件列表FileStatus[] fileStatuses = fs.listStatus(path);// 遍历文件列表for(FileStatus file : fileStatuses){// 判断是否是文件夹if(file.isFile()){System.out.println(file.getPath().toString());}}// 关闭文件系统
  3. fs.close();}}
  1. 结果

在这里插入图片描述

创建目录

  1. 涉及权限问题
  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclass mkdir_folders {publicstaticvoidmain(String[] args)throwsException{//获取配置Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);//声明创建的目录Path path =newPath("/user/root/view_log");//调用mkdirs函数创建目录
  3. fs.mkdirs(path);//关闭文件系统
  4. fs.close();}}
  1. 直接运行报错,提示用户没有权限

在这里插入图片描述

  1. 简单方法:返回master节点下通过hdfs命令修改目录权限
  1. hadoop fs -chmod 777 /user/root
  1. 然后再执行代码

在这里插入图片描述

  1. 执行成功,查看目录

在这里插入图片描述

删除文件

  1. 先上传文件至对应文件夹

在这里插入图片描述
在这里插入图片描述

  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclass delete_files {publicstaticvoidmain(String[] args)throwsException{//获取配置Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);//声明文件路径Path path =newPath("/user/root/raceData.csv");//删除文件
  3. fs.delete(path,true);//关闭文件系统
  4. fs.close();}}
  1. 结果

在这里插入图片描述在这里插入图片描述

上传文件至HDFS

  1. !!!!!!!!!!修改自己本地文件的位置
  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclass put_files {publicstaticvoidmain(String[] args)throwsException{// 获取配置Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");// 获取文件系统FileSystem fs =FileSystem.get(conf);// 声明源文件路径和目标路径Path fromPath =newPath("C:\\javaproject\\NO.5\\raceData.csv");Path toPath =newPath("/user/root/view_log");// 调用copyFromLocalFile方法上传文件
  3. fs.copyFromLocalFile(fromPath, toPath);// 关闭文件系统
  4. fs.close();}}
  1. 结果

在这里插入图片描述
在这里插入图片描述

下载文件到本地

  1. 下载位置修改成自己本地的目录
  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;publicclass load_files {publicstaticvoidmain(String[] args)throwsException{// 获取配置Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");// 获取文件系统FileSystem fs =FileSystem.get(conf);// 声明源文件路径和目标路径Path fromPath =newPath("/user/root/view_log/raceData.csv");Path toPath =newPath("C:/");// 调用copyToLocalFile方法下载文件到本地
  3. fs.copyToLocalFile(false, fromPath, toPath,true);// 关闭文件系统
  4. fs.close();}}
  1. 结果

在这里插入图片描述
在这里插入图片描述

读取文件内容

  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.BufferedReader;importjava.io.InputStreamReader;publicclass read_files {publicstaticvoidmain(String[] args)throwsException{//获取配置Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);//声明查看的路径Path path =newPath("/user/root/view_log/raceData.csv");//获取指定文件的数据字节流FSDataInputStream is = fs.open(path);//读取文件内容并打印出来BufferedReader br =newBufferedReader(newInputStreamReader(is,"utf-8"));String line ="";while((line = br.readLine())!=null){System.out.println(line);}//关闭数据字节流
  3. br.close();
  4. is.close();//关闭文件系统
  5. fs.close();}}
  1. 结果

在这里插入图片描述

写入数据

  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FSDataInputStream;importorg.apache.hadoop.fs.FSDataOutputStream;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;publicclass write_files {publicstaticvoidmain(String[] args)throwsException{//获取配置Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);//声明查看的路径Path path =newPath("/user/root/view_log/raceData.csv");//创建新文件Path newPath =newPath("/user/root/view_log/new_raceData.csv");
  3. fs.delete(newPath,true);FSDataOutputStream os = fs.create(newPath);//获取指定文件的数据字节流FSDataInputStream is = fs.open(path);//读取文件内容并写入到新文件BufferedReader br =newBufferedReader(newInputStreamReader(is,"utf-8"));BufferedWriter bw =newBufferedWriter(newOutputStreamWriter(os,"utf-8"));String line ="";while((line = br.readLine())!=null){
  4. bw.write(line);
  5. bw.newLine();}//关闭数据字节流
  6. bw.close();
  7. os.close();
  8. br.close();
  9. is.close();//关闭文件系统
  10. fs.close();}}
  1. 结果

在这里插入图片描述
在这里插入图片描述

5.2.4读取序列化文件

  1. 记得修改目录
  1. importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.FileSystem;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.SequenceFile;importorg.apache.hadoop.io.Text;importjava.io.BufferedWriter;importjava.io.FileOutputStream;importjava.io.OutputStreamWriter;publicclass task5_2 {publicstaticvoidmain(String[] args)throwsException{Configuration conf =newConfiguration();
  2. conf.set("fs.defaultFS","master:8020");//获取文件系统FileSystem fs =FileSystem.get(conf);//获取SequenceFile.Reader对象SequenceFile.Reader reader =newSequenceFile.Reader(fs,newPath("/Tipdm/Hadoop/MapReduce/Result/Select_Data/part-m-00000"),
  3. conf);//获取序列化文件中使用的键值类型Text key =newText();Text value =newText();//读取的数据写入janfeb.txt文件BufferedWriter out =newBufferedWriter(newOutputStreamWriter(newFileOutputStream("C:\\javaproject\\NO.5\\task5_3.txt",true)));while(reader.next(key, value)){
  4. out.write(key.toString()+"\t"+ value.toString()+"\r\n");}
  5. out.close();
  6. reader.close();}}
  1. 结果

在这里插入图片描述

  1. 查看本地文件夹

在这里插入图片描述在这里插入图片描述

  1. 至此5.15.2结束,如有问题,欢迎评论
标签: hadoop

本文转载自: https://blog.csdn.net/2401_86523075/article/details/144142545
版权归原作者 倒霉男孩 所有, 如有侵权,请联系我们删除。

“hadoop5.1和5.2”的评论:

还没有评论