大數據【二】HDFS部署及文件讀寫(包含eclipse hadoop配置)


一  原理闡述

1'  DFS

    分布式文件系統(即DFS,Distributed File System),指文件系統管理的物理存儲資源不一定直接連接在本地節點上,而是通過計算機網絡與節點相連。該系統架構於網絡之上,勢必會引入網絡編程的復雜性,因此分布式文件系統比普通磁盤文件系統更為復雜。

2'  HDFS

    借此,關於GFS和HDFS的區別與聯系查看 我於博客園找到的前輩的博客>>http://www.cnblogs.com/liango/p/7136448.html

    HDFS(Hadoop Distributed File System)為大數據平台其它所有組件提供了最基本的存儲功能。

    特征:高容錯、高可靠、可擴展、高吞吐率等,為大數據存儲和處理提供了強大的底層存儲架構。

    HDFS是一個主/從(master/slave)體系結構,從最終用戶的角度來看,它就像傳統的文件系統,可通過目錄路徑對文件執行CRUD操作。由於其分布式存儲的性質,HDFS集群擁有一個NameNode和一些DataNodes,NameNode管理文件系統的元數據,DataNode存儲實際的數據。

    HDFS開放文件系統的命名空間以便用戶以文件形式存儲數據,秉承“一次寫入、多次讀取”的原則。客戶端通過NameNode和DataNodes的交互訪問文件系統,聯系NameNode以獲取文件的元數據,而真正的文件I/O操作是直接和DataNode進行交互的。

3‘  適用場景

  HDFS 提供高吞吐量應用程序數據訪問功能,適合帶有大型數據集的應用程序,以下是一些常用的應用場景:

      數據密集型並行計算:數據量極大,但是計算相對簡單的並行處理,如大規模Web信息搜索;

      計算密集型並行計算:數據量相對不是很大,但是計算較為復雜的並行計算,如3D建模與渲染、氣象預報和科學計算;

      數據密集與計算密集混合型的並行計算,如3D電影的渲染。

  HDFS在使用過程中有以下限制:

      HDFS不適合大量小文件的存儲,因NameNode將文件系統的元數據存放在內存中,因此存儲的文件數目受限於NameNode的內存大小;

      HDFS適用於高吞吐量,而不適合低時間延遲的訪問;

      流式讀取的方式,不適合多用戶寫入一個文件(一個文件同時只能被一個客戶端寫),以及任意位置寫入(不支持隨機寫);

      HDFS更加適合寫入一次,讀取多次的應用場景。

3’  基本命令

    格式:  hadoop fs -cmd args  其中,cmd為具體的操作,args為參數

    常用命令:

        hadoop fs -mkdir /user/trunk          #建立目錄/user/trunk

        hadoop fs -ls /user                  #查看/user目錄下的目錄和文件

        hadoop fs -lsr /user                 #遞歸查看/user目錄下的目錄和文件

        hadoop fs -put test.txt /user/trunk      #上傳test.txt文件至/user/trunk

        hadoop fs -get /user/trunk/test.txt      #獲取/user/trunk/test.txt文件

        hadoop fs -cat /user/trunk/test.txt      #查看/user/trunk/test.txt文件內容

        hadoop fs -tail /user/trunk/test.txt      #查看/user/trunk/test.txt文件的最后1000行

        hadoop fs -rm /user/trunk/test.txt       #刪除/user/trunk/test.txt文件

        hadoop fs -help ls                   #查看ls命令的幫助文檔

二  HDFS部署      

主要步驟如下:

1. 配置Hadoop的安裝環境;

2. 配置Hadoop的配置文件;

3. 啟動HDFS服務;

4. 驗證HDFS服務可用。

1‘  查看是否存在hadoop安裝目錄   ls  /usr/cstor/hadoop  如果沒有,利用工具從本地導入hadoop安裝文件。

        

   查看jdk是否存在,如果沒有同上方法導入

        

2’  確認集群服務器之間可SSH免密登錄

      使用ssh工具登錄到每一台服務器,執行命令ssh 主機名,確認每台集群服務器均可SSH免密登錄。方法查看我的博客 >> http://www.cnblogs.com/1996swg/p/7270728.html

3‘  查看hadoop_env.sh 文件,此文件只需修改JAVA_HOME

      用vim編輯器修改此文件,將export JAVA_HOME=${JAVA_HOME}改為jdk的目錄,例如在我的電腦上是export JAVA_HOME=/usr/local/jdk1.7.0_79/

4’  指定HDFS主節點

      此處需要配置文件  core-site.xml  ,查看該文件,並<configuration></configuration>標簽之間修改如圖所示的配置:

      

5‘  拷貝該配置到集群其他子集上,首先查看你的集群所有子集

      

    輸入命令  for  x  in  `cat  ~/data/2/machines` ; do  echo  $x ; scp  -r  /usr/cstor/hadoop/etc  $x:/usr/cstor/hadoop  ; done;  實現拷貝

6’  啟動HDFS節點

      首先在master服務器上格式化主節點   hdfs  namenode  -format

      其次配置slaves文件,將localhost修改為slave1~3;   

      最后在hadoop安裝目錄下統一啟動HDFS;

      用jps  命令在各個子集檢驗是否啟動節點成功;

        

