栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hadoop-HDFS

Hadoop-HDFS

Hadoop-HDFS
  • 客户端环境配置
    • 1. 环境配置
    • 2. 测试
    • 3. 样例- mkdir
  • Java API
    • 1. 文件上传-CopyfromLocal
    • 文件上传参数优先级
    • 2. 文件下载 - CopyToLocal
      • 原理
      • 过程
      • 代码
    • 3. 文件夹删除 - Delete
      • 原理
      • 过程
      • 代码
    • 4. 文件名更改 - Rename
      • 原理
      • 过程
      • 代码
    • 5. 文件详情查看 - ListFiles
      • 原理
      • 过程
      • 代码
    • 6. 文件和文件夹判断 - ListStatus
      • 原理
      • 过程
      • 代码

边学边写,持续更新中
配合目录用



客户端环境配置 1. 环境配置
  1. 下载并解压Maven到 /opt 目录下,配置环境变量
    在/etc/profile.d 路径下创建一个 maven.sh 文件,写入以下代码
    source /etc/profile ,用 mvn -v 查看是否安装成功,如图
export MAVEN_HOME=/opt/apache-maven-3.0.5
export PATH=$PATH:${MAVEN_HOME}/bin

  1. 更换maven源
    vim /opt/apache-maven-3.0.5/conf/settings.xml,在指定位置写入以下代码,如图
    
      nexus-aliyun
      central
      Nexus aliyun
      http://maven.aliyun.com/nexus/content/groups/public/
    


2. 测试
  1. 创建Maven工程
    在 /opt 目录下,创建一个文件夹,进入该文件夹
    mkdir workspace
    在workspace文件夹下,创建项目,如图
    mvn archetype:generate -DgroupId=com.root

    默认回车执行,创建一个maven样例工程
    输入项目名称,定义版本号-默认回车,检查-默认回车。如图
  2. 用 tree hdfs-mkdir/ 查看结构。若提示 tree not found ,按提示安装tree。如图
  3. 打包 mvn package , 输出hello world
    在 hdfs-mkdir 目录下,执行mvn package ,再用 tree hdfs-mkdir/ 会增加如下内容

    运行该打包文件,在/hdfs-mkdir 目录下。结果如图
    java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.App
  4. 导入依赖。更改 pom.xml ,写入以下代码,并在如图所示加入版本号
    
      junit
      junit
      RELEASE
    
    
      org.apache.logging.log4j
      log4j-core
      2.8.2
    
    
      org.apache.hadoop
      hadoop-common
      ${hadoop.version}
    
    
      org.apache.hadoop
      hadoop-client
      ${hadoop.version}
    
    
      org.apache.hadoop
      hadoop-hdfs
      ${hadoop.version}
    

  1. 清理上次运行的结果
    mvn clean
    再次运行 mvn package
    运行打包的文件,成功输出
    java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.App


3. 样例- mkdir

每一次运行java程序之前都要 clean 和 package 一遍

  • mkdir样例
  1. 修改pom.xml 文件,加入以下代码,,如图,注意对齐
    完成后执行 mvn clean 和 mvn package
  
    
      
        org.apache.maven.plugins
        maven-jar-plugin
        2.3.2
        
          
            
              true
              lib/
              com.young
            
          
        
      
      
        org.apache.maven.plugins
        maven-dependency-plugin
        
          
            copy
            package
            
              copy-dependencies
            
            
              
                ${project.build.directory}/lib
              
            
          
        
      
    
  

  1. 防止日志报警。在src/main/resources路径下添加日志配置文件log4j.properties,并写入以下代码
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d	%p	[%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d       %p      [%c] - %m%n
  1. 编辑App.java,替换成以下代码。在hdfs-mkdir路径下。
    vim src/main/java/com/root/App.java
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class App 
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
	Configuration conf = new Configuration();

	//1 获取hdfs客户端对象
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");

	//2 在hdfs上创建路径
	fs.mkdirs(new Path("/0x00/usr"));

	//3 关闭资源
	fs.close();
        System.out.println( "HDFS mkdir!" );
    }
}
  1. 运行App.java,如图
    java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.App


