欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

大數(shù)據(jù)Hadoop基礎(chǔ)教程之搭建開發(fā)環(huán)境及步驟源碼

2018-03-15 14:51:08 2503瀏覽

Hadoop的編程可以是在Linux環(huán)境或Winows環(huán)境中,在此以Windows環(huán)境為示例,以Eclipse工具為主(也可以用IDEA)下面我們一起來看一下吧。

Hadoop是一個(gè)強(qiáng)大的并行框架,它允許任務(wù)在其分布式集群上并行處理。但是編寫、調(diào)試Hadoop程序都有很大難度。正因?yàn)槿绱耍琀adoop的開發(fā)者開發(fā)出了Hadoop Eclipse插件,它在Hadoop的開發(fā)環(huán)境中嵌入了Eclipse,從而實(shí)現(xiàn)了開發(fā)環(huán)境的圖形化,降低了編程難度。在安裝插件,配置Hadoop的相關(guān)信息之后,如果用戶創(chuàng)建Hadoop程序,插件會(huì)自動(dòng)導(dǎo)入Hadoop編程接口的JAR文件,這樣用戶就可以在Eclipse的圖形化界面中編寫、調(diào)試、運(yùn)行Hadoop程序(包括單機(jī)程序和分布式程序),也可以在其中查看自己程序的實(shí)時(shí)狀態(tài)、錯(cuò)誤信息和運(yùn)行結(jié)果,還可以查看、管理HDFS以及文件??偟貋碚f,Hadoop Eclipse插件安裝簡單,使用方便,功能強(qiáng)大,尤其是在Hadoop編程方面,是Hadoop入門和Hadoop編程必不可少的工具。

為了以后方便開發(fā),我們按照下面把開發(fā)中用到的軟件安裝在此目錄中,JDK安裝除外,我這里把JDK安裝在D盤的直屬目錄Java安裝路徑下(安裝在Program Files下有些地方會(huì)報(bào)空隔截?cái)噱e(cuò)誤),下面是工作目錄:

系統(tǒng)磁盤(D:)

|---HadoopWork

|--- eclipse

|--- hadoop-2.7.3

|--- workplace

|---……

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

Eclipse插件開發(fā)配置

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

系統(tǒng)磁盤(D:)

|---HadoopWork

|--- eclipse

|--- plugins

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

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

從上圖中左側(cè)"Project Explorer"下面發(fā)現(xiàn)"DFS Locations",說明Eclipse已經(jīng)識(shí)別剛才放入的Hadoop Eclipse插件了。

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

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

1)選擇"Window"菜單下選擇"Open Perspective",彈出一個(gè)窗體,從中選擇"Map/Reduce"選項(xiàng)即可進(jìn)行切換。

2)在Eclipse軟件的右上角,點(diǎn)擊圖標(biāo)"javaEE",點(diǎn)擊"Other"選項(xiàng),也可以彈出上圖,從中選擇"Map/Reduce",然后點(diǎn)擊"OK"即可確定。

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

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

注意上圖中的紅色標(biāo)注的地方,是需要我們關(guān)注的地方。

  • Location Name:可以任意其,標(biāo)識(shí)一個(gè)"Map/Reduce Location"

  • Map/Reduce Master

    Host:192.168.80.32(Master.Hadoop的IP地址)

    Port:9001

  • DFS Master

    Use M/R Master host:前面的勾上。(因?yàn)槲覀兊腘ameNode和JobTracker都在一個(gè)機(jī)器上。)

    Port:9000

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

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

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

點(diǎn)擊"finish"之后,會(huì)發(fā)現(xiàn)Eclipse軟件下面的"Map/Reduce Locations"出現(xiàn)一條信息,就是我們剛才建立的"Map/Reduce Location"。

第五步:查看HDFS文件系統(tǒng),并嘗試建立文件夾和上傳文件。點(diǎn)擊Eclipse軟件左側(cè)的"DFS Locations"下面的,就會(huì)展示出HDFS上的文件結(jié)構(gòu)。

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

創(chuàng)建完之后,并刷新。

遠(yuǎn)程登錄"Master.Hadoop"服務(wù)器,用下面命令查看是否已經(jīng)建立一個(gè)"index_in"的文件夾。

hadoop fs -ls

到此為止,我們的Hadoop Eclipse開發(fā)環(huán)境已經(jīng)配置完畢,不盡興的同學(xué)可以上傳點(diǎn)本地文件到HDFS分布式文件上,可以互相對比意見文件是否已經(jīng)上傳成功。

Eclipse運(yùn)行WordCount程序

配置Eclipse的JDK

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

如果沒有的話點(diǎn)擊Add添加。

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

設(shè)置Eclipse的編碼為UTF-8

創(chuàng)建MapReduce項(xiàng)目

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

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

