文章详情

有没有中毒啊,好像听说 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开发比较注重模式和框架的运用,而且不同团队往往有不同的技术选型,所以做好相关知识的总结对于快速融入开发团队是比较重要的。

我从事互联网行业多年,目前也在带计算机专业的研究生,主要的研究方向集中在大数据和人工智能领域,我会陆续写一些关于互联网技术方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。

如果有互联网、大数据、人工智能等方面的问题,或者是考研方面的问题,都可以在评论区留言,或者私信我!

发表评论
暂无评论

还没有评论呢,快来抢沙发~