Hadoop_07_HDFS的Java API 操作

通过Java API来访问HDFS

1.Windows上配置环境变量

  解压Hadoop,然后把Hadoop的根目录配置到HADOOP_HOME环境变量里面

  然后把HADOOP_HOME/lib和HADOOP_HOME/bin配置到path里面

2.替换bin目录

  将官网下载的Hadoop目录下面的bin目录替换成Windows下编译的Hadoop的bin目录:

  我已经上传了自己编译好的hadoop-2.6.1的bin目录,可以从https://pan.baidu.com/s/1P50N60Qb16zuZxSwPq6HaA下载

  也可参考他人博客http://blog.csdn.net/mrbcy/article/details/55806809 自已编译适合自己电脑系统的版本即可

3.Eclipse需要的jar包依赖

需要添加的jar包列表如下:

  • hadoop/share/hadoop/common/hadoop-common-2.6.4.jar
  • hadoop/share/hadoop/common/lib/*.jar
  • hadoop/share/hadoop/hdfs/hadoop-hdfs-2.6.4.jar
  • hadoop/share/hadoop/hdfs/lib/*.jar

4.使用客户端操作HDFS文件系统

4.1.上传文件(有HADOOP_HOME就可以上传)

package cn.bigdata.hdfs;
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.junit.Before;
import org.junit.Test;
/**
 * 客户端去操作HDFS时,是有一个用户身份的
 * 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=root
 * 也可以在构造客户端fs对象时,通过参数传递进去
 */

public class HdfsCientDemo {
    private FileSystem fs  = null;
    Configuration conf = null;
    @Before
    public void inin() throws IOException, InterruptedException, URISyntaxException{
        Configuration conf = new Configuration();
        //拿到一个文件系统操作的客户端实例对象,最后一个参数为用户名,nameNode访问路径:hdfs://shizhan2:9000
        fs = FileSystem.get(new URI("hdfs://shizhan2:9000"),conf,"root");
    }
    
    //上传文件
    @Test
    public void testUpload() throws Exception{
        fs.copyFromLocalFile(new Path("c:/regist.log"), new Path("/regist-copy.log"));
        fs.close();
    }
}

运行后,上传文件成功:

4.2.下载文件(替换了bin才可以下载)

   @Test
    public void testDownload() throws Exception {
        fs.copyToLocalFile(false, new Path("/regist-copy.log"), new Path("D:/"), false);
        fs.close();
    }

4.3.下载文件(替换了bin才可以下载)

  

猜你喜欢

转载自www.cnblogs.com/yaboya/p/9192461.html