• 主页
  • 随笔
所有文章 友链 关于我

  • 主页
  • 随笔

HDFS分布式文件系统的Java数据访问方法

2020-05-16

准备工作

Ubuntu下安装IDEA

1.下载地址: https://www.jetbrains.com/idea/download/#section=linux.
小编选择的版本是ideaIU-2019.3.3.tar.gz

2.查看下载
首先切换到下载目录
要注意该处的hadoop,为当前用户名
汉化版代码如下:

1
cd /home/hadoop/下载

未汉化版:

1
cd /home/hadoop/Downloads

在这里插入图片描述
3.将压缩包解压到/opt目录下
注意压缩包的版本号

1
sudo tar -zxvf ideaIU-2019.3.3.tar.gz -C /opt

4.进入安装位置并启动IDEA
在这里插入图片描述
打开相应IDEA的bin目录,idea.sh是IDEA的启动文件,我们可以通过终端运行idea.sh文件启动 IDEA

5.测试安装是否成功
(1)新建工程
在这里插入图片描述
在弹出新建工程的界面选择Java,接着选择SDK,一般默认即可,点击“Next”按钮,
在这里插入图片描述
在弹出的选择创建项目的模板页面,不做任何操作,直接点击“Next”按钮。
在这里插入图片描述
输入项目名称,点击Finish,就完成了创建新项目的工作,小编所建的项目名称为:project1。
在这里插入图片描述

(2)新建java class
在这里插入图片描述
(3)测试运行
在这里插入图片描述
在这里插入图片描述
若成功输出相应的结果,则证明安装成功。
到此Ubuntu下安装IDEA就完成了

相应包的导入

1.在idea新建一个Java Project,并import需要的Hadoop JAR包
在这里插入图片描述
在弹出新建工程的界面选择Java,接着选择SDK,一般默认即可,点击“Next”按钮,
在这里插入图片描述
在弹出的选择创建项目的模板页面,不做任何操作,直接点击“Next”按钮。
在这里插入图片描述
输入项目名称,点击Finish,就完成了创建新项目的工作,小编所建的项目名称为:Java Project。
在这里插入图片描述
2.添加jar包,和Eclipse一样,要给项目添加相关依赖包,否则会出错。点击Idea的File菜单,然后点击“Project Structure”菜单
在这里插入图片描述
依次点击Modules和Dependencies,然后选择“+”号
在这里插入图片描述
3.选择hadoop的包,我用得是hadoop3.2.1。把下面的依赖包都加入到工程中,否则会出现某个类找不到的错误。

1
2
3
4
5
(1) /usr/local/hadoop/share/hadoop/common目录下的hadoop-common-3.2.1.jar和hadoop-nfs-3.2.1.jar。
(2) /usr/local/hadoop/share/hadoop/common/lib目录下的所有jar包。
(3) /usr/local/hadoop/share/hadoop/hdfs目录下的hadoop-hdfs-3.2.1.jar和hadoop-hdfs-nfs-3.2.1.jar。
(4) /usr/local/hadoop/share/hadoop/hdfs/lib目录下的所有jar包。
(5) /usr/local/hadoop/share/hadoop/hdfs目录下的 hadoop-hdfs-client-3.2.1.jar包

若不添加(5)对应的hadoop-hdfs-client-3.2.1.jar包,可能会报如下错误:
在这里插入图片描述
4.将导入的包apply
在这里插入图片描述

启动Hadoop

1
2
cd /usr/local/hadoop
./sbin/start-dfs.sh

在这里插入图片描述
查看进程

1
jps

在这里插入图片描述

从本地拷贝文件到HDFS

1.新建java class
在这里插入图片描述
2.在当前用户的桌面创建一个1.txt,作为传输文件进行测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.fs.Path;

public class FileCopyFromLocal{
public static void main(String[] args) {
String source = "/home/hadoop/桌面/1.txt";
String dest = "hdfs://localhost:9000/user/hadoop/input/1.txt";
try {
InputStream in = new BufferedInputStream(new FileInputStream(source));
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dest),conf);
OutputStream out = fs.create(new Path(dest));
IOUtils.copyBytes(in,out,4096,true);
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
}
}
}

