<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ### 3.1 實驗目的 1. 會在Linux環境下編寫讀寫HDFS文件的代碼; 2. 會使用jar命令打包代碼; 3. 會在client服務器上運行HDFS讀寫程序; 4. 會在Windows上安裝Eclipse Hadoop插件; 5. 會在Eclipse環境編寫讀寫HDFS文件的代碼; 6. 會使用Eclipse打包代碼; 7. 會使用Xftp工具將實驗電腦上的文件上傳至client服務器。 ### 3.2 實驗要求 實驗結束時,每位學生均已搭建HDFS開發環境;編寫了HDFS寫、讀代碼;在client機上執行了該寫、讀程序。通過實驗了解HDFS讀寫文件的調用流程,理解HDFS讀寫文件的原理。 ### 3.3 實驗原理 #### 3.3.1 Java Classpath Classpath設置的目的,在于告訴Java執行環境,在哪些目錄下可以找到您所要執行的Java程序所需要的類或者包。 Java執行環境本身就是一個平臺,執行于這個平臺上的程序是已編譯完成的Java程序(后面會介紹到Java程序編譯完成之后,會以.class文件存在)。如果將Java執行環境比喻為操作系統,如果設置Path變量是為了讓操作系統找到指定的工具程序(以Windows來說就是找到.exe文件),則設置Classpath的目的就是讓Java執行環境找到指定的Java程序(也就是.class文件)。 有幾個方法可以設置Classpath,較簡單的方法是在系統變量中新增Classpath環境變量。以Windows 7操作系統為例,右鍵點擊計算機→屬性→高級系統設置→環境變量,在彈出菜單的“系統變量”下單擊“新建”按鈕,在“變量名”文本框中輸入Classpath,在“變量值”文本框中輸入Java類文件的位置。例如可以輸入“.; D:\Java\jdk1.7.0_79\lib\tools.jar; D:\Java\jdk1.7.0_79\lib\rt.jar”,每一路徑中間必須以英文;作為分隔。如圖3-1所示: ![](https://box.kancloud.cn/125bfc23ade7f642c37ea1e9c61ca28b_420x442.png) 事實上JDK 7.0默認就會到當前工作目錄(上面的.設置),以及JDK的lib目錄(這里假設是D:\Java\jdk1.7.0_796\lib)中尋找Java程序。所以如果Java程序是在這兩個目錄中,則不必設置Classpath變量也可以找得到,將來如果Java程序不是放置在這兩個目錄時,則可以按上述設置Classpath。 如果所使用的JDK工具程序具有Classpath命令選項,則可以在執行工具程序時一并指定Classpath。例如: javac -classpath classpath1;classpath2...其中classpath1、classpath 2是實際要指定的路徑。也可以在命令符模式下執行以下的命令,直接設置環境變量,包括Classpath變量(這個設置在下次重新打開命令符模式時就不再有效): set CLASSPATH=%CLASSPATH%;classpath1;classpath2...總而言之,設置Classpath的目的,在于告訴Java執行環境,在哪些目錄下可以找到您所要執行的Java程序(.class文件)。 #### 3.3.2 Eclipse Hadoop插件 Eclipse 是一個跨平臺的自由集成開發環境(IDE)。通過安裝不同的插件,Eclipse可以支持不同的計算機語言,比如C++和Python等開發工具,亦可以通過hadoop插件來擴展開發Hadoop相關程序。 實際工作中,Eclipse Hadoop插件需要根據hadoop集群的版本號進行下載并編譯,過程較為繁瑣。為了節約時間,將更多的精力用于實現讀寫HDFS文件,在大數據實驗一體機的相關下載頁面中已經提供了2.7.1版本的hadoop插件和相關的hadoop包下載,實驗人員可以直接下載這些插件,快速在Eclipse中進行安裝,開發自己的hadoop程序。 ### 3.4 實驗步驟 #### 3.4.1 配置client服務器classpath 使用ssh工具登錄client服務器,執行命令vi /etc/profile,編輯該文件,將末尾的如下幾行: ~~~ 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" ~~~ 執行命令source /etc/profile,使剛才的環境變量修改生效: ~~~ [root@client ~]# source /etc/profile ~~~ #### 3.4.2 在client服務器編寫HDFS寫程序 在client服務器上執行命令vi WriteFile.java,編寫HDFS寫文件程序: ~~~ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class WriteFile { public static void main(String[] args)throws Exception{ Configuration conf=new Configuration(); FileSystem hdfs = FileSystem.get(conf); Path dfs = new Path("/weather.txt"); FSDataOutputStream outputStream = hdfs.create(dfs); outputStream.writeUTF("nj 20161009 23\n"); outputStream.close(); } } ~~~ #### 3.4.3 編譯并打包HDFS寫程序 使用javac編譯剛剛編寫的代碼,并使用jar命令打包為hdpAction.jar: ~~~ [root@client ~]# javac WriteFile.java [root@client ~]# jar -cvf hdpAction.jar WriteFile.class added manifest adding: WriteFile.class(in = 833) (out= 489)(deflated 41%) ~~~ #### 3.4.4 執行HDFS寫程序 在client服務器上使用hadoop jar命令執行hdpAction.jar: ~~~ [root@client ~]# hadoop jar ~/hdpAction.jar WriteFile ~~~ 查看是否已生成weather.txt文件,若已生成,則查看文件內容是否正確: ~~~ [root@client ~]# hadoop fs -ls / Found 2 items -rw-r--r-- 3 root supergroup 29 2016-12-05 12:28 /machines -rw-r--r-- 3 root supergroup 17 2016-12-05 14:54 /weather.txt [root@client ~]# hadoop fs -cat /weather.txt nj 20161009 23 ~~~ #### 3.4.5 在client服務器編寫HDFS讀程序 在client服務器上執行命令vi ReadFile.java,編寫HDFS讀文件程序: ~~~ import java.io.IOException; import org.apache.Hadoop.conf.Configuration; import org.apache.Hadoop.fs.FSDataInputStream; import org.apache.Hadoop.fs.FileSystem; import org.apache.Hadoop.fs.Path; public class ReadFile { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); Path inFile = new Path("/weather.txt"); FileSystem hdfs = FileSystem.get(conf); FSDataInputStream inputStream = hdfs.open(inFile); System.out.println("myfile: " + inputStream.readUTF()); inputStream.close(); } } ~~~ #### 3.4.6 編譯并打包HDFS讀程序 使用javac編譯剛剛編寫的代碼,并使用jar命令打包為hdpAction.jar ~~~ [root@client ~]# javac ReadFile.java [root@client ~]# jar -cvf hdpAction.jar ReadFile.class added manifest adding: ReadFile.class(in = 1093) (out= 597)(deflated 45%) ~~~ #### 3.4.7 執行HDFS讀程序 在client服務器上使用hadoop jar命令執行hdpAction.jar,查看程序運行結果: ~~~ [root@client ~]# hadoop jar ~/hdpAction.jar ReadFile myfile: nj 20161009 23 [root@client ~]# ~~~ #### 3.4.8 安裝與配置Eclipse Hadoop插件 關閉Eclipse軟件,將hadoop-eclipse-plugin-2.7.1.jar文件拷貝至eclipse安裝目錄的plugins文件夾下。如圖3-2和圖3-3所示: ![](https://box.kancloud.cn/fe68df5d0c34e83f13a036d04c5e66fa_486x56.jpg) ![](https://box.kancloud.cn/da5f91b51f4ed078f0232482c1d0d293_162x51.jpg) 接下來,我們需要準備本地的Hadoop環境,用于加載hadoop目錄中的jar包,只需解壓hadoop-2.7.1.tar.gz文件,解壓過程中可能會遇到如下錯誤,點擊關閉忽略即可。 現在,我們需要驗證是否可以用Eclipse新建Hadoop(HDFS)項目。打開Eclipse軟件,依次點擊FileàNewàOther,查看是否已經有Map/Reduce Project的選項。第一次新建Map/Reduce項目時,需要指定hadoop解壓后的位置。如圖3-5、圖3-6和圖3-7所示: ![](https://box.kancloud.cn/aed78a35248fff5c5b584bb3f31a8983_382x178.jpg) 圖3-5 Eclipse新建Map/Reduce項目 ![](https://box.kancloud.cn/661fd387248bbafdf4047f613d297614_299x55.jpg) 圖3-6 設置Hadoop安裝目錄 ![](https://box.kancloud.cn/b2d38dd1ef7d0e8aab4c7a4b128004c7_327x55.jpg) 圖3-7 指定Hadoop安裝目錄 #### 3.4.9 使用Eclipse開發并打包HDFS寫文件程序 打開Eclipse,依次點擊FileàNewàMap/Reduce Project或FileàNewàOtherà Map/Reduce Project,新建項目名為WriteHDFS的Map/Reduce項目。 新建WriteFile類并編寫如下代碼: ~~~ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class WriteFile { public static void main(String[] args)throws Exception{ Configuration conf=new Configuration(); FileSystem hdfs = FileSystem.get(conf); Path dfs = new Path("/weather.txt"); FSDataOutputStream outputStream = hdfs.create(dfs); outputStream.writeUTF("nj 20161009 23\n"); outputStream.close(); } } ~~~ 在Eclipse左側的導航欄選中該項目,點擊ExportàJavaàJAR File,填寫導出文件的路徑和文件名(本例中設置為hdpAction.jar),確定導出即可。如圖3-8和圖3-9所示: ![](https://box.kancloud.cn/daae78f41c8767a98ed4d062fbbbff9c_487x56.jpg) 圖3-8 選擇導出JAR包文件 ![](https://box.kancloud.cn/e71731d7bd40a63152f545b0f4a493f3_479x37.jpg) 圖3-9 指定導出的JAR包文件名 #### 3.4.10 上傳HDFS寫文件程序jar包并執行 使用WinSCP、XManager或其它SSH工具的sftp工具上傳剛剛生成的hdpAction.jar包至client服務器: ~~~ sftp> lcd C:/Users/Administrator/Desktop/ sftp> put hdpAction.jar Uploading hdpAction.jar to /root/hdpAction.jar 100% 2KB 2KB/s 00:00:00 C:/Users/Administrator/Desktop/hdpAction.jar: 2807 bytes transferred in 0 seconds (2807 bytes/s) ~~~ 在client服務器上使用hadoop jar命令執行hdpAction.jar: ~~~ [root@client ~]# hadoop jar ~/hdpAction.jar WriteFile ~~~ 查看是否已生成weather.txt文件,若已生成,則查看文件內容是否正確: ~~~ [root@client ~]# hadoop fs -ls / Found 2 items -rw-r--r-- 3 root supergroup 29 2016-12-05 12:28 /machines -rw-r--r-- 3 root supergroup 17 2016-12-05 14:54 /weather.txt [root@client ~]# Hadoop fs -cat /weather.txt nj 20161009 23 ~~~ #### 3.4.11 使用Eclipse開發并打包HDFS讀文件程序 打開Eclipse,依次點擊FileàNewàMap/Reduce Project或FileàNewàOtherà Map/Reduce Project,新建項目名為ReadHDFS的Map/Reduce項目。 新建ReadFile類并編寫如下代碼: ~~~ import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class ReadFile { public static void main(String[] args) throws IOException { Configuration conf = new Configuration(); Path inFile = new Path("/weather.txt"); FileSystem hdfs = FileSystem.get(conf); FSDataInputStream inputStream = hdfs.open(inFile); System.out.println("myfile: " + inputStream.readUTF()); inputStream.close(); } } ~~~ 在Eclipse左側的導航欄選中該項目,點擊ExportàJavaàJAR File,導出為hdpAction.jar。 3.4.12 上傳HDFS讀文件程序jar包并執行 使用WinSCP、XManager或其它SSH工具的sftp工具上傳剛剛生成的hdpAction.jar包至client服務器,并在client服務器上使用hadoop jar命令執行hdpAction.jar,查看程序運行結果: ~~~ [root@client ~]# hadoop jar ~/hdpAction.jar ReadFile myfile: nj 20161009 23 [root@client ~]# ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看