IDEA java整合hadoop
一:配置Windows环境变量
1:首先在本机创建一个文件夹,路径中不能存在中文。
将winutils.zip 和 hadoop-2.8.1.tar.gz 两个压缩包放入,并解压
网盘地址:链接: https://pan.baidu.com/s/1g5RGakvvZvHX2QuYytSnPQ 提取码: p56j
1.1:将winutils\hadoop-2.8.1 下的所有文件复制到 hadoop-2.8.1\bin 下
1.2:将hadoop-2.8.1\bin 下的hadoop.dll 复制到 C:\Windows\System32
1.3:修改系统环境变量,HADOOP_HOME 的值为创建文件夹下hadoop的绝对路径,HADOOP_USER_NAME的值则为 root
1.4:进入 C:\Windows\System32\drivers\etc ,编辑
在底部添加下列三个ip及其对应名称 ,ip需与虚拟机ip一致
192.168.13.130 hdp1 192.168.13.131 hdp2 192.168.13.132 hdp3
保存并退出,重启电脑。
二:启动IDEA
创建一个项目,在pom.xml加上依赖,下载依赖
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.8.1</version> </dependency>
package day03; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org.apache.hadoop.io.IOUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class HDFSTest { public static void main(String[] args) throws IOException { // 创建配置对象 Configuration conf = new Configuration(); // 从/opt/hadoop-2.8.1/etc/hadoop/core-site.xml文件中复制过来 conf.set("fs.defaultFS","hdfs://hdp1:8020"); conf.set("dfs.client.block.write.replace-datanode-on-failure.policy","NEVER"); conf.set("dfs.client.block.write.replace-datanode-on-failure.enable","true"); //创建操作对象 FileSystem fs = FileSystem.get(conf); // 创建文件夹 /* boolean mkdirs = fs.mkdirs(new Path("/day03/hdfs/javaapi")); System.out.println(mkdirs);*/ // 查看目录 /*RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true); while (files.hasNext()){ LocatedFileStatus next = files.next(); // 获取绝对路径 System.out.println(next.getPath());; }*/ // 上传 (本地文件的路径, hdfs文件的路径) /* fs.copyFromLocalFile(new Path("data/day03/input/words.txt"), new Path("/day03/hdfs/javaapi")); System.out.println("上传成功");*/ // 查看内容 一般hdfs的路径都省略 hdfs://hdp1:8020 FSDataInputStream fis = fs.open(new Path("/day03/hdfs/javaapi/words2.txt")); //输出 (输入流,输出流,字节数组大小,是否关流) IOUtils.copyBytes(fis, System.out , 1024, true); // 下载 // 方法一: (hdfs上的路径, 本地的路径) /* fs.copyToLocalFile(new Path("/day03/hdfs/javaapi/words.txt"), new Path("data/day03/output1")); System.out.println("下载完毕");*/ // 方法二: /*//读取文件 FSDataInputStream fis = fs.open(new Path("/day03/hdfs/javaapi/words.txt")); //创建文件输出流 FileOutputStream fos = new FileOutputStream(new File("data/day03/output2/words.txt")); //复制 IOUtils.copyBytes(fis,fos,1024,true);*/ // 复制 /* //读取文件 FSDataInputStream fis = fs.open(new Path("/day03/hdfs/javaapi/words.txt")); //创建新的文件 FSDataOutputStream fos = fs.create(new Path("/day03/hdfs/javaapi/words2.txt")); //复制 IOUtils.copyBytes(fis,fos,1024,true);*/ // 移动重命名 // boolean rename = fs.rename(new Path("/day03/hdfs/javaapi/words.txt"), new Path("/day03/hdfs/abc.txt")); // System.out.println(rename); // 删除 递归删除 /* boolean delete = fs.delete(new Path("/day03/hdfs/abc.txt"), true); System.out.println(delete);*/ // 修改权限 // fs.setOwner(new Path("/day03/hdfs/javaapi/words2.txt"), "root", "root"); // 追加 // 方式一: /*FSDataOutputStream fos = fs.append(new Path("/day03/hdfs/javaapi/words2.txt")); FileInputStream fis = new FileInputStream(new File("data/day03/input/123.txt")); IOUtils.copyBytes(fis,fos,1024,true);*/ //方式二 FSDataOutputStream fos = fs.append(new Path("/day03/hdfs/javaapi/words2.txt")); fos.write("\nasd1112434".getBytes()); fos.flush(); fos.close(); } }
我有一杯酒,足以慰风尘。