下述步骤适用于 Windows 系统,其他系统可忽略。
在 Windows 系统直接运行 Hadoop 相关代码,会提示缺少 和 文件:
原因:通过代码访问 Hadoop 集群,本地开发环境相当于 Hadoop 客户端,需要有 Hadoop 相关软件才可正常运行。
配置步骤:
1)到 https://github.com/cdarlint/winutils 下载与集群版本相匹配的文件夹,然后将此文件夹拷贝到没有中文和空格的路径下,比如 ;
2)在 Windows 的环境变量中添加 ,值为上面的路径,并将 添加到 中;
3)把上述文件夹 bin目录下的 文件拷贝到系统盘 目录;
4)重启 Windows 电脑。
鉴于篇幅有限,相关 Maven 依赖请参见:《https://github.com/healchow/bigdata-study/blob/main/pom.xml》
通过 Java API 操作 HDFS,主要涉及以下 class:
1)
主要用来封装客户端 / 服务端的配置。
2)
这个类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作。
可通过静态方法获得该对象:
如果代码中没有指定 ,并且工程的 ClassPath 下也没有相应的配置,此参数的默认值就由 Hadoop Jar 包中的 文件来确定:
默认值是 ,获取的不是 DistributedFileSystem 的实例,而是一个本地文件系统的客户端对象。
方式1:
方式2:
HDFS URL 打开 InputStream 的方式:
FileSystem 打开 InputStream 的方式:
FileSystem#copyToLocalFile() 的方式:
从上面的 API 练习,不难发现:只要得到了 HDFS 的 URL(即 )配置项,能访问到集群的任何人都能读写 HDFS 上的数据,这会导致数据的安全性完全无法得到保障。
为了解决这个问题,HDFS 有 访问权限控制的方法,只有通过认证的用户,按照其所拥有的权限,读取或写入某些目录下的文件。
开启 HDFS 访问权限控制的方法如下:
1)停止 HDFS 集群:
2)修改 中的配置,添加如下内容:
4)重启 HDFS 集群:
5)上传测试文件到 HDFS 集群,这里将上传后的一个文件的权限修改为 ,即只能所有者读写:
6)通过代码下载文件:
说明:本地测试失败。无论用哪个用户,访问都成功。
查了很多资料,没有说得通的。劳烦有了解的大佬,留言告知我呀🙏
作者:瘦风(https://healchow.com)
出处:博客园-瘦风的南墙(https://www.cnblogs.com/shoufeng)
感谢阅读,公众号 「瘦风的南墙」 ,手机端阅读更佳,还有其他福利和心得输出,欢迎扫码关注🤝
![]()
本文版权归博主所有,欢迎转载,但 [必须在页面明显位置标明原文链接],否则博主保留追究相关人士法律责任的权利。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/6468.html