目前為止我們已經(jīng)成功創(chuàng)建了MapReduce項(xiàng)目,我們發(fā)現(xiàn)在Eclipse軟件的左側(cè)多了我們的剛才建立的項(xiàng)目。

創(chuàng)建WordCount類

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

因?yàn)槲覀冎苯佑肏adoop2.7.3自帶的WordCount程序,所以報(bào)名需要和代碼中的一致為"org.apache.hadoop.examples",類名也必須一致為"WordCount"。這個(gè)代碼放在如下的結(jié)構(gòu)中。

hadoop-2.7.3

|---src

|---examples

|---org

|---apache

|---hadoop

|---examples

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

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);
 }
}

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

運(yùn)行WordCount程序

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

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

查看WordCount運(yùn)行結(jié)果

查看Eclipse軟件左側(cè),右擊"DFS Locations》Hadoop273》user》hadoop",點(diǎn)擊刷新按鈕"Refresh",我們剛才出現(xiàn)的文件夾"newoutput"會(huì)出現(xiàn)。記得"newoutput"文件夾是運(yùn)行程序時(shí)自動(dòng)創(chuàng)建的,如果已經(jīng)存在相同的的文件夾,要么程序換個(gè)新的輸出文件夾,要么刪除HDFS上的那個(gè)重名文件夾,不然會(huì)出錯(cuò)。

打開"newoutput"文件夾,打開"part-r-00000"文件,可以看見執(zhí)行后的結(jié)果。

還可以將項(xiàng)目導(dǎo)出成jar包,發(fā)送到Hadoop服務(wù)器上運(yùn)行,就像運(yùn)行自帶的example一樣。

到此為止,Eclipse開發(fā)環(huán)境設(shè)置已經(jīng)完畢,并且成功運(yùn)行Wordcount程序,下一步我們真正開始Hadoop之旅。

擴(kuò)展

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

INFO hdfs.DFSClient: Exception in createBlockOutputStream

java.net.NoRouteToHostException: 沒有到主機(jī)的路由

在每個(gè)服務(wù)器上jps看下hadoop的進(jìn)程有沒啟動(dòng),如果都啟動(dòng)了,則停掉主機(jī)和幾個(gè)Slave的防火墻,如果再?zèng)]有出現(xiàn)問題的話說明相關(guān)端口沒有開放,在防火墻中加入相關(guān)端口。

"error: failure to login"問題

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

詳細(xì)地址:http://blog.csdn.net/chengfei112233/article/details/7252404

在我實(shí)踐嘗試中,發(fā)現(xiàn)hadoop-0.20.203.0版本的該包如果直接復(fù)制到eclipse的插件目錄中,在連接DFS時(shí)會(huì)出現(xiàn)錯(cuò)誤,提示信息為: "error: failure to login"。

彈出的錯(cuò)誤提示框內(nèi)容為"An internal error occurred during: "Connecting to DFS hadoop".org/apache/commons/configuration/Configuration". 經(jīng)過察看Eclipse的log,發(fā)現(xiàn)是缺少jar包導(dǎo)致的。進(jìn)一步查找資料后,發(fā)現(xiàn)直接復(fù)制hadoop-eclipse-plugin-0.20.203.0.jar,該包中l(wèi)ib目錄下缺少了jar包。

經(jīng)過網(wǎng)上資料搜集,此處給出正確的安裝方法:

首先要對hadoop-eclipse-plugin-0.20.203.0.jar進(jìn)行修改。用歸檔管理器打開該包,發(fā)現(xiàn)只有commons-cli-1.2.jar 和hadoop-core.jar兩個(gè)包。將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個(gè)包復(fù)制到hadoop-eclipse-plugin-0.20.203.0.jar的lib目錄下,如下圖:

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

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-eclipse-plugin-0.20.203.0.jar的修改。

最后,將hadoop-eclipse-plugin-0.20.203.0.jar復(fù)制到Eclipse的plugins目錄下。

最后想要了解更多關(guān)于大數(shù)據(jù)發(fā)展前景趨勢,請關(guān)注扣丁學(xué)堂大數(shù)據(jù)培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的大數(shù)據(jù)視頻教程系統(tǒng),通過千鋒旗下金牌講師在線錄制的大數(shù)據(jù)視頻教程系統(tǒng),讓你快速掌握大數(shù)據(jù)從入門到精通大數(shù)據(jù)開發(fā)實(shí)戰(zhàn)技能。扣丁學(xué)堂大數(shù)據(jù)學(xué)習(xí)群:209080834。


扣丁學(xué)堂微信公眾號(hào)



關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料



查看更多關(guān)于“大數(shù)據(jù)培訓(xùn)資訊的相關(guān)文章>>

標(biāo)簽: 大數(shù)據(jù)分析 大數(shù)據(jù)培訓(xùn) 大數(shù)據(jù)視頻教程 Hadoop視頻教程 大數(shù)據(jù)開發(fā)工程師 大數(shù)據(jù)在線視頻

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部