听别人讲 Eclipse 的 MapReduce 开发条件搭建

 文 / vincentzh 

初稿连接:http://www.cnblogs.com/vincentzh/p/6055850.html

  上周末本来要写那篇的,结果没悟出上周末本身条件都尚未搭起来,运转起来有毛病的呢,拖到周三才将标题消除掉。刚好上周也将事先看的始末复习了下,边复习边码代码精晓,印象倒是很浓厚,对看过的事物驾驭也更深远了。

目录

  1. 条件准备
    1. 创建hadoop用户
    2. 更新apt
    3. 配置SSH免密登陆
    4. 设置配备Java环境
  2. 安装Hadoop
  3. Hadoop单机/伪分布布局
    1. 单机Hadoop
    2. 伪分布Hadoop
    3. 启动Hadoop
    4. 停止Hadoop

作者: vincent_zh
时间:2016-10-16 
出处:http://www.cnblogs.com/vincentzh/p/5967274.html 
扬言:本文以念书、研究和享用为主,如需转发,标明小编和出处,非商业用途! 

目录

  1. 1、概述
  2. 二 、环境准备
  3. 叁 、插件配置
  4. ④ 、配置文件系统连接
  5. 五 、测试连接
  6. 六 、代码编写与实施
  7. 柒 、难点梳理
    1. 7.1 console
      无日志输出难点
    2. 7.2
      权限难题

环境准备

  此处准备的环境是Virtual Box虚拟机下的Ubuntu14.04
六15个人系统,Hadoop版本为Hadoop2.6.0。装好Hadoop运转的基础Linux环境后,还亟需做以下准备:

  •   创建hadoop用户;
  •   更新apt;
  •   配置SSH免密登陆;
  •   安装配置Java环境。

1、概述

  Hadoop提供了Java的API用于处理程序的支付及,同样的,通过在地头搭建熟稔的
eclipse
开发条件也能够方便大型程序的付出与调节,实现的代码无需配置,通过eclipse就能实施并出口结果,通过取样数据的处理结果查看方便调节和测试与认证数据处理逻辑。代码处理逻辑验证无误后,即可将兼具程序打包上传至集群,进行全集数据的处理工科作。

  在搭建开发环境此前,须要配备好团结的Hadoop环境,这样做起来才会相比较实在,并且集群的调度及参数配置也是与大型集群的配置维护差不离没什么差异(Hadoop环境的搭建详见:Hadoop单机/伪分布布局Hadoop集群/分布式安顿)。

  一般通过单机单机和伪分布环境来开发和调节和测试程序,在单机环境下采纳的是地点的文件系统,能够使用
linux
命令方便获取和查看代码的执行结果,相反,在伪分布和集群环境上,代码直接从HDFS读取并出口数据,相较于地面环境亟待将数据在地头和HDFS之间
put/get
,麻烦不少,开发调节和测试程序进度都应用的是多少的取样,不然代码执行1次的岁月过长,在单机和伪分布环境表达无误后才会将代码安插上集群开始展览全集数据的拍卖。LZ在编造上陈设了两套环境,叁个是伪分布环境、另贰个是三个小的集群,当然单机/伪分布/集群之间能够相互切换,但本身配置的条件,为了互相切换麻烦,就索性两套环境都搭了四起,供给再不行环境举办,直接通过付出环境开始展览连接切换即可。

 

 创建hadoop用户

  若是设置系统时布置的不借使“hadoop”用户,就必要新扩充3个“hadoop”用户。

1 $ sudo useradd -m hadoop -s /bin/bash

  该命令创造新的“hadoop”用户,并点名 /bin/bash 作为其shell。

  

  如需更改hadoop用户密码,可经过如下命令进行:

1 $ sudo passwd hadoop

  

  同样,为幸免中期安装进度中的用户权限难点,可向来给“hadoop”用户添加上管理员权限:

1 $ sudo adduser hadoop sudo

  之后,需切换成hadoop用户下进展上边操作。

贰 、环境准备

  1)配置集群并运营全部医生和医护人员进度,集群搭建见:Hadoop单机/伪分布布局Hadoop集群/分布式布署

  2)安装eclipse,本地安装与集群上同一版本的
JDK 和 HADOOP。

  

 更新apt

  切换来hadoop用户之后,须求先更新一下apt,后续须求通过apt安装其余软件,直接在命令行安装会方便广大,借使没有创新,一些软件大概安装不了。可参照以下命令举行创新:

1 $ sudo apt-get update

  Linux 的编辑撰写工具,当然非 vim 莫属了,先装上 vim
早先时期改参数配置文件时用的到。

1 $ sudo apt-get install vim

  遭遇命令行的 [ yes/no] 或者 [Y/N] 选项,直接yes进行安装。

