设为首页 加入收藏

TOP

Java API操作hdfs踩坑实录
2019-03-27 12:17:25 】 浏览:100
Tags:Java API 操作 hdfs 实录
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hll19950830/article/details/79830507
使用Java API出现以下异常:org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x


原因:windows本地的用户名是Administrator 与hadoop的用户名不一致 导致没有写权限而被系统拒绝

解决方法:

(1)最简单粗暴的方法 可以修改hdfs下所有目录和文件的权限为777 如:hdfs dfs -chmod 777 /

但是这种方法不太安全 因此在生产环境下不可能这么设置 自己搭建集群学习时可以选择

(2)修改hadoop的配置文件:conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false

<property>
<name>dfs.permissions</name>
<value>false</value>
<description>
If "true", enable permission checking in HDFS.
If "false", permission checking is turned off,
but all other behavior is unchanged.
Switching from one parameter value to the other does not change the mode,
owner or group of files or directories.
</description>

</property>

然后重启hadoop进程(这种方法不一定管用)

(3)修改虚拟机参数:右击项目->Run As ->Run Configurations


这种方法简单 具体效果不作评价

(4)将windows当前用户修改为与hadoop用户一致(如root) 这种方法虽然可行 但是总感觉不太方便

(5)直接在代码中指定用户


这种方法效果不错

(6)在windows中添加key为HADOOP_USER_NAME的环境变量 值与hadoop用户保持一致修改完重启eclipse,不然可能不生效


个人最推荐最后一种方法 效果立竿见影


2.在使用java api操作hadoop时 上传文件没有问题 但是当下载数据的时候就抛出了一个空指针异常

代码如下:

// 下载文件
public void download() throws Exception
{
fs.copyToLocalFile(new Path("/README.txt"), new Path("C:/Users/Administrator/Desktop"));
fs.close();
}

解决方法:修改代码如下

// 下载文件
public void download() throws Exception
{
fs.copyToLocalFile(false, new Path("/README.txt"), new Path("C:/Users/Administrator/Desktop"), true);
fs.close();
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇sqoop   把 hdfs 和关系型数.. 下一篇hadoop:hdfs架构及原理

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目