实验二-HDFS编程
前提:在虚拟机中安装好Hadoop
参考文章:HDFS编程实践(Hadoop3.1.3)_厦大数据库实验室博客 (xmu.edu.cn)
目录
实验要求
实验步骤
小贴士
实验中遇到的问题及解决方法
实验要求
编写shell与Java代码检验分布式系统HDFS上是否存在一个input.txt,并对代码进行详细注释,通过流程图阐述数据查找过程。
实验步骤
1. 做好前提准备
①启动Hadoop
②使用Hadoop内的hdfs创建文件夹用于存储文件,可以实现对照
使用的命令为:./bin/hdfs/dfs -mkdir /input
③上传本地文件到hdfs中
使用的命令为:./bin/hdfs dfs -put /usr/local/hadoop/input/txt /input
2. 使用shell编程实现判断文件是否存在,如存在就输出文件的内容。
①命令行直接实现
./bin/hdfs dfs -test -e /input/input.txt
echo $?
如果输出为 0 代表文件存在;如果输出为1,代表文件不存在。
②通过shell编程实现文字版的输出
3. 使用java代码判断文件是否存在,如存在就输出文件的内容。
import java.io.BufferedReader;//java读取文件的相关包
import java.io.InputStreamReader;
//导入相关包
import org.apache.hadoop.conf.Configuration;//这个包是专门管理配置文件的
//这个包中包含了hadoop中所有关于文件管理的类,所有的都是继承它
import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;//可以读取url路径
import org.apache.hadoop.fs.FSDataInputStream;
//FileSystem对象中的open()方法返回的是FSDataInputStream对象,这个类是继承了java.io.DataInputStream接口的一个特殊类
//支持随机访问,可以从流中的任意位置读取数据public class Hdfs {public static void main(String[] args){try{String fileName = "/input/input.txt";//文件的路径//加载配置项Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://192.168.43.100:8020");//文件系统的路径(这个需要看自己在配置core-site.xml时使用的路径)//DistributedFileSystem是在HDFS客户端的节点上,负责与HDFS集群进行交互,如在NameNode上读写元数据,在DataNode节点上读写数据等conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");//创建文件系统实例FileSystem fs = FileSystem.get(conf);//判断文件是否存在if(fs.exists(new Path(fileName))){ //如果文件存在就打印输出System.out.println("文件存在");//打印输出文本内容Path file = new Path(fileName); FSDataInputStream getIt = fs.open(file);//缓冲区读取,避免了乱码现象BufferedReader d = new BufferedReader(new InputStreamReader(getIt));String line = null;System.out.println("文件的内容为:");while((line = d.readLine()) != null) { System.out.println(line); } d.close(); //关闭文件}else{System.out.println("文件不存在");}//如果报错的话,就打印输出错误信息}catch (Exception e){e.printStackTrace();}}
}
结果输出
小贴士
1. 在Ubuntu中安装eclipse
教程:打开底部的软件安装软件-->搜索eclipse-->安装
2. 创建Java project
将Hadoop相关的库导入
3. 将Hadoop配置文件中的core-site.xml以及hdfs-site.xml复制到创建好的java project的bin目录下(要不然会报错的)
实验中遇到的问题及解决方法
1. 实验中导包问题
在实验的过程中,按照林子雨老师的教程,只是把那几个Hadoop包导入进去就OK的,但是在实际中,还需要导入其他的库,其他库分别分布在Hadoop其他目录下,需要自己找一下。
(可能是我在安装Hadoop的时候放乱了)
贴一些因为jar包没导入而报的错
贴一些解决方法(其他库分别分布在Hadoop其他目录下,需要自己找一下)
Exception in thread “main” java.lang.NoClassDefFoundError: com/google/common/base/Preconditions_五道口纳什的博客-CSDN博客
org.apache.hadoop.util.PlatformName_鱿鱼ing的博客-CSDN博客
2. 上传文件提示失败
这是因为DataNode节点没有启动成功
可以看另外一篇文章的文末
大数据技术原理与应用-实验一-Hadoop的安装与使用_临粤的博客-CSDN博客
3. Caused by: java.net.ConnectException: 网络不可达 (connect failed)
解决方法:看java代码中连接hdfs的链接是否跟配置core-site.xml中hdfs的路径一致。我们在配置hdfs-site.xml时,里面可能填写的是IP地址+8020,但是在Java代码中我们填写了localhost+9000,两者不一致,导致连接不上。
实验参考厦门大学老师的hdfs编程教程
如果有什么错漏的地方,请各位大佬指教[抱拳]
实验二-HDFS编程相关推荐
- ZUCC_大数据计算技术_实验三 HDFS编程实践
实验三 HDFS编程实践 课程名称 大数据计算技术 实验项目名称 实验三 HDFS编程实践 启动hadoop 一.利用Shell命令与HDFS进行交互 1. 目录操作 新建家目录 可以看到新建目录内无 ...
- 计算机网络 | 实验二 WINPCWP编程
实验二 WINPCWP编程 班级 xxx 实验环境 Win10 Pro 1709(64位) 姓名 xxx 开发环境 Visual Studio 2013 学号 xxx 软件版本 WinPcap 4.1 ...
- 用matlab解单纯形法,实验二MATLAB编程单纯形法求解
<实验二MATLAB编程单纯形法求解>由会员分享,可在线阅读,更多相关<实验二MATLAB编程单纯形法求解(11页珍藏版)>请在人人文库网上搜索. 1.北京联合大学 实验报告 ...
- 实验二 HDFS的Shell命令操作,和HDFS的API操作
文章目录 实验目的 一. 实验原理 二.实验准备 实验内容 步骤 项目1 HDFS常见命令练习 列出HDFS当前用户家目录下的文件及文件夹: 列出HDFS文件下名为directory的文件夹中的文件: ...
- 实验二 HDFS实验操作
一.实验目的 理解HDFS在Hadoop体系结构中的角色 熟练使用HDFS操作常用的Shell命令 熟悉HDFS操作常用的Java API 二.实验平台 操作系统:ubuntu18 Hadoop版本: ...
- java小球碰撞实验报告_20155317 《Java程序设计》实验五网络编程与安全实验报告...
20155317 <Java程序设计>实验五网络编程与安全实验报告 遇到问题 在刚开始启动客户端或者服务端时,出现了一系列的错误情况,总是提示异常信息 后来经过询问同学,反应将端口号修改一 ...
- 实验二:熟悉常用的HDFS操作
实验目的 1.理解HDFS在Hadoop体系结构中的角色 2.熟悉使用HDFS操作常用的Shell命令 3.熟悉HDFS操作常用的Java API 实验平台 1.操作系统:Windows 2.Hado ...
- 2017-2018-2 1723《程序设计与数据结构》第八周作业 实验二 第一周结对编程 总结...
作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- Java图形编程实验总结_实验二java图形界面编程2015级.doc
实验二java图形界面编程2015级.doc 实验二JAVA图形界面编程一.实验目的熟悉JAVA运行环境,编程掌握JAVASWING组件的图形界面编程.二.实验环境微机,软件MYECLIPSE,JDK ...
最新文章
- ASP.NET虚拟主机的重大安全隐患
- iOS 中 load 和 initialize的实现顺序
- vue中使用promise
- .net core ef mysql 的使用
- 利用helloworld来检测VPS的对外端口是否打开
- java解析json_JAVA解析JSON数据
- javascript:使用canvas绘图2D图形
- 游戏安全报告(2017 - 2018全年)
- 学习linux/unix编程方法的建议-转
- Attribute 和 Parameter 的区别
- layer弹出层笔记
- 【转】BLE开发的各种坑
- 程序设计导引及在线实践之大整数乘法
- 产品需求分析神器:KANO模型分析法
- 软件测试面试中90%会遇到的问题;你会搭建测试环境吗?
- 开发一个在线Excel系统?SpreadJS让开发如此简单
- 来到 “鹅厂” 的 2019
- 前段时间的世界互联网大会
- 初学J2ME时,看过的好文章(三)
- 量化交易(二)---------海龟交易法则