HDFS de gestión remota de IDEA
configuración del entorno local
ventanas
-
descomprimir en disco local
-
Configurar variables de entorno
-
Agregar winutils.exe y hadoop.dll
Hadoop en sí mismo no es compatible con Windows. Si necesita usarlo por completo, debe mover los dos archivos winutils.exe y hadoop.dll al directorio %HADOOP_HOME%\bin.
-
Modificar hadoop-env.cmd
@rem 这个是注释的内容 @rem 设置JAVA_HOME,使用PROGRA~1表示Program Files文件夹 set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_311
-
verificar
hadoop version
Mac OS
-
descomprimir descomprimir
tar -zxvf hadoop-3.3.1-aarch64 -C /opt/softwares
-
Configurar variables de entorno
vim ~/.bash_profile export HADOOP_HOME=/opt/softwares/hadoop-3.3.1 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOOME/sbin
-
verificar
hadoop version
IDEA crea un proyecto Maven
archivo pom
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>3.3.1</version>
</dependency>
</dependencies>
Objeto del sistema de archivos API
@Test
public void testGetFileSystem() throws IOException {
//创建配置对象,用于加载配置信息(四个默认的配置文件:core-default.xml,hdfs-default.xml,mapred-default.xml,yarn-default.xml)
Configuration conf = new Configuration();
//修改fs.defaultFS属性的值
conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
//使用FileSystem类的静态方法get(Configuration conf);返回fs.defaultFS定义的文件系统
FileSystem fs = FileSystem.get(conf);
System.out.println("文件系统对象的类型名:"+fs.getClass().getName());
}
Carga de archivo API
@Test
public void testFileUpload() throws IOException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
FileSystem fs = FileSystem.get(conf);
//将本地的一个文件D:/file1,上传到HDFS上 /file1
//1. 使用Path描述两个文件
Path localPath = new Path("D:/file1");
Path hdfsPath = new Path("/file1");
//2.调用上传方法
fs.copyFromLocalFile(localPath,hdfsPath);
//3.关闭
fs.close();
System.out.println("上传成功");
}
Descarga de archivos API
@Test
public void testFileDownload() throws IOException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.10.101:8020");
FileSystem fs = FileSystem.get(conf);
//从HDFS上下载一个文件/file1,下载到本地 D:/file2
//1. 使用Path描述两个文件
Path hdfsfile = new Path("/file1");
Path local = new Path("D:/file2");
//2. 调用下载方法进行下载
fs.copyToLocalFile(hdfsfile,local);
fs.close();
System.out.println("下载成功");
}
Directorio de creación de API
@Test
public void testMkdir() throws IOException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
FileSystem fs = FileSystem.get(conf);
//1. 测试创建目录,描述一个目录
Path hdfsfile = new Path("/dir1");
//2. 调用创建目录的方法
fs.mkdirs(hdfsfile);
fs.close();
System.out.println("创建成功");
}
Directorio de eliminación de API
@Test
public void testDelete() throws IOException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
FileSystem fs = FileSystem.get(conf);
//1. 测试删除目录,描述一个目录
Path hdfsfile = new Path("/dir1");
//2. 调用创建目录的方法
fs.delete(hdfsfile,true);
fs.close();
System.out.println("删除成功");
}
Cambio de nombre de API
@Test
public void testRename() throws IOException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
FileSystem fs = FileSystem.get(conf);
//1. 测试重命名,将file1改为file01
Path oldName = new Path("/file1");
Path newName = new Path("/file01");
//2.调用重命名方法
fs.rename(oldName,newName);
fs.close();
System.out.println("命名成功");
}
Cargar archivos IOUtil
@Test
public void putFile() throws IOException, URISyntaxException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
//1 连接HDFS 文件系统
Configuration conf=new Configuration();
//获得文件系统
FileSystem fs=FileSystem.get(new URI("hdfs://182.168.10.101:9820"),conf);
// 创建输入流,读取输入文件
FileInputStream input=new FileInputStream(new File("c://a.txt"));
// 创建输出流
FSDataOutputStream out=fs.create(new Path("/gg.txt"));
//IO的流拷贝
IOUtils.copyBytes(input, out, conf);
//关闭资源
IOUtils.closeStream(input);
IOUtils.closeStream(out);
System.out.println("上传完毕");
}
Archivo de descarga de IOUtil
@Test
public void getFile() throws IOException, URISyntaxException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
// 1 连接HDFS 文件系统
Configuration conf = new Configuration();
// 获得文件系统
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.10.101:9820"), conf);
// 获取输入流 从HDFS上读取
FSDataInputStream input=fs.open(new Path("/gg.txt"));
// 获取输出流
FileOutputStream out=new FileOutputStream(new File("c://gg.txt"));
//流拷贝
IOUtils.copyBytes(input, out, conf);
//关闭流
IOUtils.closeStream(input);
IOUtils.closeStream(out);
System.out.println("下载完成");
}
Estado de la documentación de la API
@Test
public void testFileStatus() throws IOException {
// 在修改HDFS的文件的时候,如果出现权限不足的情况,可以修改操作HDFS的用户
System.setProperty("HADOOP_USER_NAME", "root");
Configuration conf = new Configuration();
conf.set("fs.defaultFS","hdfs://192.168.10.101:9820");
FileSystem fs = FileSystem.get(conf);
//1. 描述你要读取的文件 /file02
Path path = new Path("/file02");
//获取文件的状态信息
RemoteIterator<LocatedFileStatus> it = fs.listLocatedStatus(path);
while(it.hasNext()){
// 取出对象
LocatedFileStatus status = it.next();
System.out.println("name:"+status.getPath());
//获取位置
BlockLocation[] locate = status.getBlockLocations();
for(BlockLocation bl:locate){
System.out.println("当前块的所有副本位置:"+Arrays.toString(bl.getHosts()));
System.out.println("当前块大小:"+bl.getLength());
System.out.println("当前块的副本的ip地址信息:"+Arrays.toString(bl.getNames()));
}
System.out.println("系统的块大小:"+status.getBlockSize());
System.out.println("文件总长度:"+status.getLen());
}
}
Para obtener contenido más emocionante de big data, bienvenido a buscar " Qianfeng Education " en la estación B o escanear el código para obtener un conjunto completo de materiales
[Educación de Qianfeng] Un conjunto completo de tutoriales sobre el desarrollo de big data, el video de aprendizaje de big data más completo de la historia