JAVA连接hdfs 操作
//完整的一个连接hdfs 和操作步骤
@Test
public void test06() throws URISyntaxException, IOException, InterruptedException {
//创建连接
//获取主节点
URI uri = new URI("hdfs://hadoop100:9000");
Configuration entries = new Configuration();
//连接的地址 参数 用户
FileSystem root = FileSystem.get(uri, entries, "root");
//操作hdfs
//create 创建一个文件 Path 指定路径 String 类型
root.create(new Path("/zlf.txt"));
//关流
root.close();
}
通过远程连接工具操作查看
hdfs dfs -ls /存放的路径
上传一个文件到hdfs
//这是单元测试的先行方法
@Before
public void befores() throws URISyntaxException, IOException, InterruptedException {
//创建连接
cfg = new Configuration();
fs = FileSystem.get(new URI("hdfs://hadoop100:9000"), cfg, "root");
}
//这是单元测试的结束方法
@After
public void afters() throws IOException {
//关流
fs.close();
}
之后操作就可以不用重复创建连接和关闭流
//上传文件
@Test
public void test07() throws IOException {
//读取文件 输入流
InputStream inputStream = new FileInputStream(new File("C:\\2.txt"));
//写入文件 输出流
FSDataOutputStream fsDataOutputStream = fs.create(new Path("zzz.txt"));
//流复制
IOUtils.copyBytes(inputStream, fsDataOutputStream, 2096);
//关流
fsDataOutputStream.close();
inputStream.close();
}
从hdfs 下载一个文件到windows
//下载文件
@Test
public void test08() throws IOException {
//读取文件 输入流
InputStream inputStream = fs.open(new Path("/zlf.txt"));
//写入文件 输出流
FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Temp\\zlf.txt"));
//流复制
IOUtils.copyBytes(inputStream, fileOutputStream, 2096);
//关流
fileOutputStream.close();
inputStream.close();
}
Exception in thread “main” org.apache.hadoop.security.AccessControlException: Permission denied: user=ZLF, access=WRITE, inode="/test.txt":root:supergroup:drwxr-xr-x
权限不够问题
mian方法的接收参数
解决方法一
给当前用户改成root用户
打开后找到VM options 添加root用户
临时修改成root用户
-DHADOOP USER NAME=root
解决方法二
添加
System.setProperty(“HADOOP_USER_NAME”,“root”);
解决方法三
创建本地用户的同时直接指定文件的用户
在创建连接的时候就设置root用户
解决方法四
直接修改分布式存储系统的用户权限允许非root用户进行操作
dfs.permissions
false
上传成功查看hdfs中的文件权限
修改成功