上一篇中介紹了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安裝包中的本地方法添加到環境變量中。