一、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