Hadoop2.5.1在Ubuntu14中的伪分布配置+wordcount测试+eclipse环境配置

来源:互联网 发布:假面骑士ooo网络特别版 编辑:程序博客网 时间:2024/05/21 16:22

  Hadoop2.5.1在Ubuntu14中的伪分布配置+wordcount测试+eclipse环境配置


一. 安装前须知

系统:Ubuntu14.04(64位)

Hadoop安装包:hadoop-2.5.1.tar.gz

Java jdk:jdk1.8.5

Eclipse: eclipse-standard-luna-R-linux-gtk-x86_64.tar.gz

Eclipse上的hadoop插件:hadoop2x-eclipse-plugin-master.zip

以上涉及的安装软件存在百度网盘:http://pan.baidu.com/s/1jGEEU

二.  Hadoop伪分布搭建

1.    建立hadoop用户组、添加用户-hadoop:

  sudo addgroup hadoop

  sudo adduser –ingroup hadoop hadoop:按照提示输入向hadoop用户组新增的hadoop 用户密码。

2.为hadoop用户添加用户权限

     输入:sudo gedit  /etc/sudoers

     回车,打开sudoers文件

     给hadoop用户赋予和root用户同样的权限:

          在此行  root  All = (ALL:ALL) ALL 后添加一行:

          hadoop  All = (ALL:ALL) ALL  (意思:允许hadoop用户sudo运行任何命令)

      保存sudoers文件

3. 用新增加的hadoop用户登录Ubuntu系统(important!!),切换登录用户就好!

4. 安装ssh

输入:sudo apt-get install openssh-server

安装完成后,启动服务:sudo  /etc/init.d/ssh start

查看服务是否正确启动:ps -e | grep ssh

设置免密码登录,生成公钥和私钥:ssh-keygen -t rsa -P  "" 一直按回车,此时会在/home/hdoop/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥。)

紧接着,将公钥追加到authorized_keys中,它用户保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容:

cat  ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys  

登录ssh(测试是不是无密码登录,若提示密码登录,则按ssh配置步骤重新配置):

ssh localhost

退出 ssh登录,输入:exit(退出连接)

5. 安装jdk,配置java环境

(1)把下载的jdk安装包解压到/usr/local/jvm/目录下:

切换目录:cd /usr/local/jvm/  (其他路径也可以)

解压文件:sudo tar -zxf  jdk-8u25-linux-x64.tar.gz

(2)设置jdk环境

·        打开/etc/profile:

sudo gedit /etc/profile

·        加入以下代码(根据实际安装目录更改路径):

export JAVA_HOME=/usr/local/jvm/jdk1.8.0_25  

export JRE_HOME=${JAVA_HOME}/jre 

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

export PATH=${JAVA_HOME}/bin:$PATH

使环境变量生效(不过推荐最好还是重启一下):

source  /etc/profile

测试是否可行:

java -version

输出

java version "1.8.0_25"

Java(TM) SE Runtime Environment (build 1.8.0_25-b14)

Java HotSpot(TM) 64-Bit Server VM

表示安装成功

6. 安装hadoop2.5.1

解压hadoop2.5.1,并重命名为hadoop文件夹:

sudo tar xzf hadoop-2.5.1-x64.tar.gz 

sudo mv hadoop-2.5.1 /usr/local/hadoop   

赋予用户对该文件夹的读写权限:

sudo chmod 774 /usr/local/hadoop

7.配置环境

1)配置~/.bashrc:

update-alternatives  --config java(可以使用该命令行查看安装路径为:/usr/lib/jvm/jdk)

配置.bashrc文件:

sudo gedit  ~/.bashrc(该命令会打开该文件的编辑窗口,在文件末尾追加下面内容,然后保存,关闭编辑窗口。)

#HADOOP VARIABLES START

export JAVA_HOME=/usr/lib/jvm/ jdk1.8.0_25  

export HADOOP_INSTALL=/usr/local/hadoop

export PATH=$PATH:$HADOOP_INSTALL/bin

