Hadoop两种方式介绍

一. 备选干活

1、二种情势介绍

一.一. 软件准备

  壹.本地格局(standlone方式/local形式/单机格局)

      1、安装VMWare

    a.未有劳动进程namenode,datanode,resourcemanager,nodemanager等

      2、在VMWare上安装CentOS6.5

    b.用户的主次和hadoop运营在同3个java进度中

      三、安装XShell伍,用来远程登录种类

    c.使用当半夏件系统,而不是分布式文件系统hdfs

     
肆、通过rpm -qa | grep ssh 检查cent os 是或不是安装了ssh server和ssh client ,然后使用ssh localhost测试眨眼之间间SSH是还是不是可用。

    d.那种模式重如若mapreduce程序的逻辑进行调剂,确认保证程序正确

若是未有设置那么使用下边包车型大巴吩咐安装:

  2.pseudo-distributed方式/伪分布式

yum install openssh-clients  

yum install openssh-server  

yum install openssh-clients

yum install openssh-server

    a.在1台主机上运转namenode,datanode,resourcemanager,nodemanager,jobTracker,TaskTracker等多个进度,类似于完全分布式方式

 

    b.在单机方式之上扩张了代码调节和测试效能,允许检查内部存款和储蓄器使用状态,hdfs输入输出以及别的进程的互相

     
 伍、使用XShell远程登录服务器,接下去的操作就在XShell上经过命令行来施行了。虚拟机中的服务器能够过ifconfig这么些命令来赢得分配的ip地址(这些地址只怕随着虚拟机的重启会发生变化)。

  叁.通通分布式情势

 

    a.hadoop的看护进度namenode,datanode,jobTracker,TaskTracker运转在多台主机上,也正是3个集群差异机器上

1.2. 创建hadoop用户

    b.在有着须要周转hadoop的主机上设置相关软件,例如JDK,Hadoop

   
当前虚拟机中绝非安装别的软件,那么大家的指标是搭建三个Hadoop单机情势,那么首先供给在集群中树立贰个hadoop用户,用来运转Hadoop的长河,那样幸免接纳root用户运行进度,那也是比较正规的服务器用户管理,所以上面先成立hadoop用户:

    c.在相继机器之间通过ssh免密码登陆

 

贰、环境搭建

useradd -m hadoop -s /bin/bash   
passwd hadoop    #为hadoop用户设置密码

useradd -m hadoop -s /bin/bash

passwd hadoop    #为hadoop用户设置密码

  壹.local形式(那里只是讲在windows上面跑,实际上去linux上面跑local情势是没要求的)

 

    a.下载Java并设置环境变量

接下去的设置进度中会涉及到root用户和hadoop用户的切换,请大家小心!!!

    b.下载Hadoop并设置环境变量(HADOOP_HOME=“你的hadoop解压目录”  
PATH=“%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin”)

 

    c.安装hadoop的eclipse插件并安装

一.三. 布置SSH无密码访问

    图片 1

       
 在预备干活中大家早已安装配置了SSH客户端和服务器,集群和单节点方式都亟待到SSH,Hadoop中namenode须要运营集群中的全部机器的Hadoop守护进度,而这么些历程需求经过SSH登录来贯彻。而Hadoop并未有提供SSH输入密码的报到格局,由此为了保障能够万事大吉登录每台机器,供给将有所机器配置为namenode能够无密码登录它们。实际中陈设失利也能够运作,但是每一次输入密码是尤其麻烦的,所以大家要求安插SSH的无密码访问(注意无密码访问是为hadoop用户配置的,故以下操作必要在hadoop用户下实现):

    d.hadoop在windows上须要分外的两个文本hadoop.dll和winutils.exe,放入hadoop目录下bin目录上边

 

    e.跑一个简便的wordcount的java程序(在java程序入口参数到场输入
输出 路径)

   
 1. 先是大家需求进入/home/hadoop/.ssh目录下,假使那个目录不存在,供给实行一下ssh localhost   那样就会生成这几个目录。 

