Hadoop集成Spring的使用
Spring Hadoop简单概述
Spring Hadoop官网地址如下:
站在用户的角度思考问题,与客户深入沟通,找到鹤壁网站设计与鹤壁网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、成都网站设计、企业官网、英文网站、手机端网站、网站推广、域名与空间、网页空间、企业邮箱。业务覆盖鹤壁地区。
https://projects.spring.io/spring-hadoop/
Spring Hadoop简化了Apache Hadoop,提供了一个统一的配置模型以及简单易用的API来使用HDFS、MapReduce、Pig以及Hive。还集成了其它Spring生态系统项目,如Spring Integration和Spring Batch.。
特点:
- 支持创建Hadoop应用,配置使用依赖注入和运行标准的java应用程序和使用Hadoop的命令行工具。
- 集成Spring Boot,可以简单地创建Spring应用程序去连接HDFS进行读写数据。
- 创建和配置,使用java的MapReduce,Streaming,Hive,Pig或HBase。
- 扩展Spring Batch支持创建基于Hadoop的工作流的任何类型的Hadoop Job或HDFS的操作。
- 脚本HDFS操作使用任何基于JVM的脚本语言。
- 基于SpringBoot轻松地创建自定义的基础应用,应用可以部署在YARN上。
- 支持DAO,可以使用模板或回调的方式操作Hbase
- 支持Hadoop安全验证
Spring Hadoop2.5的官方文档及API地址:
https://docs.spring.io/spring-hadoop/docs/2.5.0.RELEASE/reference/html/
https://docs.spring.io/spring-hadoop/docs/2.5.0.RELEASE/api/
Spring Hadoop开发环境搭建及访问HDFS文件系统
创建一个maven工程,配置依赖如下:
cloudera
https://repository.cloudera.com/artifactory/cloudera-repos/
true
false
UTF-8
2.6.0-cdh6.7.0
org.apache.hadoop
hadoop-client
${hadoop.version}
provided
com.kumkee
UserAgentParser
0.0.1
junit
junit
4.10
test
org.springframework.data
spring-data-hadoop
2.5.0.RELEASE
maven-assembly-plugin
jar-with-dependencies
在工程中创建resource目录以及配置文件,配置文件的名可以自定义,配置文件中增加如下内容:
fs.defaultFS=${spring.hadoop.fsUri}
然后再创建一个属性文件application.properties(文件名称可自定义),把一些容易改变的配置信息配置在属性文件下,例如我这里是将服务器的url配置在属性文件里,内容如下:
spring.hadoop.fsUri=hdfs://192.168.77.128:8020
完成以上操作之后,我们的Spring Hadoop开发环境就算是搭建完成了,毕竟使用Maven就是方便。
接下来我们来创建个测试类,测试一下是否能够正常对HDFS文件系统进行操作:
package org.zero01.spring;
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 org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.io.IOException;
/**
* @program: hadoop-train
* @description: 使用Spring Hadoop来访问HDFS文件系统
* @author: 01
* @create: 2018-04-04 17:39
**/
public class SpringHadoopApp {
private ApplicationContext ctx;
private FileSystem fileSystem;
@Before
public void setUp() {
ctx = new ClassPathXmlApplicationContext("beans.xml");
fileSystem = (FileSystem) ctx.getBean("fileSystem");
}
@After
public void tearDown() throws IOException {
ctx = null;
fileSystem.close();
}
/**
* 在HDFS上创建一个目录
* @throws Exception
*/
@Test
public void testMkdirs()throws Exception{
fileSystem.mkdirs(new Path("/SpringHDFS/"));
}
}
以上的代码是执行成功的,然后到服务器上查看一下根目录下是否有SpringHDFS这个目录:
[root@hadoop000 ~]# hdfs dfs -ls /
Found 7 items
-rw-r--r-- 3 root supergroup 2769741 2018-04-02 21:13 /10000_access.log
drwxr-xr-x - root supergroup 0 2018-04-04 17:50 /SpringHDFS
drwxr-xr-x - root supergroup 0 2018-04-02 21:22 /browserout
drwxr-xr-x - root supergroup 0 2018-04-02 20:29 /data
drwxr-xr-x - root supergroup 0 2018-04-02 20:31 /logs
drwx------ - root supergroup 0 2018-04-02 20:39 /tmp
drwxr-xr-x - root supergroup 0 2018-04-02 20:39 /user
[root@hadoop000 ~]# hdfs dfs -ls /SpringHDFS
[root@hadoop000 ~]#
可以看到SpringHDFS目录已经成功被创建了,这就代表我们配置的工程没有问题。
既然创建目录没有问题,我们就再来写一个测试方法,用来读取HDFS上某个文件的内容,代码如下:
/**
* 读取HDFS上的文件内容
* @throws Exception
*/
@Test
public void testText()throws Exception{
FSDataInputStream in = fileSystem.open(new Path("/browserout/part-r-00000"));
IOUtils.copyBytes(in, System.out, 1024);
in.close();
}
以上的代码执行成功,控制台输出结果如下:
Chrome 2775
Firefox 327
MSIE 78
Safari 115
Unknown 6705
读和写都没有问题了,这下就能愉快的在工程里使用Spring Hadoop简化我们的开发了。
Spring Boot访问HDFS文件系统
以上介绍了Spring Hadoop访问HDFS,接下来再简单介绍一下使用Spring Boot访问HDFS,使用Spring Boot会更加简单。
首先需要在pom.xml文件中,加入Spring Boot的依赖:
org.springframework.data
spring-data-hadoop-boot
2.5.0.RELEASE
package org.zero01.spring;
import org.apache.hadoop.fs.FileStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.hadoop.fs.FsShell;
/**
* @program: hadoop-train
* @description: 使用spring boot来访问HDFS
* @author: 01
* @create: 2018-04-04 18:45
**/
@SpringBootApplication
public class SpringBootHDFSApp implements CommandLineRunner {
@Autowired
FsShell fsShell; // 用于执行hdfs shell命令的对象
public void run(String... strings) throws Exception {
// 查看根目录下的所有文件
for (FileStatus fileStatus : fsShell.ls("/")) {
System.out.println("> " + fileStatus.getPath());
}
}
public static void main(String[] args) {
SpringApplication.run(SpringBootHDFSApp.class, args);
}
}
控制台输出如下:
> hdfs://192.168.77.128:8020/
> hdfs://192.168.77.128:8020/10000_access.log
> hdfs://192.168.77.128:8020/SpringHDFS
> hdfs://192.168.77.128:8020/browserout
> hdfs://192.168.77.128:8020/data
> hdfs://192.168.77.128:8020/logs
> hdfs://192.168.77.128:8020/tmp
> hdfs://192.168.77.128:8020/user
分享文章:Hadoop集成Spring的使用
文章来源:http://cdiso.cn/article/pipgej.html