hadoop集群訪問——Hadoop客戶端訪問、Java API訪問


上一篇中介紹了hadoop集群搭建方式,本文介紹集群的訪問。集群的訪問方式有兩種:hadoop客戶端訪問,Java API訪問。

一、集群客戶端訪問

  Hadoop采用C/S架構,可以通過客戶端對集群進行操作,其實在前面搭建的集群環境中,每個集群節點都可以作為一個客戶端進行集群訪問,但是一般場景下,會將集群服務器作為整體,從外部設置客戶端對集群進行訪問。

  為了能從集群服務器外部訪問,需要一台與集群服務器在同一網段的主機(可以與集群節點Ping通),安裝hadoop作為客戶端機器,並將該機器與集群服務器配置到同一集群內。

1、安裝JDK

2、安裝Hadoop

與集群搭建中一樣,需要安裝hadopp

3、客戶端機器配置core-site.xml

4、客戶端機器配置mapred-site.xml

5、客戶端機器配置yarn-site.xml

 

二、網頁訪問

namenodeIP:50070

sourcemangerIP:8088

 

三、Java API訪問

此種方法通過hadoop提供的API編寫客戶端程序,從而實現對hadoop的操作。java程序的編寫一般是在Windows環境下的,因此需要首先對win環境進行配置。

(一)Win環境配置

1、下載並解壓hadoop安裝包

這里注意不要放到含有空格的目錄下,雖然網上有些解決方案,但是我試了沒起作用,放到不含空格的目錄下最省事。

2、配置環境變量

  • 增加HADOOP_HOME變量,變量值為你的hadoop目錄

  • 配置Path變量,增加內容:

%HADOOP_HOME%\bin\

%HADOOP_HOME\sbin\

3、配置hadoop中的java home

  • 編輯文件,hadoop目錄下\etc\hadoop\hadoop-env.cmd

修改其中JAVA_HOME變量,變量值為jdk地址,jdk的地址注意同樣不要包含空格,我是把原來的jdk復制一份到了沒有空格的目錄下。

4、放置文件

下載https://github.com/steveloughran/winutils

其中對應版本bin目錄下的winutil.exe放置到你的hadoop目錄的bin目錄下

hadoop.dll文件放置到C:Windows\System32下

(二)Java程序開發

1、導入jar包

hadoop安裝文件夾/share/hadoop路徑下為hadoop提供的jar包,按需導入。

2、編程

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;

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

public class HdfsClient {

    FileSystem fs = null;

    public static void main(String[] args){
        //創建一個配置對象,用於設置集群上的塊大小,副本數量等。
        Configuration conf = new Configuration();
        conf.set("dfs.replication", "2");
        conf.set("dfs.blocksize", "64m");

        //uri,
        //root:指定用戶,如果不填寫,會默認當前win用戶

        try {
//            構造一個訪問指定HDFS的客戶端對象,
//            參數一:HDFS系統的URI,
//            參數二:客戶端要配置參數。
//            參數三:客戶端用戶名
            FileSystem fs = FileSystem.get(new URI("hdfs://192.168.1.237:9000/"), conf, "root");
            fs.copyFromLocalFile(new Path("I:/[neubt]Friends_搜狐原畫版.torrent"), new Path("/home/"));
            fs.close();

        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }

    @Before
    public void inint() throws Exception {
        URI uri = new URI("hdfs://192.168.1.237:9000/");

        Configuration conf = new Configuration();
        conf.set("dfs.replication", "2");
        conf.set("dfs.blocksize", "64m");
        fs = FileSystem.get(new URI("hdfs://192.168.1.237:9000/"), conf, "root");

    }

    /*
    從hdfs下載文件
     */
    @Test
    public void testDownLoad() throws IOException {
        Path localPath = new Path("I:/hdfstest/Friends_搜狐原畫版.torrent");
        System.out.println(localPath);
        
        fs.copyToLocalFile(new Path("/home/[neubt]Friends_搜狐原畫版.torrent"), localPath);
//        fs.copyToLocalFile(new Path("/home/log4j-1.2.17.zip"), new Path("/hdfstest"));
        fs.close();

    }

}

文件的上傳未涉及訪問本地磁盤,文件下載時則需要調用本地方法來實現對本地磁盤庫的訪問,本地磁盤庫的訪問需要調用hadoop提供的C語言庫,該庫在hadoop的安裝文件中提供,因此需要將hadoop安裝包中的本地方法添加到環境變量中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM