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

[经验分享] Hadoop HDFS编程 API入门系列之简单综合版本1(四)

[复制链接]

尚未签到

发表于 2017-12-18 13:24:20 | 显示全部楼层 |阅读模式
1 package com.dajiangtai.Hadoop.HDFS;  

  2  
  3 import java.io.IOException;
  
  4 import java.net.URISyntaxException;
  
  5 import org.apache.hadoop.conf.Configuration;
  
  6 import org.apache.hadoop.fs.BlockLocation;
  
  7 import org.apache.hadoop.fs.FileStatus;
  
  8 import org.apache.hadoop.fs.FileSystem;
  
  9 import org.apache.hadoop.fs.FileUtil;
  
10 import org.apache.hadoop.fs.Path;
  
11 import org.apache.hadoop.hdfs.DistributedFileSystem;
  
12 import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
  
13
  
14 import java.net.URI;
  
15

  
16 public>  
17     /**
  
18      * @param args   //@param args是生成文档的时候用的东西,现在不用管。以后慢慢就知道了
  
19      * @throws IOException
  
20      * @throws URISyntaxException
  
21      */
  
22     
  
23     
  
24     public static void main(String[] args) throws IOException, URISyntaxException{
  
25                     // TODO Auto-generated method stub     
  
26                     //这是在你用eclipse这样的Java集成开发环境是开发环境自动帮你写的,
  
27                     //意思是告诉你这些代码是自动生成的,不是你自己写的,就是一个提示的作用,没大作用
  
28         
  
29         
  
30 //        mkdir();
  
31 //        copyToHDFS();
  
32 //        getFile();
  
33 //        ListAllFile();
  
34 //        getFileLocal();
  
35 //        rmdir();
  
36         getHDFSNodes();
  
37     }   
  
38     
  
39     
  
40     //获取HDFS文件系统
  
41     public static FileSystem getFileSystem() throws IOException,URISyntaxException{
  
42                     //getFileSystem()是获取文件系统
  
43         Configuration conf = new Configuration();//读取配置文件,比如core-site.xml、hdfs-site.xml等等。
  
44         
  
45         
  
46         //若是在集群里,则如下一行代码即可。
  
47         //FileSystem fs =FileSystem.get(conf);
  
48         
  
49         
  
50         //若是在本地里来想去获取,则如下两行代码即可。
  
51         URI uri = new URI("hdfs://djt002:9000");  
  
52         FileSystem fs = FileSystem.get(uri,conf);
  
53                        
  
54         
  
55         
  
56         return fs;
  
57     }
  
58     
  
59     
  
60     
  
61     //创建文件目录
  
62     public static void mkdir() throws IOException,URISyntaxException{
  
63         //第一步,获取文件系统
  
64         FileSystem fs =getFileSystem();//因为上述有个方法
  
65         //第二步,创建文件目录
  
66         fs.mkdirs(new Path("/dajiangtai/data"));
  
67         //第三步,释放资源
  
68         fs.close();
  
69     }
  
70     
  
71     
  
72     
  
73     //文件上传至HDFS
  
74     public static void copyToHDFS() throws IOException,URISyntaxException{
  
75         //第一步
  
76         FileSystem fs=getFileSystem();//因为上述有个方法
  
77         //第二步
  
78         Path srcpath=new Path("D://Data/weibo.txt");//原路径
  
79         Path dstpath=new Path("/dajiangtai/data");//终路径
  
80         //第三步
  
81         fs.copyFromLocalFile(srcpath, dstpath);
  
82         //第四步
  
83         fs.close();
  
84     }
  
85     
  
86     
  
87     //获取目录下的所有文件
  
88     public static void getFile() throws IOException, URISyntaxException{
  
89         //第一步
  
90         FileSystem fs=getFileSystem();//因为上述有个方法
  
91         //第二步
  
92         Path srcpath=new Path("/dajiangtai/data/weibo.txt");//原路径
  
93         Path dstpath=new Path("D://Data/test");//终路径
  
94         //第三步
  
95         fs.copyToLocalFile(srcpath, dstpath);   
  
96         //第四步
  
97         fs.close();
  
98
  
99     }
  
