Spring Hadoop官網(wǎng)地址如下:
站在用戶的角度思考問題,與客戶深入溝通,找到鶴壁網(wǎng)站設(shè)計(jì)與鶴壁網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋鶴壁地區(qū)。
https://projects.spring.io/spring-hadoop/
Spring Hadoop簡化了Apache Hadoop,提供了一個(gè)統(tǒng)一的配置模型以及簡單易用的API來使用HDFS、MapReduce、Pig以及Hive。還集成了其它Spring生態(tài)系統(tǒng)項(xiàng)目,如Spring Integration和Spring Batch.。
特點(diǎn):
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/
創(chuàng)建一個(gè)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
在工程中創(chuàng)建resource目錄以及配置文件,配置文件的名可以自定義,配置文件中增加如下內(nèi)容:
fs.defaultFS=${spring.hadoop.fsUri}
然后再創(chuàng)建一個(gè)屬性文件application.properties(文件名稱可自定義),把一些容易改變的配置信息配置在屬性文件下,例如我這里是將服務(wù)器的url配置在屬性文件里,內(nèi)容如下:
spring.hadoop.fsUri=hdfs://192.168.77.128:8020
完成以上操作之后,我們的Spring Hadoop開發(fā)環(huán)境就算是搭建完成了,畢竟使用Maven就是方便。
接下來我們來創(chuàng)建個(gè)測試類,測試一下是否能夠正常對HDFS文件系統(tǒng)進(jìn)行操作:
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文件系統(tǒng)
* @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上創(chuàng)建一個(gè)目錄
* @throws Exception
*/
@Test
public void testMkdirs()throws Exception{
fileSystem.mkdirs(new Path("/SpringHDFS/"));
}
}
以上的代碼是執(zhí)行成功的,然后到服務(wù)器上查看一下根目錄下是否有SpringHDFS這個(gè)目錄:
[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目錄已經(jīng)成功被創(chuàng)建了,這就代表我們配置的工程沒有問題。
既然創(chuàng)建目錄沒有問題,我們就再來寫一個(gè)測試方法,用來讀取HDFS上某個(gè)文件的內(nèi)容,代碼如下:
/**
* 讀取HDFS上的文件內(nèi)容
* @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();
}
以上的代碼執(zhí)行成功,控制臺(tái)輸出結(jié)果如下:
Chrome 2775
Firefox 327
MSIE 78
Safari 115
Unknown 6705
讀和寫都沒有問題了,這下就能愉快的在工程里使用Spring Hadoop簡化我們的開發(fā)了。
以上介紹了Spring Hadoop訪問HDFS,接下來再簡單介紹一下使用Spring Boot訪問HDFS,使用Spring Boot會(huì)更加簡單。
首先需要在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; // 用于執(zhí)行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);
}
}
控制臺(tái)輸出如下:
> 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