7‘  hdfs配置成功后可以在client上向HDFS上傳文件:

        

 

三   讀寫HDFS文件

1’   配置client服務器classpath

     (1) 使用ssh工具登錄client服務器,執行命令vi /etc/profile,編輯該文件。Linux 中/etc/profile文件的改變會涉及到系統的環境,也就是有關Linux環境變量。

      修改設置Classpath的目的,在於告訴Java執行環境,在哪些目錄下可以找到您所要執行的Java程序(.class文件)。

      將末尾的如下幾行:

JAVA_HOME=/usr/local/jdk1.7.0_79/

export JRE_HOME=/usr/local/jdk1.7.0_79//jre

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib

export HADOOP_HOME=/usr/cstor/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

      用下列行進行替換(注意路徑不同自行修改):

JAVA_HOME=/usr/local/jdk1.7.0_79/

export HADOOP_HOME=/usr/cstor/hadoop

export JRE_HOME=/usr/local/jdk1.7.0_79//jre

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$HADOOP_HOME/share/hadoop/common/*:$HADOOP_HOME/share/hadoop/common/lib/*

export PATH=$PATH:$HADOOP_HOME/bin

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_HOME/lib/native"

   (2) 執行命令source /etc/profile,使剛才的環境變量修改生效;

 

2’  在client服務器編寫HDFS寫程序

      (1)在client服務器上執行命令vi WriteFile.java,編寫HDFS寫文件程序:

 1 import org.apache.hadoop.conf.Configuration;
 2 import org.apache.hadoop.fs.FSDataOutputStream;
 3 import org.apache.hadoop.fs.FileSystem;
 4 import org.apache.hadoop.fs.Path;
 5 public class WriteFile {
 6 public static void main(String[] args)throws Exception{
 7 Configuration conf=new Configuration();
 8 FileSystem hdfs = FileSystem.get(conf); 
 9 Path dfs = new Path("/weather.txt"); 
10 FSDataOutputStream outputStream = hdfs.create(dfs); 
11 outputStream.writeUTF("nj 20161009 23\n");
12 outputStream.close();
13 }
14 }
WriteFile.java

 

      (2)編譯並打包HDFS寫程序

        使用javac編譯剛剛編寫的代碼,並使用jar命令打包為hdpAction.jar

        

      (3)執行HDFS寫程序

          在client服務器上使用hadoop jar命令執行hdpAction.jar

        

          查看是否已生成weather.txt文件,若已生成,則查看文件內容是否正確:

        

 

 3‘  在client服務器編寫HDFS讀程序

       (1)在client服務器上執行命令vi ReadFile.java,編寫HDFS讀WriteFile.txt文件程序: 

 1 import java.io.IOException;
 2  
 3 import org.apache.Hadoop.conf.Configuration;
 4 import org.apache.Hadoop.fs.FSDataInputStream;
 5 import org.apache.Hadoop.fs.FileSystem;
 6 import org.apache.Hadoop.fs.Path;
 7  
 8 public class ReadFile {
 9   public static void main(String[] args) throws IOException {
10     Configuration conf = new Configuration();
11     Path inFile = new Path("/weather.txt"); //讀取WriteFile.txt文件   
12     FileSystem hdfs = FileSystem.get(conf);
13     FSDataInputStream inputStream = hdfs.open(inFile);
14     System.out.println("myfile: " + inputStream.readUTF());
15     inputStream.close();
16   }
17 }
ReadFile.java

        (2)編譯文件並打包,然后執行;

       

 

四  配置eclipase  Hadoop插件並進行打包上傳

1’  首先下載eclipse hadoop插件,解壓為jar文件,將其放置在eclipse文件位置的plugins文件夾下,例如D:\eclipse-standard-kepler-SR2-win32\eclipse\plugins

2‘  配置本地的hadoop環境,需下載hadoop組件(到阿帕奇下吧^_^,http://hadoop.apache.org/,解壓為

3'  打開eclipase新建project查看是否已經有Map/Reduce Project的選項。第一次新建Map/Reduce項目時,需要指定hadoop解壓后的位置(即第二部組件解壓的位置),在新建時項目填寫界面右中間有hadoop的路徑填寫;

4’  編寫java文件,例如上述的ReadFile.java

5‘  打包成jar文件,右擊項目的export的jar file,然后選擇所需的文件打包成jar文件,(此步驟是重點)

    >>>>>>>>>>>>

6’  使用WinSCP、XManager或其它SSH工具的sftp工具上傳剛剛生成的hdpAction.jar包至client服務器(我用的是工具),並在client服務器上使用hadoop jar命令執行hdpAction.jar,查看程序運行結果。

    

   >運行該jar文件  hadoop jar ~/hdpAction.jar ReadFile
      

 

總結:

  對於HDFS文件讀寫的學習,很基礎同時也很重要,在后面關於yarn,mapreduce等的學習都要基於此處之上才能逐步了解。

  只有一種失敗就是半途而廢。所以每天的學習會逐步積累,潛移默化。

  

    

    

 

      

 

 

         

 

   

 

 

        

 

 


免責聲明!

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



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