三 、配置插件

  下载 Hadoop2.x-eclipse-plugin.jar,将其放入 eclipse 的 \plugins
目录,一碗水端平启 eclipse,在 Windows—>Show View—>Other 将会看出有
Map/Reduce 视图,同时右边工程空间出现 DFS Locations 类似文件夹的东西。

图片 1

 

 配置SSH免密登陆

  单点/集群都急需设置SSH。一方面是远程登陆,可反复本机通过SSH直接连接虚拟机的系统,这样也有益早先时期在Windows环境下利用
Eclipse 实行配置开发 MapReduce
程序;另一方面,在配备Hadoop集群时,集群众工作作历程中主机和从机、从机和从机之间都因而SSH进行授权登陆工作通讯。Ubuntu系统私下认可已经设置了SSH
Client,须求十三分安装SSH Server。

1 $ sudo apt-get install openssh-server

  第3次登陆SSH会有第①遍登陆提示,键入yes,按提醒输入hadoop用户密码即可登陆。

图片 2

  配置免密登陆。一方面,大家通过ssh登陆时比较便宜,不需重新输入密码;另一方面,在集群方式工作时,主机与从机通讯进度或从机与从机之间进行文件备份时是索要穿越密码验证这一环节的,所以供给提前转移公钥,在集群众工作作时,能够平素自动登陆。

1 $ exit                                    #推出刚刚登陆的 localhost
2 $ cd ~/.ssh                               #若无此目录,请先进行一次ssh 登陆
3 $ ssh-keygen -t rsa                       #会有很多提示,全部回车即可
4 $ cat ./id_rsa.pub >> ./authorized_keys   #将公钥文件加入授权

  再一次经过 ssh 登陆就不必要输入密码了。

图片 3

四 、配置文件系统连接

  切换至 Map/Reduce 视图,进行布置。

图片 4

 

  在此地的布局供给注意,要与投机集群上的 core-site.xml
配置文件中的配置一致。附上LZ配置文件的配备。当然有人在 Host
中央直机关接写的主机名,但要主义主机名与IP的炫耀关系是一贯写在HADOOP环境中的,那里的本地环境根本不可能解析你写进去的‘master’只怕‘hadoop’之类的主机名称,最简便易行直接的就是用IP去安插,core-site.xml
配置文件中也选用 IP 举办配置。

图片 5

图片 6

  

 安装配备Java环境

  Java环境,Oracle JDK 和
OpenJDK都得以,此处直接通过命令安装OpenJDK1.7(个中蕴含 jre 和 jdk):

1 $ sudo apt-get install openjdk-7-jre openjdk-7-jdk

  配置环境变量:

  安装好JDK后,要求配备Java环境变量,通过以下命令寻找Java安装路径:

1 $ dpkg -L openjdk-7-jdk | grep '/bin/javac'

  该命令会输出3个门路,除去路径末尾的
“/bin/javac”,剩下的正是JDK的安装路径了。

 图片 7

  在.bashrc文件中布置环境变量:

1 $ vi ~/.bashrc

  必要在.bashrc文件中添加如下环境变量:

 图片 8

  生效并检查环境变量配置是不是科学:

1 $ source ./.bashrc                  #生效环境变量
2 $ echo $JAVA_HOME                   #查看环境变量
3 $ java -version
4 $ $JAVA_HOME/bin/java -version      #验证与java -version 输出一致

 图片 9

   OK,Java环境设置配备完结。

五 、测试连接

  配置完成测试连接,要求认可全数医生和护师进度运行无误。

图片 10

 

安装Hadoop

   通过http://mirrors.cnnic.cn/apache/hadoop/common/ 可下载Hadoop稳定版 hadoop-2.x.y.tar.gz 文件都以编写翻译好的,建议还要下载hadoop-2.x.y.tar.gz.mds,此mds文件是为了验证在下载和移动文件进度汉语件的完整性。

  通过认证文件的md5值去检查与审视文件的完整性:

1 $ cat ./hadoop-2.6.0.tar.gz.mds | grep 'MD5'
2 $ md5sum ./hadoop-2.6.0.tar.gz | tr 'a-z' 'A-Z'

图片 11

   文件申明无误,将文件解压到安装目录:

1 $ cd /usr/lcoal                              #切换到压缩文件所在目录
2 $ sudo tar -zxf ./hadoop-2.6.0.tar.gz ./     #解压文件
3 $ sudo mv ./hadoop-2.6.0 ./hadoop            #将文件名改为较容易辨认的
4 $ chown -R hadoop ./hadoop                   #修改文件权限

   在.bashrc文件中配备hadoop相关环境变量:

图片 12

   生效环境变量,并验证Hadoop安装成功。

1 $ source ~/.bashrc
2 $ hadoop version

