前言:
本篇文章针对于2020秋季学期的复习操作,一是对该学期的巩固,二是让老师知道他的努力没有白费,同时,在此感谢徐老师对我们的精心教导…
本文所需材料
IntelliJ IDEA
官网→https://www.jetbrains.com/idea/
我的网盘→https://pan.baidu.com/s/1LPU4H0OcmH8NELdCwWOtIA
→t123
实操
前提:
打开hadoop集群
打开IDEA
①创建maven工程之javaAPI操作hadoop
上面的setting.xml里面可以定制成阿里云的,国内的服务器嘛,下载更快!
接着会下载maven项目的‘架子’
好了之后是这样的
接下来导入我们需要的jar包
在pom文件添加
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<!-- xml配置文件中, hdfs.version称之为“标签”, 2.7.6 称之为“标签体” →-->
<hdfs.version>2.7.6</hdfs.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- 导入hdfs api所需要的jar包对应的依赖-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hdfs.version}</version>
</dependency>
<!--hadoop-client hadoop的客户端,借助该模块下的api,操作远程的hadoop分布式文件系统 -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<!-- $:el表达式,expression language的缩写 读取properties节点下指定的子节点的标签体的值-->
<version>${hdfs.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>${hdfs.version}</version>
</dependency>
</dependencies>
添加好了我们刷新它会自动从远程仓库下载依赖包jar到本地
或者点击download sources and documentation也可以
出现以下依赖包且没有报红说明成功了!!!
配置log4j
resources
log4j.properties
log4j.rootLogger=WARN,stdout,file,R
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = ./logs/log-infos.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File=./logs/log-infos.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n
创建测试Java文件
/**
* Copyright (C), 2021-01-23
*
* @author 田信坤
* Author: TianXinKun
* Date: 2021/1/23 19:35
* Description: 测试JavaAPI操作远程hadoop集群
*/
package org.example;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* <功能简要> <br>
* <测试JavaAPI操作远程hadoop集群>
*
* @Author TianXinKun
* @createTime 2021/1/23 19:35
* This program is protected by copyright laws. <br/>
* @version : 1.0
*/
public class TestHadoop {
/**
* FileSystem就是对HDFS的抽取和封装
*/
private FileSystem fileSystem;
/**
* 对hdfs核心配置文件的抽取和封装,如:cores-site.xml,hdfs-site.xml
*/
Configuration conf;
/**
* 进行初始化
*/
@Before
public void init() {
//对全局变量进行初始化
conf = new Configuration();
try {
//URI: uniform resource indentifer, 统一资源标识符,如:hdfs,http,ftp等等协议所标注的远程资源
//URL: uniform resource locator, 统一资源定位符,一般指的是http所标识的网络资源,如:https://fanyi.baidu.com/#en/zh/artifact
//URL是URI的子集
URI uri = new URI("hdfs://Mymaster:8020/");
fileSystem = FileSystem.get(uri,conf);
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
/**
* 测试环境→ 用来验证java客户端能够正常连接远程的hadoop分布式集群
*
* [root@master ~]# hdfs dfs -cat /input/a.txt
* hello you
*
* hello kitty
*
* are you ok
* 最近可好
* 感觉如何?
* [root@master ~]#
*/
@Test
public void testEnv() {
System.out.println("fileSystem = " + fileSystem);
try (FSDataInputStream in = fileSystem.open(new Path("hdfs://Mymaster:8020/input/Test.txt"))) {
byte[] bytes = new byte[1024];
int len = -1;
while ((len = in.read(bytes)) != -1) {
String content = new String(bytes, 0, len);
System.out.print(content);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 进行资源释放
*/
@After
public void releaseResource() {
if (fileSystem != null) {
try {
fileSystem.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
进程确认
资源确定
在测试类中执行
结果正确,maven项目创建成功!!
那么本文复习到此结束!!!
编写于2021-1-23