91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基礎搭建Hadoop大數據處理-編程

發布時間:2020-07-12 18:00:38 來源:網絡 閱讀:632 作者:sshpp 欄目:大數據

Hadoop的編程可以是在Linux環境或Winows環境中,在此以Windows環境為示例,以Eclipse工具為主(也可以用IDEA)。網上也有很多開發的文章,在此也參考他們的內容只作簡單的介紹和要點總結。

  Hadoop是一個強大的并行框架,它允許任務在其分布式集群上并行處理。但是編寫、調試Hadoop程序都有很大難度。正因為如此,Hadoop的開發者開發出了Hadoop Eclipse插件,它在Hadoop的開發環境中嵌入了Eclipse,從而實現了開發環境的圖形化,降低了編程難度。在安裝插件,配置Hadoop的相關信息之后,如果用戶創建Hadoop程序,插件會自動導入Hadoop編程接口的JAR文件,這樣用戶就可以在Eclipse的圖形化界面中編寫、調試、運行Hadoop程序(包括單機程序和分布式程序),也可以在其中查看自己程序的實時狀態、錯誤信息和運行結果,還可以查看、管理HDFS以及文件。總地來說,Hadoop Eclipse插件安裝簡單,使用方便,功能強大,尤其是在Hadoop編程方面,是Hadoop入門和Hadoop編程必不可少的工具

 

Hadoop工作目錄簡介

  為了以后方便開發,我們按照下面把開發中用到的軟件安裝在此目錄中,JDK安裝除外,我這里把JDK安裝在D盤的直屬目錄Java安裝路徑下(安裝在Program Files下有些地方會報空隔截斷錯誤),下面是工作目錄:

    系統磁盤(D:)

        |---HadoopWork

            |--- eclipse

            |--- hadoop-2.7.3

            |--- workplace

            |---……

 

  按照上面目錄把Eclipse和Hadoop解壓到"D:\HadoopWork"下面,并創建"workplace"作為Eclipse的工作空間。

基礎搭建Hadoop大數據處理-編程

Eclipse插件開發配置

  第一步:把我們的"hadoop2x-eclipse-plugin-master"放到Eclipse的目錄的"plugins"中,然后重新Eclipse即可生效。

 

    系統磁盤(D:)

        |---HadoopWork

            |--- eclipse

                |--- plugins

                    |--- hadoop2x-eclipse-plugin-master.jar

  上面是我的"hadoop-eclipse-plugin"插件放置的地方。重啟Eclipse如下圖:

基礎搭建Hadoop大數據處理-編程

  從上圖中左側"Project Explorer"下面發現"DFS Locations",說明Eclipse已經識別剛才放入的Hadoop Eclipse插件了。

  第二步:選擇"Window"菜單下的"Preference",然后彈出一個窗體,在窗體的左側,有一列選項,里面會多出"Hadoop Map/Reduce"選項,點擊此選項,選擇Hadoop的安裝目錄(如我的Hadoop目錄:D:\HadoopWork\hadoop-2.7.3)。結果如下圖:

基礎搭建Hadoop大數據處理-編程

  第三步:切換"Map/Reduce"工作目錄,有兩種方法:

  1)選擇"Window"菜單下選擇"Open Perspective",彈出一個窗體,從中選擇"Map/Reduce"選項即可進行切換。

基礎搭建Hadoop大數據處理-編程

 

  2)在Eclipse軟件的右上角,點擊圖標"基礎搭建Hadoop大數據處理-編程"中的"基礎搭建Hadoop大數據處理-編程",點擊"Other"選項,也可以彈出上圖,從中選擇"Map/Reduce",然后點擊"OK"即可確定。

  切換到"Map/Reduce"工作目錄下的界面如下圖所示。

基礎搭建Hadoop大數據處理-編程

 

  第四步:建立與Hadoop集群的連接,在Eclipse軟件下面的"Map/Reduce Locations"進行右擊,彈出一個選項,選擇"New Hadoop Location",然后彈出一個窗體。

 