export PATH=$PATH:$HADOOP_INSTALL/sbin

export HADOOP_MAPRED_HOME=$HADOOP_INSTALL

export HADOOP_COMMON_HOME=$HADOOP_INSTALL

export HADOOP_HDFS_HOME=$HADOOP_INSTALL

export YARN_HOME=$HADOOP_INSTALL

exportHADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native

exportHADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

#HADOOP VARIABLES END

执行下面命,使添加的环境变量生效:

       source~/.bashrc

2)编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 执行下面命令,打开该文件的编辑窗口

        sudo gedit  /usr/local/hadoop/etc/hadoop/hadoop-env.sh

找到JAVA_HOME变量,修改此变量如下

        export  JAVA_HOME=/usr/lib/jvm/ jdk1.8.0_25  

8. 配置core-site.xml

/usr/local/hadoop/etc/hadoop/core-site.xml包含了hadoop启动时的配置信息。

 在编辑器中打开此文件:

    sudo gedit  /usr/local/hadoop/etc/hadoop/core-site.xml

  在该文件的<configuration></configuration>之间增加如下内容:

    <property>

        <name>fs.default.name</name>

        <value>hdfs://localhost:9000</value>

    </property>

其中,name是fs.default的值表示hdfs路径的逻辑名称

保存、关闭编辑窗口。

9. 配置hdfs-site.xml

    /usr/local/hadoop/etc/hadoop/hdfs-site.xml用来配置集群中每台主机都可用,指定主机上作为namenode和datanode的目录。 

也可以在别的路径下创建上图的文件夹,名称也可以与上图不同,但是需要和hdfs-site.xml中的配置一致。针对于一个伪节点:

    编辑器打开hdfs-site.xml:sudo gedit hdfs-site.xml

    在该文件的<configuration></configuration>之间增加如下内容:

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:/usr/local/hadoop/hdfs/name</value>

    </property>

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:/usr/local/hadoop/hdfs/data</value>

    </property>

    保存、关闭编辑窗口


10. 设置MapReduce的配置信息

1)配置yarn-site.xml

    /usr/local/hadoop/etc/hadoop/yarn-site.xml包含了MapReduce启动时的配置信息。

编辑器中打开此文件 :    sudo gedit yarn-site.xml

在该文件的<configuration></configuration>之间增加如下内容:

    <property>

        <name>yarn.nodemanager.aux-services</name>

        <value>mapreduce_shuffle</value>

    </property>

    <property>

        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

        <value>org.apache.hadoop.mapred.ShuffleHandler</value>

    </property>

    名称yarn.nodemanager.aux-services在hadoop2.5.1版本中是mapreduce_shuffle,一定要看清楚。

    保存、关闭编辑窗口

2)创建和配置mapred-site.xml

默认情况下,/usr/local/hadoop/etc/hadoop/文件夹下有mapred.xml.template文件,我们要复制该文件,并命名为mapred.xml,该文件用于指定MapReduce使用的框架。

    复制并重命名

    cp mapred-site.xml.template mapred-site.xml

    编辑器打开此新建文件

    sudo gedit mapred-site.xml

在该文件的<configuration></configuration>之间增加如下内容:

    <property>

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

其中,名称mapreduce.framework.name指的是使用yarn运行mapreduce程序。

保存、关闭编辑窗口    

11. 格式化hdfs

 hdfs namenode -format    

只需要执行一次即可,如果在hadoop已经使用后再次执行,会清除掉hdfs上的所有数据。

12. 启动Hadoop

 经过上文所描述配置和操作后,下面就可以启动这个单节点的集群    

 1)执行启动命令:

    sbin/start-dfs.sh    

    执行该命令时,如果有yes/no提示,输入yes,回车即可。    

    接下来,执行:

    sbin/start-yarn.sh    

    执行完这两个命令后,Hadoop会启动并运行   (或者用start-all.sh替代上述两个执行命令)

 2)输入:jps,会看到Hadoop相关的进程:

   必须包括以下进程:

   NameNode

   SecondaryNameNode

   NodeManager

   JPS

   ResourceManagger

   DataNode

 3)浏览器打开http://localhost:50070/,会看到hdfs管理页面

 4)浏览器打开http://localhost:8088,会看到hadoop进程管理页面

