伪分布式Hadoop下Java API 调用以及一些问题的解决方案
大家好,我是村口靠捡牛粪过日子的可怜虫
最近比较忙都没时间写博客了,想想也没什么分享,就给大家分享一些我的报告。这次分享的是Hadoop的Java API调用。
一、 实验目的
(1) 理解HDFS在Hadoop体系结构中的角色
(2) 熟练使用HDFS操作常用的shell命令
(3) 熟悉HDFS操作常用的Java API
二、 实验环境
类型 | 名称 | 版本 |
---|---|---|
虚拟机软件 | VMware Workstation Pro | 16.0.0 build-16894299 |
Master | CentOS | 6.10 |
Slave1 | CentOS | 6.10 |
Slave2 | CentOS | 6.10 |
Jdk | Jdk | jdk1.8.0_141 |
Hadoop | Hadoop | 2.8.1 |
Ssh软件 | Terminus | 7.7.1 |
一、 实验内容(步骤)和完成情况
(1) HDFS Shell 操作 – ls
可以查看到HDFS根目录(/)下的所有文件以及文件夹,修改路径可以查看任意路径下文件。
(2) HDFS Shell 操作 – mkdir
通过-mkdir可以在任意路径下创建文件夹,创建时无提示,但可以通过-ls查看。
(3) HDFS Shell 操作 – put
两种方式,成功上传文件。
(4) HDFS Shell 操作 – rmdir\ rm
只能对空文件夹remove,所以要递归删除。
针对有文件夹或单个文件,都用rm删除。
(1) HDFS Shell 操作 – cat
首先在/wordcount/input路径下有hello.txt文件,二个行命令用cat查看内部内容。
(2) HDFS Shell 操作 – get
成功将HDFS的文件保存到本地。
(3) HDFS****的Java API操作 – 向HDFS上传文件
HadoopUtils****作为工具类,负责定义一些配置信息,具体内容如下:
执行上述方法后,可通过浏览器查看文件如下:
(4) HDFS****的Java API操作 – 从HDFS下载文件
执行上述方法,得到结果如上图,除了需要下载的文件外,还附带crc校验文件。
(5) HDFS****的Java API操作 – 将HDFS文件内容输出到终端
输出结果如下:
(6) HDFS****的Java API操作 – 显示路径下所有文件的权限、大小、路径、创建时间等信息
打印结果如下:
(7) HDFS****的Java API操作 – 向HDFS文件追加内容
分别打印插入前与插入后的内容,结果如下:
以中文插入后为分割,可以看到插入后确实多了一行内容hadoop hello。
(8) Web – 查看文件列表操作
查看指定路径下的文件结果如下:
在其他路径下的结果如下:
(9) Web – 创建文件夹
在指定路径下创建文件夹:
反馈显示创建成功:
通过HDFS的WEB可以查看到ccc文件夹创建成功:
(10) Web – 删除指定路径
删除刚创建的ccc文件夹,由于是文件夹所以需要勾选递归删除:
反馈删除成功:
再次查看HDFS结果如下,ccc文件夹删除成功:
(11) Web – 查看文件内容
查看文件内容,直接打印到页面中:
结果如下:
(12) Web – 上传文件到指定路径
将文件上传至指定路径,首先在HDFS中aaa文件夹下无文件:
上传文件,点击提交,得到上传成功反馈:
再次查看HDFS的aaa文件夹下内容:
一、 出现的问题
(1) 报错AccessControlException: Permission denied
解决方法:出现这个问题是因为访问HDFS的用户的权限问题,需要打开hdfs-site.xml,在configuration中添加以下代码段:
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
添加完毕重新启动集群即可。
(2) 报错org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot add block to / Name node is in safe mode.
解决方法:出现该问题是因为HDFS处于安全模式,不允许写、修改、删除操作,需要通过命令行退出安全模式:
sbin]# hadoop dfsadmin -safemode leave
(3) 报错java.lang.InterruptedException
在HDFS shell中执行put命令时报错,解决方法:在对应路径创建文件夹,或者是因为路径没写对。
eption): Cannot add block to / Name node is in safe mode.**
解决方法:出现该问题是因为HDFS处于安全模式,不允许写、修改、删除操作,需要通过命令行退出安全模式:
sbin]# hadoop dfsadmin -safemode leave
(3) 报错java.lang.InterruptedException
在HDFS shell中执行put命令时报错,解决方法:在对应路径创建文件夹,或者是因为路径没写对。