1、ubantu16.04 + hadoop2.7.3 + eclipse單機(jī)偽分布環(huán)境配置

1.搭建hadoop環(huán)境
這步網(wǎng)上的文章一大堆,下面是簡(jiǎn)化版的操作步驟
(此處省略一個(gè)免密鑰登陸的過(guò)程,百度上有很多)

第一步:下載java_jdk  下載地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,下好之后解壓到/usr/local/java/路徑下,這時(shí)你的/usr/local/java/路徑下應(yīng)該有一個(gè)jdk開(kāi)頭的文件。
  接下來(lái)將設(shè)置bash環(huán)境變量
  輸入命令:vim  ~/.bashrc
  文件末尾加入 
   export JAVA_HOME=/usr/local/java/jdk1.8.0_151
   export JRE_HOME=$JAVA_HOME/jre
   export CLASSPATH=.:$JAVA_HOME/lib
   export PATH=$PATH:$JAVA_HOME/bin
   接著保存退出
   為了讓文件生效需要輸入  source ~/.bashrc
   在終端中輸入Java -version可以看到j(luò)ava的版本等信息,證明已經(jīng)安裝成功

第二步:下載hadoop-2.7.3  下載地址  https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/   下載hadoop-2.7.3.tar.gz就行了,下載好后,解壓hadoop-2.7.3.tar.gz到/usr/local/路徑下 ,之后重命名hadoop-2.7.3為hadoop
      接下來(lái)繼續(xù)設(shè)置環(huán)境變量
      輸入命令 vim /etc/profile
      文件末尾加入
      JAVA_HOME=/usr/local/java/jdk1.8.0_151
      PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
      export JAVA_HOME
      export PATH
      export HADOOP_HOME=/usr/local/hadoop
      export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      接著保存退出
      輸入命令 source /etc/profile 使文件生效
      在終端中輸入 hadoop version可以看到hadoop的信息,證明安裝成功
第三步:配置hadoop文件
   簡(jiǎn)單說(shuō)一下單機(jī)環(huán)境的原理,hadoop由三個(gè)框架組成hdfs + mapreduce + yarn,在hdfs由namenode和datanode組成,文件上傳hdfs后會(huì)被切塊保存在datanode中,namenode的內(nèi)存中保存著的datanode中文件的目錄,單機(jī)環(huán)境中namenode和datanode都是本機(jī)。yarn負(fù)責(zé)分配計(jì)算資源可以不用計(jì)較太多,只需要把mapreduce的分配工作交給yarn就行了。
   輸入命令 cd  /usr/local/hadoop/etc/hadoop/中,可以看見(jiàn)一堆文件,他們大多都是hadoop的配置文件。
   輸入命令 vim hadoop-env.sh   找到JAVA_HOME=${JAVA_HOME}把它改成JAVA_HOME=/usr/local/java/jdk1.8.0_151

   輸入命令 vim core-site.xml ,在<configuration></configuration>之間加入
  <property>
     <name>dfs.tmp.dir</name>
     <value>/usr/local/hadoop/tmp</value>
 </property>
 <property>
     <name>fs.defaultFS</name>
      <value>hdfs://localhost:9000</value>
 </property>

  輸入命令 vim hdfs-site.xml,在<configuration></configuration>之間加入
    <property>
     <name>dfs.replication</name>
      <value>1</value>
  </property>
  <property>
      <name>dfs.namenode.name.dir</name>
      <value>/usr/local/hadoop/tmp/dfs/name</value>
  </property>
  <property>
      <name>dfs.datanode.data.dir</name>
      <value>/usr/local/hadoop/tmp/dfs/data</value>
  </property>

  輸入命令 vim mapre-site.xml.template,在<configuration></configuration>之間加入
  <property>
     <name>mapreduce.framework.name</name>
      <value>yarn</value>
  </property>
  保存退出后,需要將mapre-site.xml.template 重命名為 mapre-site.xml

  輸入命令 vim yarn-site.xml,在<configuration></configuration>之間加入
  <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
  </property>
  第四步 輸入命令 hadoop namenode -format 格式化一下namenode中的信息,之后輸入命令start-all.sh,即可打開(kāi)hadoop的所有服務(wù)。
 在命令行中輸入jps,可以看到namenode/datanode resourcemanager等各種服務(wù)已經(jīng)起來(lái)了,證明單機(jī)環(huán)境已經(jīng)配置成功。

