有没有中毒啊,好像听说 C盘有受保护的。
1 : 上传本地文件到HDFS
@Test
public void testUpload() throws Exception {
Configuration conf = new Configuration();
//默认值,可以不设置
conf.set("dfs.blocksize", "128m");
// 1.先获取一个访问HDFS的客户端对象
// 参数1:URI-hdfs集群的访问地址 参数2:客户端需要携带的参数对象 参数3:指明客户端的身份
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
//fs的copyFromLocalFile()方法上传文件
//ziliao.docx为给文件重命名
fs.copyFromLocalFile(new Path("G:/a.docx"), new Path("/ziliao.docx"));
//关闭资源
fs.close();
}
上传结果:
2 : 创建目录
/**
* 测试创建目录
* @throws Exception
*/
@Test
public void testMkdir() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
//创建一个目录,aaa下面的bbb
fs.mkdirs(new Path("/aaa/bbb"));
fs.close();
}
创建结果:
3 : 下载文件到本地
方法一:
下载操作,会涉及到客户端本地系统的访问,hadoop为本地访问专门封装了本地平台库(C语言)
具体做法:将本地库解压到任意位置,并将解压目录配置到HADOOP_HOME环境变量中
/**
* 测试下载文件
* 具体做法:将本地库解压到任意位置,并将解压目录配置到HADOOP_HOME环境变量中
* @throws Exception
*/
@Test
public void testDownLoad() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
fs.copyToLocalFile(new Path("/ziliao.docx"), new Path("E:/"));
fs.close();
}
下载结果:
方法二 : 此方法不需要hadoop本地C语言库
/**
* 测试下载文件
* @throws Exception
*/
@Test
public void testDownLoad() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
//方法一:使用hadoop本地C语言库
//具体做法:将本地库解压到任意位置,并将解压目录配置到HADOOP_HOME环境变量中
//fs.copyToLocalFile(new Path("/ziliao.docx"), new Path("E:/"));
//方法二:使用java类库 第一个参数为是否是否删除源.中间俩个参数为路径,最后一个参数useRawLocalFileSystem为是用本地java库
fs.copyToLocalFile(false, new Path("/ziliao.docx"), new Path("E:/"), true);
fs.close();
}
下载结果:
4 : 删除文件
/**
* 测试删除
* @throws Exception
*/
@Test
public void testRm() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
//参数一:要删除的路径. 参数二:是否递归
fs.delete(new Path("/aaa"), true);
fs.close();
}
删除之前:
删除之后:
5 : 移动或重命名文件或文件夹
/**
* 测试移动或重命名文件或文件夹
* @throws Exception
*/
@Test
public void testMv() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
//第一个参数为原文件名或路径,第二个参数为修改的文件名或路径
fs.rename(new Path("/ziliao.docx"), new Path("/haha.docx"));
fs.close();
}
重命名之前:
重命名之后:
6 : 判断文件或文件夹是否存在
代码;
/**
* 判断文件是否存在
* @throws Exception
*/
@Test
public void testIfExist() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
boolean exists = fs.exists(new Path("/aaa"));
System.out.println(exists);
fs.close();
}
文件 :
判断结果 : 不存在
7 : 判断一个路径是否为文件
/**
* 判断文件或文件夹是否存在
* @throws Exception
*/
@Test
public void testIfExist() throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000"), conf, "root");
//boolean exists = fs.exists(new Path("/aaa"));
boolean isfile = fs.isFile(new Path("haha.docx"));
//System.out.println(exists);
System.out.println(isfile);
fs.close();
}
8 : 查看文件目录,仅显示文件信息
/**
* 查看文件目录
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
@Test
public void testLs1() throws IOException, InterruptedException, URISyntaxException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000/"), conf, "root");
// 思考:为何返回迭代器?
RemoteIterator iterator = fs.listFiles(new Path("/"), true);
while(iterator.hasNext()) {
LocatedFileStatus file = iterator.next();
System.out.println("文件的所属组:" + file.getGroup());
System.out.println("文件的所有者:" + file.getOwner());
System.out.println("文件的块大小:" + file.getBlockSize());
System.out.println("文件的总长度:" + file.getLen());
System.out.println("文件的副本数:" + file.getReplication());
System.out.println("文件的路径:" + file.getPath());
System.out.println("文件的权限:" + file.getPermission());
BlockLocation[] blockLocations = file.getBlockLocations();
System.out.println("文件的块位置信息—————————");
for (BlockLocation blk : blockLocations) {
System.out.println("块长度:" + blk.getLength());
System.out.println("块在文件中的起始偏移量:" + blk.getOffset());
System.out.println("块所在的datanode主机:" + Arrays.toString(blk.getHosts()));
}
System.out.println("文件的块位置信息—————————");
}
}
文件如下 :
运行结果:
文件的所属组:supergroup
文件的所有者:root
文件的块大小:134217728
文件的总长度:729927107
文件的副本数:3
文件的路径::9000/aaa/bbb/ideaIU-2018.1.6.win.zip
文件的权限:rw-r–r–
文件的块位置信息—————————
块长度:134217728
块在文件中的起始偏移量:0
块所在的datanode主机:[marshal002, marshal001, marshal]
块长度:134217728
块在文件中的起始偏移量:134217728
块所在的datanode主机:[marshal001, marshal002, marshal]
块长度:134217728
块在文件中的起始偏移量:268435456
块所在的datanode主机:[marshal002, marshal001, marshal]
块长度:134217728
块在文件中的起始偏移量:402653184
块所在的datanode主机:[marshal002, marshal001, marshal]
块长度:134217728
块在文件中的起始偏移量:536870912
块所在的datanode主机:[marshal002, marshal003, marshal]
块长度:58838467
块在文件中的起始偏移量:671088640
块所在的datanode主机:[marshal001, marshal003, marshal]
文件的块位置信息—————————
文件的所属组:supergroup
文件的所有者:root
文件的块大小:134217728
文件的总长度:1622342
文件的副本数:3
文件的路径::9000/haha.docx
文件的权限:rw-r–r–
文件的块位置信息—————————
块长度:1622342
块在文件中的起始偏移量:0
块所在的datanode主机:[marshal, marshal001, marshal003]
文件的块位置信息—————————
文件的所属组:supergroup
文件的所有者:root
文件的块大小:134217728
文件的总长度:139
文件的副本数:3
文件的路径::9000/hdfs-mgmt.sh
文件的权限:rw-r–r–
文件的块位置信息—————————
块长度:139
块在文件中的起始偏移量:0
块所在的datanode主机:[marshal002, marshal001, marshal003]
文件的块位置信息—————————
9 : 查看文件目录,显示文件以及文件夹信息
/**
* 查看文件目录,显示文件和文件夹信息
* @throws IOException
* @throws InterruptedException
* @throws URISyntaxException
*/
public void testLs2() throws IOException, InterruptedException, URISyntaxException {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI(":9000/"), conf, "root");
// 思考:为何返回数组?
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for (FileStatus f : listStatus) {
System.out.println(f.getPath());
}
fs.close();
}
运行结果 :
:9000/aaa
:9000/haha.docx
:9000/hdfs-mgmt.sh
作为一名从业多年的IT人,我来回答一下这个问题。
对于刚入职的Java程序员来说,如果没有过岗位实习经历,在面对开发任务时,确实需要度过一个困难期,而如果此时没有专业程序员的指导,通常需要较长一段时间才能逐渐融入到开发团队中。实际上,不少Java初级程序员在入职一段时间后,就因为迟迟不能完成开发任务而选择离职。
对于没有开发经验的Java准程序员来说,要想尽快提升自己的编程能力,同时融入到开发团队中,应该从以下三个方面入手:
第一:多动手做实验。要想提升编程能力,一定要多动手做实验,可以从一个比较基本的实验开始,然后逐渐进行拓展。看代码虽然是快速学习的好,但是看代码的同时,一定要动手实践一下,这样才能建立起画面感,同时形成自己的编程思想。
第二:多与老程序员交流。在进入开发团队的初期,一定要多与有经验的老程序员交流,这是能够快速成长的重要。在交流的过程中,一方面要搞清楚具体的开发流程,另一方面也应该主动承担一部分开发任务,有了开发任务就会有更多交流的机会。按照历史经验来看,往往能够主动承担开发任务的程序员,会有更快的成长速度。
第三:善于总结。做程序开发工作,一定要善于总结,把一些重要的开发内容总结成具体的方法,然后再把这些方法应用到后续的开发任务中。Java开发比较注重模式和框架的运用,而且不同团队往往有不同的技术选型,所以做好相关知识的总结对于快速融入开发团队是比较重要的。
我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!
还没有评论呢,快来抢沙发~