基礎搭建Hadoop大數據處理-編程

 

基礎搭建Hadoop大數據處理-編程

  注意上圖中的紅色標注的地方,是需要我們關注的地方。

  • Location Name:可以任意其,標識一個"Map/Reduce Location"

  • Map/Reduce Master
    Host:192.168.80.32(Master.Hadoop的IP地址)
    Port:9001

  • DFS Master 
    Use M/R Master host:前面的勾上。(因為我們的NameNode和JobTracker都在一個機器上。)
    Port:9000

  • User name:hadoop (與署中的一致)

  • 基礎搭建Hadoop大數據處理-編程

     

  備注:這里面的Host、Port分別為你在mapred-site.xml、core-site.xml中配置的地址及端口。不清楚的可以參考"0基礎搭建Hadoop大數據處理-集群安裝"進行查看。

   接著點擊"Advanced parameters"從中找見"hadoop.tmp.dir",修改成為我們Hadoop集群中設置的地址,我們的Hadoop集群是"/usr/local/hadoop273/hadoop_tmp",這個參數在"core-site.xml"進行了配置。

基礎搭建Hadoop大數據處理-編程

  點擊"finish"之后,會發現Eclipse軟件下面的"Map/Reduce Locations"出現一條信息,就是我們剛才建立的"Map/Reduce Location"。

基礎搭建Hadoop大數據處理-編程

  第五步:查看HDFS文件系統,并嘗試建立文件夾和上傳文件。點擊Eclipse軟件左側的"DFS Locations"下面的,就會展示出HDFS上的文件結構。

基礎搭建Hadoop大數據處理-編程

  右擊">user>hadoop"可以嘗試建立一個"文件夾--index_in",然后右擊刷新就能查看我們剛才建立的文件夾。

基礎搭建Hadoop大數據處理-編程

  創建完之后,并刷新。

  遠程登錄"Master.Hadoop"服務器,用下面命令查看是否已經建立一個"index_in"的文件夾。

hadoop fs -ls

  到此為止,我們的Hadoop Eclipse開發環境已經配置完畢,不盡興的同學可以上傳點本地文件到HDFS分布式文件上,可以互相對比意見文件是否已經上傳成功。

Eclipse運行WordCount程序

配置Eclipse的JDK

  如果電腦上不僅僅安裝的JDK8.0,那么要確定一下Eclipse的平臺的默認JDK是否8.0。從"Window"菜單下選擇"Preference",彈出一個窗體,從窗體的左側找見"Java",選擇"Installed JREs",然后添加JDK8.0。下面是我的默認選擇JRE。

基礎搭建Hadoop大數據處理-編程

  如果沒有的話點擊Add添加。

  添加后按下圖選擇1.8的版本。

基礎搭建Hadoop大數據處理-編程

設置Eclipse的編碼為UTF-8

基礎搭建Hadoop大數據處理-編程

創建MapReduce項目

   從"File"菜單,選擇"Other",找到"Map/Reduce Project",然后選擇它。

基礎搭建Hadoop大數據處理-編程

  接著,填寫MapReduce工程的名字為"WordCountProject",點擊"finish"完成。

基礎搭建Hadoop大數據處理-編程

  目前為止我們已經成功創建了MapReduce項目,我們發現在Eclipse軟件的左側多了我們的剛才建立的項目。

創建WordCount類

  選擇"WordCountProject"工程,右擊彈出菜單,然后選擇"New",接著選擇"Class",然后填寫如下信息:

基礎搭建Hadoop大數據處理-編程

  因為我們直接用Hadoop2.7.3自帶的WordCount程序,所以報名需要和代碼中的一致為"org.apache.hadoop.examples",類名也必須一致為"WordCount"。這個代碼放在如下的結構中。

    hadoop-2.7.3

        |---src

            |---examples

                |---org

                    |---apache

                        |---hadoop

                            |---examples

  從上面目錄中找見"WordCount.java"文件,用記事本打開,然后把代碼復制到剛才建立的java文件中。