100     
  
101     
  
102     //列出指定路径下的所有文件
  
103     public static void ListAllFile() throws IOException, URISyntaxException{
  
104         //第一步
  
105         FileSystem fs=getFileSystem();//因为上述有个方法
  
106         //第二步
  
107         FileStatus[] status =fs.listStatus(new Path("/dajiangtai"));
  
108             // 任何文件系统的一个重要特性都是提供其目录结构浏览和检索它所存文件和目录相关信息的功能。
  
109             //FileStatus对象,即status,它封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。
  
110             //FileStatus对象,即status,由FileSystem的listStatus()方法获得,调用该方法的时候要把文件的Path传进去。
  
111         //第三步
  
112         Path[] listedPaths = FileUtil.stat2Paths(status);
  
113         //第四步
  
114         for(Path p:listedPaths)
  
115         {
  
116             System.out.println(p);
  
117            
  
118         }
  
119         //第五步
  
120         fs.close();
  
121     }
  
122     
  
123     
  
124     //查找某个文件在HDFS集群的位置
  
125     public static void getFileLocal() throws IOException, URISyntaxException{
  
126         //第一步
  
127         FileSystem fs=getFileSystem();//因为上述有个方法
  
128         //第二步
  
129         Path path=new Path("/dajiangtai/data/weibo.txt");
  
130         //第三步
  
131         FileStatus fileStatus=fs.getFileLinkStatus(path);
  
132     
  
133             // 任何文件系统的一个重要特性都是提供其目录结构浏览和检索它所存文件和目录相关信息的功能。
  
134             //FileStatus对象,即fileStatus,它封装了文件系统中文件和目录的元数据,包括文件的长度、块大小、备份数、修改时间、所有者以及权限等信息。
  
135             //FileStatus对象,即fileStatus,由FileSystem的getFileStatus()方法获得,调用该方法的时候要把文件的Path传进去。
  
136         //第四步
  
137         BlockLocation[] blkLocations = fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
  
138             // 获取到整个文件的所有block的位置信息,比如示例BlockLocation[] blkLocations = fs.getFileBlockLocations(file, 0,length);  
  
139         //第五步
  
140          for(int i=0;i< blkLocations.length;i++)
  
141          {
  
142               String[] hosts = blkLocations.getHosts();
  
143               System.out.println("block_"+i+"_location:"+hosts[0]);//这里为什么是hosts[0],因为单节点。
  
144          }
  
145          //第六步
  
146          fs.close();
  
147     }
  
148     
  
149     
  
150     //删除文件或文件的目录
  
151     public static void rmdir() throws IOException, URISyntaxException{
  
152         //第一步
  
153         FileSystem fs=getFileSystem();//因为上述有个方法
  
154         //第二步
  
155         fs.delete(new Path("/dajiangtai/data"),true);
  
156         //第三步
  
157         fs.close();
  
158     }
  
159     
  
160     
  
161     //获取HDFS集群节点信息
  
162     public static void getHDFSNodes() throws IOException, URISyntaxException{
  
163         //第一步
  
164         FileSystem fs=getFileSystem();//因为上述有个方法
  
165         //第二步
  
166         DistributedFileSystem hdfs = (DistributedFileSystem)fs;
  
167         //第三步
  
168         DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
  
169         //第四步
  
170         for(int i=0;i< dataNodeStats.length;i++)
  
171         {
  
172             System.out.println("DataNode_"+i+"_Name:"+dataNodeStats.getHostName());
  
173         }
  
174         //第五步
  
175         fs.close();
  
176     }
  
177     
  
178 }

运维网声明 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-425380-1-1.html 上篇帖子: 第六篇:Eclipse上运行第一个Hadoop实例 下篇帖子: Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(十)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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