Java API 1. 文件上传-CopyfromLocal
  1. 新建java程序,拷贝之前的App.java即可
    cp App.java CopyfromLocal.java
  2. 进入 CopyfromLocal 中,写入以下代码
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class CopyfromLocal
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
        Configuration conf = new Configuration();

        //1 获取hdfs客户端对象
        FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");
        
        //2 将本地文件上传到hdfs上
        fs.copyFromLocalFile(new Path("/tmp/pom.xml"), new Path("/"));

        //3 关闭资源
        fs.close();
        System.out.println( "HDFS copy from local" );
    }
}
  1. 运行程序
    mvn clean
    mvn package
    java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.CopyfromLocal
    如图

文件上传参数优先级

2. 文件下载 - CopyToLocal 原理

过程
  1. 创建java文件
  2. 写入代码
  3. mvn clean
  4. mvn package
  5. java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.CopyToLocal
代码
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class CopyToLocal 
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
	Configuration conf = new Configuration();

	//1 获取hdfs客户端对象
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");

	//2 下载操作
	fs.copyToLocalFile(new Path("/pom.xml"), new Path("/tmp/pom-r-n.xml"));

	//3 关闭资源
	fs.close();
        System.out.println( "HDFS copy to local" );
    }
}

3. 文件夹删除 - Delete 原理

过程
  1. 创建java文件
  2. 写入代码
  3. mvn clean
  4. mvn package
  5. java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.Delete
代码
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Delete 
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
	Configuration conf = new Configuration();

	//1 获取hdfs客户端对象
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");

	//2 文件删除 
	fs.delete(new Path("/0x00"), true);

	//3 关闭资源
	fs.close();
        System.out.println( "HDFS delete" );
    }
}

4. 文件名更改 - Rename 原理

过程
  1. 创建java文件
  2. 写入代码
  3. mvn clean
  4. mvn package
  5. java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.Rename
代码
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Rename 
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
	Configuration conf = new Configuration();

	//1 获取hdfs客户端对象
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");

	//2 文件更名
	fs.rename(new Path("/pom.xml"), new Path("/pom-r-x.xml"));

	//3 关闭资源
	fs.close();
        System.out.println( "HDFS Rename" );
    }
}

5. 文件详情查看 - ListFiles 原理

过程
  1. 创建java文件
  2. 写入代码 vim src/main/java/com/root/ListFiles.java
  3. mvn clean
  4. mvn package
  5. java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.ListFiles
代码
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.BlockLocation;

public class ListFiles 
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
	Configuration conf = new Configuration();

	//1 获取hdfs客户端对象
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");

	//2 查看文件详情
	RemoteIterator listFiles = fs.listFiles(new Path("/"), true);
	while (listFiles.hasNext())
	{
		LocatedFileStatus fileStatus = listFiles.next();
		// 查看文件名称、权限、长度、块信息
		System.out.println(fileStatus.getPath().getName());
		System.out.println(fileStatus.getPermission());
		System.out.println(fileStatus.getLen());
		BlockLocation[] blockLocations = fileStatus.getBlockLocations();
		for (BlockLocation blockLocation: blockLocations) 
		{
			String[] hosts = blockLocation.getHosts();
			for (String host: hosts) 
			{
				System.out.println(host);
			}
		}
        	System.out.println( "----------" );
	}

	//3 关闭资源
	fs.close();
        System.out.println( "HDFS list files" );
    }
}

6. 文件和文件夹判断 - ListStatus 原理

过程
  1. 创建java文件
  2. 写入代码 vim src/main/java/com/root/ListStatus.java
  3. mvn clean
  4. mvn package
  5. java -cp target/hdfs-mkdir-1.0-SNAPSHOT.jar com.root.ListStatus
代码
package com.root;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.BlockLocation;

public class ListStatus 
{
    public static void main( String[] args ) throws IOException, Exception, URISyntaxException
    {
	Configuration conf = new Configuration();

	//1 获取hdfs客户端对象
	FileSystem fs = FileSystem.get(new URI("hdfs://hadoop1:9000"), conf, "root");

	//2 判断操作
	FileStatus[] listStatus = fs.listStatus(new Path("/"));
	for (FileStatus fileStatus: listStatus) 
	{
		if (fileStatus.isFile()) 
		{
			// 文件
        		System.out.println("f: "+fileStatus.getPath().getName());
		} else 
		{
			// 文件夹
        		System.out.println("d: "+fileStatus.getPath().getName());
		}
	}

	//3 关闭资源
	fs.close();
        System.out.println( "HDFS list status" );
    }
}

cd - 进入
cd $_ 进入刚创建的文件夹

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号