package com.hpe.hadoop.cocos.wordcount;

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<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();
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length < 2) {
      System.err.println("Usage: wordcount <in> [<in>...] <out>");
      System.exit(2);
    }
    Job job = Job.getInstance(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);
    for (int i = 0; i < otherArgs.length - 1; ++i) {
      FileInputFormat.addInputPath(job, new Path(otherArgs[i]));
    }
    FileOutputFormat.setOutputPath(job,
      new Path(otherArgs[otherArgs.length - 1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}

     贰. 履行以下命令,成立密钥并且将密钥参预授权:

    f.假若报IO错误,供给导入相关的IO包

cd ~/.ssh/                       # 若没有该目录,请先执行一次ssh localhost  

ssh-keygen -t dsa                 # 会有提示,都按回车就可以  

cat id_dsa.pub >> authorized_keys   # 加入授权  

chmod 600 ./authorized_keys       # 修改文件权限,如果不改,无法通过,原因好像是cent os的权限验证比较严格  

cd ~/.ssh/                       # 若没有该目录,请先执行一次ssh localhost

ssh-keygen -t dsa                 # 会有提示,都按回车就可以

cat id_dsa.pub >> authorized_keys   # 加入授权

chmod 600 ./authorized_keys       # 修改文件权限,如果不改,无法通过,原因好像是cent os的权限验证比较严格

  二.伪分布式(linux上面实行)

 

    a.下载Java并实行环境变量设置

   
 三. 切换成hdoop用户,接下去,输入ssh localhost测试一下无密码登录,直接enter就能够,无需密码

    b.hadoop下载解压到祥和的目录下边并进行环境变量的安装

1.4. 安装JAVA环境

    例如:

   将jdk安装包复制到/tmp目录,然后解压到/usr/java目录中

JAVA_HOME=/usr/local/jdk/jdk1.8.0_131
HADOOP_HOME=/usr/local/hadoop/hadoop-2.7.3
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
export JAVA_HOME CLASS_PATH PATH

  tar zxvf jdk-8u131-linux-x64.tar.gz -C /usr/java

    c.Hadoop全体的安插文件都在$HADOOP_HOME/etc/hadoop
下,为了用java开发hadoop程序,须求修改hadoop-env.sh中的JAVA_HOME,指向系统的java路径export
                                   
     JAVA_HOME=/usr/local/jdk1.7.0_71

  解压完成后意识生成了jdk目录

    别的的急需布置的文书有core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml

[root@cluster02 tmp]# cd /usr/java/

    能够从mapred-site.xml.template拷贝获得mapred-site.xml

[root@cluster02 java]# ls

 

jdk1.8.0_131

    d.修改hadoop配置文件(etc/hadoop上面)

[root@cluster02 java]#

      core-site.xml:

修改/etc/profile配置java路径

        <property>

JAVA_HOME=/usr/java/jdk1.8.0_131

export JAVA_HOME

PATH=$JAVA_HOME/bin:$PATH

export PATH

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export CLASSPATH

        <name>fs.defaultFS</name>

贰. 单机形式安装

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

1) 通过xftp将本地hadoop安装包和mds文件发送到服务器/home/hadoop目录下,然后验证tar包的完整性;若文件不完整则那五个值一般差距十分大,能够省略比较下前多少个字符跟后多少个字符是或不是等于即可,如下图所示,假诺四个值不雷同,请务必重新下载。

        </property>

cat hadoop-2.6.0.tar.gz.mds | grep 'MD5'  

md5sum hadoop-2.6.0.tar.gz | tr "a-z" "A-Z"  

cat hadoop-2.6.0.tar.gz.mds | grep 'MD5'

md5sum hadoop-2.6.0.tar.gz | tr "a-z" "A-Z"

      hdfs-site.xml: 

Hadoop下载地址:

        <configuration>
        <!—hdfs-site.xml–>
          <property>
            <name>dfs.name.dir</name>
            <value>/usr/hadoop/hdfs/name</value>
            <description>namenode上囤积hdfs名字空间元数据
</description>
          </property>

http://archive.apache.org/dist/hadoop/core/

          <property>
            <name>dfs.data.dir</name>
            <value>/usr/hadoop/hdfs/data</value>
            <description>datanode上数据块的物理存款和储蓄地方</description>
         </property>

 

 

二) 使用root账号,进入/home/hadoop目录下,解压安装文件到/usr/local/hadoop下

        <property>
          <name>dfs.replication</name>
          <value>1</value>
          <description>副本个数,配置暗中同意是叁,应小于datanode机器数量</description>
        </property>
      </configuration>

tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local  

tar -zxvf hadoop-2.6.0.tar.gz -C /usr/local

     yarn-site.xml:

 

        <configuration>
          <property>         
<name>yarn.nodemanager.aux-services</name>         
<value>mapreduce_shuffle</value>
          </property>
          <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>localhost:8099</value>
          </property>
        </configuration>

三) 修改权限

    f.验证是还是不是配备成功start-dfs.sh(假设能通过windows
ping
虚拟机,那么您须求将虚拟机防火墙关闭,通过拜访ip:50070来查阅相关信息)

mv hadoop-2.6.0/ hadoop/   #更改文件夹名称  

chown -R hadoop:hadoop ./hadoop   #修改权限  

mv hadoop-2.6.0/ hadoop/   #更改文件夹名称

chown -R hadoop:hadoop ./hadoop   #修改权限

      

