设为首页 收藏本站
查看: 1003|回复: 0

[经验分享] Hadoop初学指南(4)--使用java操作HDFS

[复制链接]

尚未签到

发表于 2018-10-31 08:14:57 | 显示全部楼层 |阅读模式
  本文主要介绍了如何使用java的api来对HDFS进行操作。
  (1)URL方式访问Hadoop中的文件
  ①为了方便修改本机C盘的windows/system32/drivers/etc下的hosts文件
DSC0000.jpg

  前一个为虚拟机的ip地址,后一个为虚拟机的主机名
  ②打开eclipse,新建一个Java工程,在src下建立一个hdfs的文件夹
DSC0001.jpg

  ③导入hadoop-1.1.2源码包中主目录以及lib目录中的jar包
  ④新建一个java类,这里命令为App1
DSC0002.jpg

  ⑤开始编程
  代码如下:
package hdfs;  
import java.io.InputStream;
  
import java.net.URL;
  
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
  
import org.apache.hadoop.io.IOUtils;

  
public>  static final String PATH="hdfs://myhadoop:9000/hello";
  public static void main(String[] args) throws Exception{
  URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
  URL url = new URL(PATH);
  InputStream in =url.openStream();
  IOUtils.copyBytes(in, System.out, 1024, true);
  }
  
}
  这里IOUtils中的四个参数分别表示输入流,输出流,缓存大小以及在传输结束后是否关闭流。
  代码写完后执行即可看到HDFS中/hello的内容:
DSC0003.jpg

  这是直接用shell查看/hello的内容:
DSC0004.jpg

  内容完全一致。
  (2)利用hadoop自身的api进行操作
  如果涉及到上传,创建,删除等操作,那么URL的方式就显得力不从心了,这时就需要用到hadoop自身提供的api进行操作。
  在操作之前需要建立一个跟HDFS连接的FileSystem:
static final String PATH="hdfs://myhadoop:9000/";  
FileSystem fileSystem = FileSystem.get(new URI(PATH),new Configuration());
  创建完这个FileSystem之后,就可以用这个FileSystem进行操作
  ①创建文件夹
  代码如下:
fileSystem.mkdirs(new Path("/d1"));
DSC0005.jpg

  可以看见/d1文件夹已经创建好了。
  ②删除文件夹
  代码如下:
fileSystem.delete(new Path("/d1"),true);  这里要注意一下第二个参数,如果第一个参数为目录,那么此时必须为true;如果第一个参数为文件,那么true和false都可以。
  ③上传文件
  代码如下:
FSDataOutputStream out = fileSystem.create(new Path("/d1/hello"));  
FileInputStream in = new FileInputStream("H:/readme.txt");
  
IOUtils.copyBytes(in, out, 1024,true);
  上传完成之后,查看/d1下的hello内容如下:
DSC0006.jpg

  ④下载文件
FSDataInputStream in1 = fileSystem.open(new Path("/d1/hello"));  
IOUtils.copyBytes(in1, System.out, 1024,true);
  这里的out可以指定到本地硬盘,这里演示就直接输出到控制台了:
DSC0007.jpg

  ⑤浏览文件夹
  代码如下:
FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));  
for (FileStatus fileStatus : listStatus) {
  String isDir=fileStatus.isDir()?"文件夹":"文件";
  String permission = fileStatus.getPermission().toString();
  short replication = fileStatus.getReplication();//副本数
  long len = fileStatus.getLen();
  String path = fileStatus.getPath().toString();
  System.out.println(isDir+"\t"+permission+"\t"+replication+"\t"+len+"\t"+path);
  
}
  这里的permission表示权限,replication表示副本数,len表示长度,path表示路径,结果如下:
DSC0008.jpg

  当然,可以看到,这里不支持递归查询。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-628693-1-1.html 上篇帖子: hadoop中启动datanode或者namenode没有启动起来 下篇帖子: Hadoop初学指南(5)--MapReduce入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表