⑥ 、代码编写与履行

  测试代码能够团结尝试去写,要是只是过过环境搭建成功的瘾,就去官网直接拿呢。链接在此处

  当您必要编写制定代码或 copy
代码时又会遇上那样的题材,工程工作区为啥并未 MapReduce
开发有关的包呢,MapReduce 开发的包要去哪个地方找呢,就在那里。

  代码测试以前,新建的工程中并从未 MapReduce 开发须求运用到的有关 jar
包,那便是前边提到的急需在 Windows 本地安装同样版本 Hadoop
的因由了,那里会用到其设置目录中开销编写翻译 MapReduce 程序时必要的 jar
包。在 Windows—>Preferences—>Hadoop Map/Reduce 中装置 Windows
本地安装的Hadoop路径(如:E:\ProgramPrivate\hadoop-2.6.0),设置实现再去创立Hadoop 工程时会自动导入 Hadoop 相关的 jar 包。

  小编就贴个通过 API 提供的片段常用的为主落到实处类去落到实处的 WordCount
代码吧,具体的参数配置能够参见。

 1 package com.cnblogs.vincentzh.hadooptest;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.hadoop.conf.Configuration;
 6 import org.apache.hadoop.fs.Path;
 7 import org.apache.hadoop.io.LongWritable;
 8 import org.apache.hadoop.io.Text;
 9 import org.apache.hadoop.mapred.FileInputFormat;
10 import org.apache.hadoop.mapred.FileOutputFormat;
11 import org.apache.hadoop.mapred.JobClient;
12 import org.apache.hadoop.mapred.JobConf;
13 import org.apache.hadoop.mapred.lib.LongSumReducer;
14 import org.apache.hadoop.mapred.lib.TokenCountMapper;
15 
16 // 通过 Hadoop API 提供的基本实现类实现 WordCount
17 public class WordCount2
18 {
19     public static void main(String[] args)
20     {
21         //JobClient client = new JobClient();
22         Configuration conf = new Configuration();
23         JobConf jobConf = new JobConf(conf);
24         
25         jobConf.setJobName("WordCount2");
26         Path in = new Path("hdfs://192.168.1.110:9000/user/hadoop/input");
27         Path out = new Path("hdfs://192.168.1.110:9000/user/hadoop/output");
28         FileInputFormat.addInputPath(jobConf, in);
29         FileOutputFormat.setOutputPath(jobConf, out);
30         jobConf.setMapperClass(TokenCountMapper.class);
31         jobConf.setCombinerClass(LongSumReducer.class);
32         jobConf.setReducerClass(LongSumReducer.class);
33         jobConf.setOutputKeyClass(Text.class);
34         jobConf.setOutputValueClass(LongWritable.class);
35         
36         //client.setConf(jobConf);
37         try
38         {
39             JobClient.runJob(jobConf);
40         }
41         catch (IOException e)
42         {
43             e.printStackTrace();
44         }        
45     }
46 }

 

  执行到位,会有照应的功课执行计算消息输出,Refresh 文件夹后会在左侧DFS 文件系统中看看输出的公文。

  

 

Hadoop单机/伪分布布局 

⑦ 、难题梳理

  运行时恐怕晤面世众多标题,在那里只位列下LZ遇到过的难点和缓解的方法,没遭遇的当然也谈不上和不熟悉人分享了。

 单机Hadoop

   Hadoop
暗许情势为非分布式情势,无需实行别的计划即可运维。非分布式即单 Java
进程,方便开始展览调剂。

  注:单机、伪分布、集群的差异:

    单机:故名思意,Hadoop运营再单台服务器上,并且此时的Hadoop读取的是地面包车型大巴文件系统,并没有利用本人的HDFS。

    伪分布:单机版集群,单台服务器既是NameNode,也是DataNode,并且也唯有那四个DataNode,文件是从HDFS读取。

    集群:单机和伪分布说了集群就大约了。一般单独分配一台服务器作为NameNode,并且NameNode一般不会同时陈设为DataNode,DataNode一般在其他服务器上,其它对大型集群,为反映Hadoop集群的高可用性,也会单独设置一台服务器作为集群的SecondaryNameNode,也正是NameNode的备份,首要用来NameNode失效时的迅猛还原。

 7.1 console 无日志输出难题

  在 eclipse 执行 MapReduce
程序时会出现程控台无任何输出音讯的题材,没有日记消息,没有执行消息,无法明白程序执行的结果什么。

  原因:console无日志输出是因为在
project 中绝非开展 log 配置。

  化解方案:直接将 hadoop
配置文件目录($HADOOP_HOME/etc/hadoop/)下的 log4j.properties 文件 copy
进工程中即可。

  

 伪分布Hadoop

   Hadoop 伪分布式的措施是在单节点上运维的,节点既作为 NameNode 也当作