步骤12中的过程,2), 3),4)全部正确则说明hadoop配置基本正确。

三. WordCount测试伪分布

在dfs上创建input目录

  bin/hadoop fs -mkdir -p input

把hadoop目录下的file.txt拷贝到dfs新建的input里:  hadoop fs -copyFromLocal file.txt  input

运行WordCount

    hadoop  jar  share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.5.1-sources.jarorg.apache.hadoop.examples.WordCount  input  output

运行完毕后,查看单词统计结果

    hadoop  fs -cat output/*

 

四. 安装Eclipse

1. 下载Eclipse,解压安装,

例如安装到/usr/local,即/usr/local/eclipse(tar xzf…) 

2. 在eclipse上安装hadoop插件

1)下载hadoop插件

        下载地址:http://pan.baidu.com/s/1mgiHFok

    此zip文件包含了源码,我们使用使用编译好的jar即可,解压后,release文件夹中的hadoop.eclipse-kepler-plugin-2.2.0.jar就是编译好的插件。

2)把插件放到eclipse/plugins目录下

3)重启eclipse,配置Hadoopinstallation directory    

     如果插件安装成功,打开Windows—Preferences后,在窗口左侧会有HadoopMap/Reduce选项,点击此选项,在窗口右侧设置Hadoop安装路径。

4)配置Map/ReduceLocations

     打开Windows—Open Perspective—Other , 选择Map/Reduce,点击OK.

     点击Map/ReduceLocation选项卡,点击右边小象图标,打开HadoopLocation配置窗口:

     输入LocationName,任意名称即可.配置Map/ReduceMaster和DFSMastrer,Host和Port配置成与core-site.xml的设置一致即可。

     点击"Finish"按钮,关闭窗口。

 点击左侧的DFSLocations—>myhadoop(上一步配置的locationname),如能看到user,表示安装成功

3. Eclipse下运行WordCount.java

 启动hadoop后,打开Eclipse菜单中File—>Project,选择Map/ReduceProject,输入项目名称WordCount等。

     在WordCount项目里新建class,名称为WordCount,代码如下:

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

importorg.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.Text;

importorg.apache.hadoop.mapreduce.Job;

import org.apache.hadoop.mapreduce.Mapper;

importorg.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 classTokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{

  private final staticIntWritable one = new IntWritable(1);

  private Text word = newText();

  public void map(Object key,Text value, Context context) throws IOException, InterruptedException {

    StringTokenizer itr = newStringTokenizer(value.toString());

      while(itr.hasMoreTokens()) {

        word.set(itr.nextToken());

        context.write(word,one);

}}}

public static class IntSumReducerextends Reducer<Text,IntWritable,Text,IntWritable> {

  private IntWritable result =new IntWritable();

  public void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException, InterruptedException{

    intsum = 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 = newConfiguration();

  String[] otherArgs = newGenericOptionsParser(conf, args).getRemainingArgs();

  if (otherArgs.length != 2) {

    System.err.println("Usage:wordcount <in> <out>");

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

}} 

运行

    1、建立输入文件夹input

        hadoop fs -mkdir input

    2、拷贝本地README.txt到HDFS的input里

        hadoop fs -copy FromLocal  /usr/local/hadoop/README.txt input

    3、点击WordCount.java,右键,点击RunAs—>Run Configurations,配置运行参数,即输入和输出文件夹

  hdfs://localhost:9000/user/hadoop/input      hdfs://localhost:9000/user/hadoop/output

  点击Run按钮,运行程序。 

    4、运行完成后,查看运行结果        

        方法1: 

        hadoop fs -ls output

        可以看到有两个输出结果,_SUCCESS和part-r-00000

        执行hadoop fs -cat output/*        

        方法2:

        展开DFSLocations,双击打开part-r00000查看结果


           

0 0
原创粉丝点击