【大数据开发】HDFS——Maven安装配置、API操作、文件上传

一、maven的安装配置

1、解压安装包,路径不要带中文,不要有空格等特殊字符

2、创建本地库目录,

3、配置maven的运行参数conf/setting.xml

1、配置本地仓库的路径

在文件的52行左右,添加一行
<localRepository>F:\apache-maven-3.3.9\repository</localRepository>

2、配置远程库的地址
在mirrors节点下增加配置,165行以下

	<mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

4、尽量将setting.xml配置文件覆盖用户目录下的.m2目录下的setting.xml文件

5、maven的环境变量配置

在系统变量中增加一项:MAVEN_HOME=maven的安装目录

在PATH中将MAVEN加入bin目录

二、maven与idea的整合

在这里插入图片描述

创建maven项目

在这里插入图片描述

项目的选择
在这里插入图片描述

配置项目的属性

在这里插入图片描述

添加项目的依赖

先打开maven包管理官网
https://mvnrepository.com/

搜索hadoop
操作hdfs的客户端程序需要依赖的包
hadoop-common
hadoop-client
hadoop-hdfs

jdk的依赖是一定要的

<dependencies>
    <!-- jdk依赖 -->
    <dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.8.0</version>
        <scope>system</scope>
        <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-client -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.7.6</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.6</version>
    </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
    

maven项目的代码结构
在这里插入图片描述

三、客户端配置访问的hdfs的集群

conf.set("fs.defaultFS","hdfs://host01:9000");

host01需要加到window上的hosts文件中

C:\Windows\System32\drivers\etc\hosts
192.168.137.121 host01
192.168.137.122 host02
192.168.137.123 host03

文件上传代码

package com.qfedu.bigdata.hdfsapi;

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

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

/**
 * 将文件上传到hdfs上
 */
public class hdfsTest {
    public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
        //一、首先,咱们需要获取到一个操作文件系统的客户端
//        DistributedFileSystem dfs = new DistributedFileSystem();

        //二、构造配置参数对象
        //cong FileSystem.get方法中去构造了一个访问hdfs的客户端以及hdfs的访问地址
        //在new Configuration的是,它会去加载jar包中的hdfs-default.xml文件
        //然后再加载classpath中的hdfs-site.xml文件
        //先创建一个配置对象
        Configuration conf = new Configuration();

        //参数优先级
        //1、客户端代码中设置的参数优先级最高
        //2、然后是classpath中的用户自定义配置文件
        //3、服务器默认的配置文件

        //三、操作分布式文件系统(设置配置项)
        conf.set("dfs.replication","2");
        conf.set("dfs.blocksize","64m");

        //客户端配置访问的hdfs的集群
        //如果get方法传入了URI参数,则可以不这只该选项
        conf.set("fs.defaultFS","hdfs://qianfeng001:9000");

        //处理用户问题的几种方式
        //1、配置的jvm的环境
        //2、设置系统的环境变量
//        System.setProperty("HADOOP_USER_NAME","root");


        //获取一个专门的分布式文件系统
//        dfs.initialize(new URI("hdfs://qianfeng001:9000/"),conf);


        //获取文件系统操作客户端有6种方式
        //一般来说,操作的不确定,所以使用下面的方式
        FileSystem fs = FileSystem.get(conf);
        //在获取操作客户端的同时可以通过传入参数的方式来设置操作客户端的用户
//        FileSystem fs = FileSystem.get(new URI("hdfs://qianfeng001:9000"),conf,"root");

//        FileSystem fs = FileSystem.newInstance(new URI("hdfs://qianfeng001:9000"), conf, "root");

        //调用文件上传的api
//        fs.copyFromLocalFile(new Path("D:\\sz2002\\day35\\docs\\hadoop默认配置文件\\core-default.xml"),new Path("/sz2002_2.dat"));


        //下载文件导本地
//        fs.copyToLocalFile(new Path("/sz2002.dat"),new Path("e:/abc123.xml"));

        fs.copyToLocalFile(false,new Path("/sz2002.dat"),new Path("f:/abc123.xml"),true);


        //关闭资源
        fs.close();

        //提示
        System.out.println("--上传成功!!!我为高圆圆打call!!!------------------------------------");
    }
}

如果遇到执行代码出错

Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=dell, access=WRITE, inode="/":root:supergroup:drwxr-xr-x

-- 操作权限问题
window上的默认操作用户是window的登陆用户,即dell,该用户在hdfs集群上没有对/根目录的操作权限

解决方案

1、配置程序的配置项

在这里插入图片描述

修改VM OPTIONS参数

在这里插入图片描述

HADOOP_USER_NAME指代操作hadoop集群的用户

-D

-DHADOOP_USER_NAME=root

//2、设置系统的环境变量

System.setProperty(“HADOOP_USER_NAME”,“root”);

3、//在获取操作客户端的同时可以通过传入参数的方式来设置操作客户端的用户FileSystem fs = FileSystem.get(new URI("hdfs://host01:9000"),conf,"root");

获取FileSystem操作对象的 方式有6种

下载文件到本地

错误:
java.io.IOException: (null) entry in command string: null chmod 0644 E:\sz2002.dat

原因:
hadoop的环境问题,在window上运行程序需要依赖dll文件,但是咱们不存在hadoop的动态库

解决方案:

需要配置hadoop的window运行环境

1、解压hadoop的安装包
2、需要hadoop在window的运行依赖hadoop.dll和winutils.exe
解压hadoo2.7.3的hadoop.dll和winutils.exe.zip  .zip文件下的bin下的所有文件导刚刚hadoop安装包解压下的bin目录下
3、配置hadoop的环境变量
HADOOP_HOME
PATH中加入hadoop的bin目录
4、重启idea
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值