DataNode,同时,读取的是 HDFS 中的文件,Hadoop 进度以分别的 Java
进度来运作。

  Hadoop 的配备文件位于 $HADOOP_HOME/etc/hadoop/
中,伪分布式须求修改三个布局文件 core-site.xml 和 hdfs-site.xml 。Hadoop的安顿文件是
xml 格式,每种配置以宣称 property 的 name 和 value
的不二法门来完成。别的就算要运转YA奥德赛N,须要再修改 mapred-site.xml
yarn-site.xml 五个布局文件。

  通过编辑器或 vim 对xml配置文件举行修改。

  修改 core-site.xml 配置文件:

 1 <configuration>
 2         <property>
 3              <name>hadoop.tmp.dir</name>
 4              <value>file:/usr/local/hadoop/tmp</value>
 5              <description>Abase for other temporary directories.</description>
 6         </property>
 7         <property>
 8              <name>fs.defaultFS</name>
 9              <value>hdfs://localhost:9000</value>
10         </property>
11 </configuration>

   修改 hdfs-site.xml  配置文件:

 1 <configuration>
 2         <property>
 3              <name>dfs.replication</name>
 4              <value>1</value>
 5         </property>
 6         <property>
 7              <name>dfs.namenode.name.dir</name>
 8              <value>file:/usr/local/hadoop/tmp/dfs/name</value>
 9         </property>
10         <property>
11              <name>dfs.datanode.data.dir</name>
12              <value>file:/usr/local/hadoop/tmp/dfs/data</value>
13         </property>
14 </configuration>

   修改 mapred-site.xml 配置文件:

1 <configuration>
2         <property>
3              <name>mapreduce.framework.name</name>
4              <value>yarn</value>
5         </property>
6 </configuration>

  修改 yarn-site.xml 配置文件:

1 <configuration>
2         <property>
3              <name>yarn.nodemanager.aux-services</name>
4              <value>mapreduce_shuffle</value>
5             </property>
6 </configuration>

 7.2 权限难点

  在 eclipse 执行 MapReduce
程序报错,错误新闻类似:org.apache.hadoop.security.AccessControlException:org.apache.hadoop.security.AccessControlException:
Permission denied:user=john, access=W翼虎ITE,
inode=”input”:hadoop:supergroup:rwxr-xr-x…

  原因:Hadoop 上的 HDFS
只有配备环境时的用户才有读写权限,当先四分之3位应有都选择的是 ‘hadoop’
吧,而我们的费用环境是在 Windows
本地开始展览搭建的,执行顺序的时候是一向用地点的用户进行学业的提交和履行,Hadoop
在付给作业和执行作业时索要对交付的用户进行权力认证,自然 Windows
上的用户并没有读写 HDFS 文件和交给并执行作业的义务了。

  化解方案:在 mapred-site.xml
配置文件中设置属性 dfs.permission 为 false 即可。

图片 13

 

 启动Hadoop

   配置完毕,第一次运营Hadoop时要求对NameNode格式化:

1 $ hdfs namenode -format

 图片 14

   有这八个标志,则表示配置没难点,namenode已经格式化,能够运营Hadoop了。假设格式化错误,须求检讨铺排文件配置是还是不是正确,最广大的标题正是布局文件里的拼写错误。

  运营守护进程:

1 $ start-dfs.sh                                     #启动hdfs,含NameNode、DataNode、SecondaryNameNode守护进程
2 $ start-yarn.sh                                    #启动yarn,含ResourceManager、NodeManager
3 $ mr-jobhistory-daemon.sh start historyserver      #开启历史服务器,才能在Web中查看任务运行情况

   守护进度的启航状态可由此 jps
命令查看,查看全数的护理进度是还是不是都平常运维。若是有未运转的看护进程,需求去
$HADOOP_HOME/logs 目录查占星应的看护进度运转的日记查找原因。

图片 15

   成功运行全数医生和护师进程之后,通过Web界面 http://server\_ip/50070 翻开NameNode 和 DataNode
的信息,还足以在线查看HDFS文件。

  YRAN运行往后(即 ResourceManager 和
NodeManager),也得以透过 http://server\_ip/8088
查看管理财富调度,和查看Job的施行情形。

 停止Hadoop

1 $ stop-dfs.sh
2 $ stop-yarn.shResourceManager、NodeManager
3 $ mr-jobhistory-daemon.sh stop historyserver 

  Note:Hadoop常用的服务器管理命令脚本都足以在
$HADOOP_HOME/bin 和 $HADOOP_HOME/sbin 目录中找到。

集群安顿详见:http://www.cnblogs.com/vincentzh/p/6034187.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注