hadoop与java交互

tech2025-12-31  13

目录

1、Windows系统下hadoop安装和配置2、新建maven工程3、java和Hadoop交互1、下载jdk,junit,hadoop相关的jar包jdk,junit修改版本号hadopp的jar包信息百度搜索复制 2、实现交互初步实现交互将hdfs里的文件内容在控制台输出将hdfs里的文件读写到另一个文件中 文件复制文件上传创建文件目录删除文件目录

1、Windows系统下hadoop安装和配置

用到的文件: hadoop-2.6.0-cdh5.14.2.tar.gz hadoopBin.rar 步骤: 1.在windows安装hadoop(解压hadoop-2.6.0-cdh5.14.2.tar.gz文件) 2.把hadoopBin.rar中内容解压到hadoop-2.6.0-cdh5.14.2中bin目录下(注意是内容在bin目录下,不是解压后的文件夹) 3.把hadoopBin下的hadoop.dll放到C:\windows\system32\目录下(需要用管理员身份运行才能移动或复制) 4.配置hadoop环境变量 HADOOP_HOME和Path变量中加入%HADOOP_HOME%\bin 和sbin(配置后需要重启电脑才能生效) 新建系统变量HADOOP_HOME: Path变量中加入%HADOOP_HOME%\bin 和sbin

2、新建maven工程

Local 展示一下setting.xml中设置的Local Repository

3、java和Hadoop交互

1、下载jdk,junit,hadoop相关的jar包

jdk,junit修改版本号

jdk,junit的相关信息原本就有,根据实际修改版本号即可,我用的是jdk1.8和junit4.12 在此提供jdk,junit的相关信息,方便复制

<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies>

hadopp的jar包信息百度搜索复制

hadoop的jar包信息怎么来?也就是这个中间的信息怎么来,不用死记硬背,百度搜索。 百度搜索maven,进maven repository:maven,搜索hadoop,按需要点进去,找到对应的版本号复制即可。 该网站比较难进,建议使用火狐浏览器,在此提供一下网址, 网址:https://mvnrepository.com/search?q=hadoop 我用的是2.6.0版本,在此演示一下。

复制一下文本框里的内容即可,nice极了~

在此提供一下hadoop所需jar包信息:

<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-core</artifactId> <version>1.2.0</version> </dependency>

右下角点击下载jar包,Enable Auto-Import是自动下载,随便点哪个都可以~

2、实现交互

初步实现交互

将hdfs里的文件内容在控制台输出

新建一个test,前面建的cn.kgc.kb09包下有一个App类,test要是它的次一级。 需求:将hadoop里的/test/java/hdfs-test/README.txt文件在java中读出来。

package cn.kgc.kb09.TestHdfs; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.net.URI; /** * @Description 演示hdfs流程 * 需求:将hadoop里的/test/java/hdfs-test/README.txt文件在java中读出来 */ public class test { public static void main(String[] args) throws Exception { Configuration conf=new Configuration(); conf.set("fs.defaultFS","hdfs://192.168.136.80:9000"); //获取文件系统 FileSystem fs = FileSystem.get(conf); //上述三步可以合并为: //FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); FSDataInputStream is = fs.open(new Path("/test/java/hdfs-test/README.txt")); //查看流 int tmp; while((tmp=is.read())!=-1){ //!=-1代表还没读取完毕 //打印时注意是print,不是println System.out.print((char)tmp); } is.close();//关闭流 } }

运行一下,会输出文件内容。 注意:import的都是org.apache.hadoop包下的,注意不能导错!!!

将hdfs里的文件读写到另一个文件中

需求:将hdfs目录下/test/java/hdfs-test/README.txt文件读取到目标文件test1中 方法1:

public class test { public static void main(String[] args) throws Exception { FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); FSDataInputStream is = fs.open(new Path("/test/java/hdfs-test/README.txt")); FileOutputStream fos=new FileOutputStream("test1"); int tmp; while((tmp=is.read())!=-1){ fos.write(tmp); } fos.close(); is.close(); } }

方法2:方法1是写死,读写别的文件还需要更改代码。可以将待读取的文件(/test/java/hdfs-test/README.txt)和写入的文件(test2)看成一个数组,下标分别是0和1,对应args[0]、args[1]。

public class test { public static void main(String[] args) throws Exception { FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); FSDataInputStream is = fs.open(new Path(args[0])); FileOutputStream fos=new FileOutputStream(args[1]); int tmp; while((tmp=is.read())!=-1){ fos.write(tmp); } fos.close(); is.close(); } }

用args[0]、args[1]待读取的文件路径和写入的文件路径,那怎么如何设置args[0]、args[1]的值呢?

方法1和方法2执行完毕写出文件如下图所示,可以直接点进去查看文档内容。

文件复制

需求:将hdfs中的文件/test/java/hdfs-test/README.txt复制到虚拟机中 思路:编写好java程序,打jar包,将jar包放到/opt/hadoop/share目录下 命令行输入执行jar包的命令:

hadoop jar 20200904testhdfs1.jar cn.kgc.kb09/TestHdfs/test /test/java/hdfs-test/README.txt /opt/hadoop/share

格式:hadoop jar main方法所在路径(下图) hdfs文件路径 复制的目标路径 执行成功:

public class test { public static void main(String[] args) throws Exception { FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); fs.copyToLocalFile(new Path(args[0]),new Path(args[1])); } }

文件上传

public class test { public static void main(String[] args) throws Exception { FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); fs.copyFromLocalFile(new Path(args[1]),new Path(args[0])); } }

创建文件目录

public class Test3 { public static void main(String[] args) throws Exception { FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); fs.mkdirs(new Path("/Hello/everyone/person.txt")); } }

删除文件目录

public class Test4 { public static void main(String[] args) throws Exception{ FileSystem fs=FileSystem.get(new URI("hdfs://192.168.136.80:9000"), new Configuration(),"root"); fs.deleteOnExit(new Path("/Hello/everyone/person.txt")); } }
最新回复(0)