四) 验证单机形式是不是安装成功,进入/usr/local/hadoop/bin目录下,执行./hadoop -version

            

⑤) 执行二个小例子

 

Hadoop 默许情势为非分布式格局,无需进行其余部署即可运维。非分布式即单 Java 进程,方便举办调剂。

明天大家能够推行例子来感受下 Hadoop 的运行。Hadoop 附带了增进的例证(运转./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-二.6.0.jar 能够看到有着例子),包涵 wordcount、terasort、join、grep 等。

在此我们选拔运行 grep 例子,大家将 input 文件夹中的全体文件作为输入,筛选个中符合正则表明式 dfs[a-z.]+ 的单词并总结出现的次数,最终输出结果到 output 文件夹中。

cd /usr/local/hadoop  

mkdir ./input  

cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件  

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'  

cat ./output/*          # 查看运行结果  

cd /usr/local/hadoop

mkdir ./input

cp ./etc/hadoop/*.xml ./input   # 将配置文件作为输入文件

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'

cat ./output/*          # 查看运行结果

 

6) 为了便利Hadoop的操作,大家在为hadoop用户增进环境变量,让用户能够在任什么地方方实施hadoop命令,大家修改~/.bashrc文件配置,在最终添加以下命令,并且使生效(source ~/.bashrc):

export HADOOP_HOME=/usr/local/hadoop  

export HADOOP_INSTALL=$HADOOP_HOME  

export HADOOP_MAPRED_HOME=$HADOOP_HOME  

export HADOOP_COMMON_HOME=$HADOOP_HOME  

export HADOOP_HDFS_HOME=$HADOOP_HOME  

export YARN_HOME=$HADOOP_HOME  

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native  

export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin  

 

三. 伪分布式安装

前提:已经设置到位单机形式。

 

伪分布式只需求在单机情势的根基上改七个布局文件同时格式化namenode即可。

 

vim /usr/local/hadoop/etc/hadoop/core-site.xml

<property>  

    <name>hadoop.tmp.dir</name>  

    <value>file:/usr/local/hadoop/tmp</value>  

</property>  

<property>  

    <name>fs.defaultFS</name>  

    <value>hdfs://host1:9000</value>  

</property>  

Hdfs-site.xml

<property>  

        <name>dfs.replication</name>  

        <value>1</value>  

    </property>  

    <property>  

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

        <value>file:/usr/local/hadoop/tmp/dfs/name</value>  

    </property>  

    <property>  

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

        <value>file:/usr/local/hadoop/tmp/dfs/data</value>  

    </property>  

 

(伪分布式不运转 YASportageN 也足以,一般不会潜移默化程序执行)

有的读者大概会纳闷,怎么运维 Hadoop 后,见不到书上所说的 JobTracker 和
TaskTracker,那是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce
V2,也称之为 YA猎豹CS陆N,Yet Another Resource Negotiator)。

YA汉兰达N 是从 MapReduce 中分离出来的,负责财富管理与义务调度。YA景逸SUVN 运转于
MapReduce 之上,提供了高可用性、高扩充性,YA安德拉N
的越来越多介绍在此不实行,有趣味的可查看有关质地。

上述通过 ./sbin/start-dfs.sh 运维 Hadoop,仅仅是开发银行了 MapReduce
环境,大家能够运维 YA凯雷德N ,让 YA揽胜N 来担负财富管理与任务调度。

先是修改配置文件 mapred-site.xml,那边要求先进行重命名:

  1. mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml

下一场再进行编辑,同样应用 gedit 编辑会比较便宜些 gedit
./etc/hadoop/mapred-site.xml :

  1. <property>
     <name>mapred.job.tracker</name>
       <value>http://hadoop01:9001</value>
       </property>
            <property>
                 <name>mapreduce.framework.name</name>
                 <value>yarn</value>
           </property>
    

     

继之修改配置文件 yarn-site.xml

  1. yarn.nodemanager.aux-services
    mapreduce_shuffle
     

各自修改/usr/local/hadoop/etc/hadoop下的hadoop-env.sh和yarn-env.sh:

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.85.x86_64  

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native  

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib" 

 

格式化namenode:     

hdfs namenode -format 

大功告成的话,会师到 successfully formatted 的唤起,且尾数第伍行的提醒如下,Exitting with status 0 表示成功,若为 Exitting with status 壹 则是失误。若出错,请密切检查在此以前步骤。 
       

start-all.sh   #启动hdfs  

start-all.sh   #启动hdfs 

jps

非得看看namenode和datanode都运转了才行!!!!

地面包车型大巴伪分布式环境搭建完结!!!

http://hostname:8088/cluster

http://hostname:50070/

 

发表评论

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