2.eclipse環(huán)境配置
hadoop環(huán)境起來(lái)了,但是我們要怎么來(lái)使用hadoop呢?hadoop支持很多語(yǔ)言,java就是其中一種(這其實(shí)是廢話(huà),因?yàn)閔adoop就是java寫(xiě)的)。hadoop提供了很多原生的api供我們使用,比如FileSystem,Configuration中有很多的接口,但是我們?cè)谑褂胔adoop時(shí)還需要對(duì)它們進(jìn)行包裝一下,這樣比較安全,也能實(shí)現(xiàn)更多的功能。
在編寫(xiě)java程序時(shí),我們需要把他打包成jar文件,eclipse能夠幫助我們快速的把一個(gè)Java項(xiàng)目打包成一個(gè)jar包。當(dāng)然還可以直接在eclipse中進(jìn)行調(diào)試。
首先下載一個(gè)eclipse,下載地址:https://www.eclipse.org/downloads/download.php?file=/oomph/epp/oxygen/R2/eclipse-inst-linux64.tar.gz
下載之后直接解壓得到一個(gè)eclipse文件夾,并且下一個(gè)插件hadoop-eclipse-plugin-2.7.3.jar
把下載好的hadoop-eclipse-plugin-2.7.3.jar放到eclipse文件夾中的plugins中。
打開(kāi)eclipse,點(diǎn)擊導(dǎo)航欄里的window的preferences


在左側(cè)選擇hadoop Map/Reduce,在右側(cè)中設(shè)置hadoop的文件路徑為/usr/local/hadoop

點(diǎn)擊window中的Open perspective,在其中選擇Map/Reduce

然后點(diǎn)擊下方的Map/Reduce Location,右鍵下方的空白,點(diǎn)擊New HadoopLocation

在跳出的對(duì)話(huà)框中進(jìn)行如下設(shè)置:

現(xiàn)在在左側(cè)的Project Explorer中的DFSLocations已經(jīng)連接到了本機(jī)的HDFS中,可以在這里管理HDFS中的文件。


在導(dǎo)航欄中選擇File->New->Project,選擇Map/ReduceProject。



點(diǎn)擊NEXT



點(diǎn)擊FINISH。右鍵Project Explorer中的WordCount中的src,點(diǎn)擊new,點(diǎn)擊class。

點(diǎn)擊FINISH。在MyWordCount中輸入下面的代碼:

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;

public class MyWordCount {

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<IntWritable> 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();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(MyWordCount.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(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

在代碼中點(diǎn)擊右鍵,點(diǎn)擊Run as,選擇 Run Configuration,設(shè)置Main和Arugments

保存關(guān)掉,之后把文件上傳到hdfs,使用命令 hdfs dfs -put 你的文件路徑 hdfs://localhost:9000/input/ ,右鍵點(diǎn)擊Run as -> run on hadoop,程序就跑起來(lái)了,輸出可以在DFSlocation中進(jìn)行查看,refresh后發(fā)現(xiàn)多出一個(gè)output文件夾,輸出結(jié)果就在里面。

我們接下來(lái)嘗試將Java工程打包成jar文件,通過(guò)hadoop jar命令來(lái)使用這個(gè)Jar包,可以達(dá)到同樣的效果。首先先把hdfs中的output刪掉,在eclipse中刪除就可以,也是可以用命令。
之后我們點(diǎn)擊導(dǎo)航欄中的file->Export,在彈出的對(duì)話(huà)框中選擇JAVA->JAR file

具體的輸出路徑自己設(shè)置就行了,我自己輸出的jar包名字是wc.jar
切換到j(luò)ar包所在目錄,輸入命令 hadoop jar wc.jar org.apache.hadoop.examples.MyWordCount hdfs://localhost:9000/input/你的文件 hdfs://localhost:9000/output

OK~大功告成!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容