基礎搭建Hadoop大數據處理-編程

package org.apache.hadoop.examples; 
import java.io.IOException;import java.util.StringTokenizer; 
import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.IntWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop.mapreduce.Reducer;import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import org.apache.hadoop.util.GenericOptionsParser; 
public class WordCount { 
  public static class TokenizerMapper       extends Mapper<Object, Text, Text, IntWritable>{     
    private final static IntWritable one = new IntWritable(1);    private Text word = new Text();       
    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);      }
    }
  }   
  public static class IntSumReducer       extends Reducer<Text,IntWritable,Text,IntWritable> {    private IntWritable result = new IntWritable(); 
    public void reduce(Text key, Iterable values,
                       Context context
                       ) throws IOException, InterruptedException {      int sum = 0;      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  } 
  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();    conf.set("mapred.job.tracker", "192.168.80.32:9001");
    String[] ars=new String[]{"input","newout"};
    String[] otherArgs = new GenericOptionsParser(conf, ars).getRemainingArgs();    if (otherArgs.length != 2) {
      System.err.println("Usage: wordcount  ");
      System.exit(2);
    }
    Job job = new Job(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

基礎搭建Hadoop大數據處理-編程

  備注:如果不加"conf.set("mapred.job.tracker", "192.168.80.32:9001");",將提示你的權限不夠,其實照成這樣的原因是剛才設置的"Map/Reduce Location"其中的配置不是完全起作用,而是在本地的磁盤上建立了文件,并嘗試運行,顯然是不行的。我們要讓Eclipse提交作業到Hadoop集群上,所以我們這里手動添加Job運行地址。

 運行WordCount程序

  選擇"Wordcount.java"程序,右擊一次按照"Run AS Run on Hadoop"運行。然后會彈出如下圖,按照下圖進行操作。

基礎搭建Hadoop大數據處理-編程

  在Console中可以看到輸出日志。

查看WordCount運行結果

  查看Eclipse軟件左側,右擊"DFS Locations》Hadoop273》user》hadoop",點擊刷新按鈕"Refresh",我們剛才出現的文件夾"newoutput"會出現。記得"newoutput"文件夾是運行程序時自動創建的,如果已經存在相同的的文件夾,要么程序換個新的輸出文件夾,要么刪除HDFS上的那個重名文件夾,不然會出錯。

  打開"newoutput"文件夾,打開"part-r-00000"文件,可以看見執行后的結果。

  還可以將項目導出成jar包,發送到Hadoop服務器上運行,就像運行自帶的example一樣。

  到此為止,Eclipse開發環境設置已經完畢,并且成功運行Wordcount程序,下一步我們真正開始Hadoop之旅。

擴展

以下列出自己和參考園友列出的問題匯總:

INFO hdfs.DFSClient: Exception in createBlockOutputStream
java.net.NoRouteToHostException: 沒有到主機的路由

在每個服務器上jps看下hadoop的進程有沒啟動,如果都啟動了,則停掉主機和幾個Slave的防火墻,如果再沒有出現問題的話說明相關端口沒有開放,在防火墻中加入相關端口。

 "error: failure to login"問題

  下面以網上找的"hadoop-0.20.203.0"為例,我在使用"V1.0"時也出現這樣的情況,原因就是那個"hadoop-eclipse-plugin-1.0.0_V1.0.jar",是直接把源碼編譯而成,故而缺少相應的Jar包。具體情況如下

  詳細地址:http://blog.csdn.net/chengfei112233/article/details/7252404

  在我實踐嘗試中,發現hadoop-0.20.203.0版本的該包如果直接復制到eclipse的插件目錄中,在連接DFS時會出現錯誤,提示信息為: "error: failure to login"。

  彈出的錯誤提示框內容為"An internal error occurred during: "Connecting to DFS hadoop".org/apache/commons/configuration/Configuration". 經過察看Eclipse的log,發現是缺少jar包導致的。進一步查找資料后,發現直接復制hadoop-eclipse-plugin-0.20.203.0.jar,該包中lib目錄下缺少了jar包。

  經過網上資料搜集,此處給出正確的安裝方法:

  首先要對hadoop-eclipse-plugin-0.20.203.0.jar進行修改。用歸檔管理器打開該包,發現只有commons-cli-1.2.jar 和hadoop-core.jar兩個包。將hadoop/lib目錄下的:

  • commons-configuration-1.6.jar ,

  • commons-httpclient-3.0.1.jar ,

  • commons-lang-2.4.jar ,

  • jackson-core-asl-1.0.1.jar

  • jackson-mapper-asl-1.0.1.jar

一共5個包復制到hadoop-eclipse-plugin-0.20.203.0.jar的lib目錄下,如下圖:

 

基礎搭建Hadoop大數據處理-編程

  然后,修改該包META-INF目錄下的MANIFEST.MF,將classpath修改為一下內容:

Bundle-ClassPath:classes/,lib/hadoop-core.jar,lib/commons-cli-1.2.jar,lib/commons-httpclient-3.0.1.jar,lib/jackson-core-asl-1.0.1.jar,lib/jackson-mapper-asl-1.0.1.jar,lib/commons-configuration-1.6.jar,lib/commons-lang-2.4.jar

 

基礎搭建Hadoop大數據處理-編程

 

  這樣就完成了對hadoop-eclipse-plugin-0.20.203.0.jar的修改。

  最后,將hadoop-eclipse-plugin-0.20.203.0.jar復制到Eclipse的plugins目錄下。(各版本對應的版本號也不相同)

"Permission denied"問題

  網上試了很多,有提到"hadoop fs -chmod 777 /user/local/hadoop273 ",有提到"dfs.permissions 的配置項,將value值改為 false",有提到"hadoop.job.ugi",但是通通沒有效果。

  參考文獻:

        地址1:http://www.cnblogs.com/acmy/archive/2011/10/28/2227901.html

        地址2:http://sunjun041640.blog.163.com/blog/static/25626832201061751825292/

    錯誤類型:org.apache.hadoop.security.AccessControlException: org.apache.hadoop.security .AccessControlException: Permission denied: user=*********, access=WRITE, inode="hadoop": hadoop:supergroup:rwxr-xr-x

    解決方案:

    我的解決方案直接把系統管理員的名字改成你的Hadoop集群運行hadoop的那個用戶。

 "Failed to set permissions of path"問題

   參考文獻:https://issues.apache.org/jira/browse/HADOOP-8089

   錯誤信息如下:

    ERROR security.UserGroupInformation: PriviledgedActionException as: hadoop cause:java.io.IOException Failed to set permissions of path:\usr\hadoop\tmp\mapred\staging\hadoop753422487\.staging to 0700 Exception in thread "main" java.io.IOException: Failed to set permissions of path: \usr\hadoop\tmp \mapred\staging\hadoop753422487\.staging to 0700

   解決方法:

Configuration conf = new Configuration();

conf.set("mapred.job.tracker", "[server]:9001");

   "[server]:9001"中的"[server]"為Hadoop集群Master的IP地址。

 "hadoop mapred執行目錄文件權"限問題


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新沂市| 洛隆县| 衡阳县| 蓝田县| 朝阳县| 石屏县| 石门县| 葫芦岛市| 信丰县| 蕲春县| 上饶市| 郎溪县| 偏关县| 咸阳市| 长海县| 封丘县| 山东| 黎川县| 息烽县| 海宁市| 崇阳县| 乌兰县| 乐都县| 桐梓县| 平凉市| 江城| 彩票| 林周县| 巴塘县| 郓城县| 长岛县| 常山县| 延川县| 内江市| 涡阳县| 高清| 韶关市| 泗水县| 永清县| 天柱县| 曲沃县|