警告信息可忽略

成功拷贝则运行输出success
在这里插入图片描述

判断HDFS目录中对应文件是否存在

1.新建java class
在这里插入图片描述
2.查看1.txt,作为传输文件是否存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class HDFSFileIfExist{
public static void main(String[] args) {
try{
String fileName = "hdfs://localhost:9000/user/hadoop/input/1.txt";
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs = FileSystem.get(conf);
if(fs.exists(new Path(fileName))){
System.out.println("exists");
}
else {
System.out.println("not exists");
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}

存在则运行输出exists!
在这里插入图片描述

列出HDFS目录中相应文件信息

1.新建java class
在这里插入图片描述
2.查看/user/hadoop/input目录内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class ListHDFSFiles {
public static void main(String[] args) {
String uri = "hdfs://localhost:9000/user/hadoop/input";
Configuration conf = new Configuration();
try {
FileSystem fs = FileSystem.get(new URI(uri), conf);
Path path = new Path(uri);
FileStatus[] status = fs.listStatus(path);
for (FileStatus s : status) {
System.out.println(s.getPath().getName());
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}

显示如下:
在这里插入图片描述

读取HDFS目录中相应文件内容

1.新建java class
在这里插入图片描述
2.查看input目录下1.txt内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.io.*;
import java.net.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;

public class ReadHDFSFileContents{
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.set("fs.defaultFs","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
try {
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
InputStream in = new URL("hdfs://localhost:9000/user/hadoop/input/1.txt").openStream();
IOUtils.copyBytes(in,System.out,4096,true);
} catch (Exception e) {
e.printStackTrace();
}
}
}

输出文件内容
在这里插入图片描述

读取HDFS相应文件的BLOCK信息

1.新建java class
在这里插入图片描述
2.查看input目录下1.txt所对应的block信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.BlockLocation;

public class LocationFile{
public static void main(String[] args) {
String uri = "hdfs://localhost:9000/user/hadoop/input/1.txt";
Configuration conf = new Configuration();
try{
FileSystem fs = FileSystem.get(new URI(uri),conf);
Path path = new Path(uri);
FileStatus fileStatus = fs.getFileStatus(path);
BlockLocation blockLocation[] = fs.getFileBlockLocations(fileStatus,0,fileStatus.getLen());
for(int i=0;i<blockLocation.length;i++)
{
String[] hosts = blockLocation[i].getHosts();
System.out.println("block_"+i+"_location:"+hosts[0]);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}

输出block信息则成功
在这里插入图片描述

删除HDFS目录中相应文件

1.新建java class
在这里插入图片描述
2.删除input目录下1.txt文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class DeleteHDFSFile{
public static void main(String[] args) {
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
try {
FileSystem fs = FileSystem.get(conf);
boolean deleteOnExit = fs.deleteOnExit(new Path("/user/hadoop/input/1.txt"));
System.out.println(deleteOnExit);
} catch (Exception e) {
e.printStackTrace();
}
}
}

删除成功则返回ture
在这里插入图片描述
关闭hadoop

1
2
./sbin/stop-dfs.sh
jps //查看进程

在这里插入图片描述

至此HDFS分布式文件系统的JAVA数据访问方法,就结束了。各位可爱们在实验过程中一定要注意细节哦,如果博客中有问题,欢迎各位大神们指点迷津。

赏

谢谢你请我吃糖果

扫一扫,分享到微信

微信分享二维码
HBase Shell数据库操作
MapReduce分布式计算
© 2021 John Doe
Hexo Theme Yilia by Litten
  • 所有文章
  • 友链
  • 关于我

tag:

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • 友情链接1
  • 友情链接2
  • 友情链接3
  • 友情链接4
  • 友情链接5
  • 友情链接6
很惭愧

只做了一点微小的工作
谢谢大家