1、创建工程、配置
参照文章使用idea使用远程虚拟机中的hadoop集群进行wordcount练习
练习代码:
package com.dtinone.hadooptest1.hsfsgetput;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFS_GET_PUT {
public static void main(String[] args) throws Exception {
//创建配置
Configuration conf = new Configuration();
//配置自己的hdfs地址
conf.set("fs.defaultFS", "hdfs://192.168.180.88:9000");
//配置副本数
conf.set("dfs.replication", "3");
FileSystem fs = FileSystem.get(conf);
/**
* 更改操作用户有两种方式:
*
* 1、直接设置运行换种的用户名为hadoop
*
* VM arguments ; -DHADOOP_USER_NAME=hadoop
*
* 2、在代码中进行声明
*
* System.setProperty("HADOOP_USER_NAME", "hadoop");
*/
System.setProperty("HADOOP_USER_NAME", "hadoop");
// 上传
fs.copyFromLocalFile(new Path("E:\\developApps\\hadoop-2.7.3\\testdata\\putfile\\put.txt"), new Path("/home/get.txt"));
/**
* .crc : 校验文件
*
* 每个块的元数据信息都只会记录合法数据的起始偏移量: qqq.txt blk_41838 : 0 - 1100byte
*
* 如果进行非法的数据追加。最终是能够下载合法数据。
* 由于你在数据的中间, 也就是说在 0 -1100 之间的范围进行了数据信息的更改。 造成了采用CRC算法计算出来校验值,和最初存入进HDFS的校验值
* 不一致。HDFS就认为当前这个文件被损坏了。
*/
// 下载
fs.copyToLocalFile(new Path("/home/get.txt"), new Path("E:\\developApps\\hadoop-2.7.3\\testdata\\getfile\\get1.txt"));
/**
* 上传和下载的API的底层封装其实就是 : FileUtil.copy(....)
*/
fs.close();
}
}
代码理解:1、System.setProperty(“HADOOP_USER_NAME”, “hadoop”);变更操作用户,如果你没有新建用户可以将hadoop改为root
2、fs.copyFromLocalFile(new Path(“E:\developApps\hadoop-2.7.3\testdata\putfile\put.txt”), new Path("/home/get.txt"));
第一个path是本地目录路径
第二个path是hdfs上的目录路径
3、fs.copyToLocalFile(new Path("/home/get.txt"), new Path(“E:\developApps\hadoop-2.7.3\testdata\getfile\get1.txt”));
第一个path是hdfs上的目录路径
第二个path是本地目录路径
注意:1、上传和下载的路径必须是存在的,不然会报错
2、hdfs上目录的权限一定要设置成可读写,不然会权限报错
图方便可以将目录权限改成777
[root@master data]# hadoop fs -chmod 777 /home/
验证结果:
上传成功
下载成功