HADOOP的部署及使用:一、HADOOP搭建

Hadoop主要由三部分组成:HDFS(分布式文件系统),MapReduce计算框架以及集中资源调度器。

从这个三个不同的角度,Hadopp将主机分为以下六种角色:

     从HDFS角度出发,主机被分为:Namenode和Datanode,对应守护进程(Namenode和Datanode以及SecondaryNameNode)

    从Mapreduce角度出发,主机被分为:JobTracker和TaskTracker,对应守护进程(JobTracker和TaskTracker)

   从集中资源调度器角度出发,主机被分为:Master和Slave,对应守护进程(ResourceManager和NodeManager)

Hadoop有三种搭建模式,分别为:Local模式、伪分布式模式、完全分布式模式。

以下安装以hadoop3.0.3为例:

 一、Local模式

      Local模式是默认的模式,无需启动任何守护进程,每个程序都在单独的JVM中运行,适用于开发阶段,主要用来调试MapReduce程序逻辑正确性。

       采用本地文件系统,而不是分布式文件系统。

       使用Local模式不需要过多的配置,只需要安装相应版本的JDK和HADOOP,设置环境变量JAVA_HOME和HADOOP_HOME,

       就可以使用了,使用hadoop -version验证安装是否成功。

 配置过程如下:

#1.首先安装JDK(hadoop3.0以上要求运行在jdk1.8及以上环境)
#略
#2.安装Hadoop

tar -zxvf /home/hadoop-3.0.3.tar.gz
mkdir -p /usr/local/hadoop
cp -r /home/hadoop-3.0.3.tar.gz/* /usr/local/hadoop/

#3.设置环境变量
vim /etc/profile

#增加如下内容
export JAVA_HOME=/usr/local/java
export CLASSPATH=&JAVA_HOME/lib
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME:$CLASSPATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
test:
cd /usr/local/hadoop/
mkdir input
cp etc/hadoop/*.xml input/
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep input output 'dfs[a-z.]+'
jps

result:

6163 RunJar
6430 Jps

 

 

二、伪分布式模式

      伪分布式模式使用一台主机模拟一个集群,在这个集群中,该主机既是Master又是Slave,既是JobTracker,又是TaskTracker,既是Namenode,又是Datanode.因此需要启动相应的守护进程,且是相互独立的JAVA进程。

    在这种模式下,Hadoop使用的是分布式文件系统,各个作业也是由JobTraker服务,来管理的独立进程。

   在单机模式之上增加了代码调试功能,允许检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。类似于完全分布式模式,因此,这种模式常用来开发测试Hadoop程序的执行是否正确。

配置过程如下:

在本地模式的基础上:

1.配置本地服务器SSH免密码登陆(Hadoop守护进程间通过SSH协议互相访问)

2.修改$HADOOP_HOME/etc/hadoop/hadoop_env.sh

export JAVA_HOME=/usr/local/java
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop

3.修改$HADOOP_HOME/etc/hadoop/core-site.xml(Hadoop集群的特性,作用于全部进程及客户端)

 #指定hdfs访问地址
 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
 </property>

4.修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml(配置HDFS集群的工作属性)
 #指定文件备份份数
 <property>
        <name>dfs.replication</name>
        <value>1</value>
 </property>
5.修改$HADOOP_HOME/etc/hadoop/hdfs-site.xml(配置MapReduce集群的属性)
  #指定使用yarn资源调度
  <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
  </property>
6.修改$HADOOP_HOME/etc/hadoop/yarn-site.xml
  <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>


另由于默认的

 HDFS_DATANODE_USER=hdfs
 HDFS_DATANODE_SECURE_USER=hdfs
 HDFS_NAMENODE_USER=hdfs
 HDFS_SECONDARYNAMENODE_USER=hdfs

YARN_RESOURCEMANAGER_USER=yarn
 YARN_NODEMANAGER_USER=yarn

我们还需要在启动脚本:start-dfs.sh、stop-dfs.sh、start-yarn.sh和stop-yarn.sh中将以上变量设置为自己创建的Linux用户(该用户需要有访问Hadoop文件的所有权限)

 

由于伪分布式模式使用的是分布式文件系统,因此需要格式化namenode;

执行:  hadoop name   -format

开始hdfs:

执行: start-dfs.sh

result:

 

访问:http://lcoalhost:9870 (HDFS WEB界面,3.0以前的端口号为50070)

访问:http://localhost:8088

开启:yarn:

执行:start-yarn.sh

result:

运行Hadoop  Mapreduce example

执行:

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


result:

三、完全分布式模式

Hadoop的守护进程运行在由多台主机搭建的集群上,是真正的生产环境。

在所有的主机上安装JDK和Hadoop,组成相互连通的网络。

配置如下:

准备三台服务器:

 10.10.10.1(master)、10.10.10.2(slave01)、10.10.10.3(slave02)

 1.分别修改三台服务器:/etc/hosts,加入:

10.10.10.1  master master

10.10.10.2  slave01 slave01

10.10.10.3 slave02 slave02

2.配置三台服务器相互之间SSH免密码登陆

3.在master上安装JDK、HADOPP配置环境变量

export JAVA_HOME=/usr/local/java
export CLASSPATH=$JAVA_HOME/lib
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$JAVA_HOME:$CLASSPATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

4.修改$HADOOP_CONF_DIR目录下文件

1.修改$HADOOP_CONF_DIR/core-site.xml
  <property>
     <name>fs.default.name</name>
     <value>hdfs://master:9000</value>
  </property>
  #hadoop临时文件在本地文件系统存放的路径
  <property>
     <name>hadoop.tmp.dir</name>
     <value>/usr/local/hadoop/tmp</value>
  </property>
  <property>
    <name>io.file.buffer.size</name>
    <value>131072</value>
  </property>
2.修改$HADOOP_CONF_DIR/hdfs-site.xml
     <property>
       <name>dfs.replication</name>
      <value>2</value>
     </property>
     #在程序中访问hdfs,必须要关闭权限检查
     <property>
       <name>dfs.permissions.enabled</name>
      <value>false</value>
    </property>
    #namenode数据在本地存放的路径
    <property>
       <name>dfs.namenode.name.dir</name>
       <value>/usr/local/hadoop/hdfs/name</value>
    </property>
   #datanode数据在本地存放的路径
   <property>
      <name>dfs.datanode.data.dir</name>
      <value>/usr/local/hadoop/hdfs/data</value>
   </property>
   #namenode节点地址
   <property>
     <name>dfs.namenode.http-address</name>
     <value>master:50070</value>
   </property>
   #secondary namenode地址
   <property>
     <name>dfs.namenode.secondary.http-address</name>
     <value>slave01:50090</value>
  </property>
   #开启hdfs web ui
  <property>
     <name>dfs.webhdfs.enabled</name>
     <value>true</value>
  </property>
3.修改$HADOOP_CONF_DIR/mapred-site.xml文件
     #使用yarn集群管理器  
     <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
     </property>
     #指定jobhistory访问地址
     <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
     </property>
     #指定Jobhistory web 地址
     <property>
       <name>mapreduce.jobhistory.webapp.address</name>
       <value>master:19888</value>
     </property>
     #指定访问的jar包
     <property>
        <name>mapreduce.application.classpath</name>
        <value>/usr/local/hadoop/etc/hadoop,
               /usr/local/hadoop/share/hadoop/common/*,
               /usr/local/hadoop/share/hadoop/common/lib/*,
               /usr/local/hadoop/share/hadoop/hdfs/*,
               /usr/local/hadoop/share/hadoop/hdfs/lib/*,
               /usr/local/hadoop/share/hadoop/mapreduce/*,
               /usr/local/hadoop/share/hadoop/mapreduce/lib/*,
               /usr/local/hadoop/share/hadoop/yarn/*,
               /usr/local/hadoop/share/hadoop/yarn/lib/*</value>
     </property>
4.修改yarn-site.xml文件
      <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>
        <property>
               <name>yarn.resourcemanager.address</name>
               <value>master:8032</value>
       </property>
       <property>
               <name>yarn.resourcemanager.scheduler.address</name>
               <value>master:8030</value>
       </property>
       <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
             <value>master:8031</value>
      </property>
      <property>
              <name>yarn.resourcemanager.admin.address</name>
               <value>master:8033</value>
       </property>
       <property>
               <name>yarn.resourcemanager.webapp.address</name>
               <value>master:8088</value>
       </property>
5.修改$HADOOP_CONF_DIR/workers文件

slave01
slave02

 5.修改$HADOOP_HOME/sbin 下启动脚本

start-dfs.sh /stop-dfs.sh

 HDFS_DATANODE_USER=root
 HDFS_DATANODE_SECURE_USER=root
 HDFS_NAMENODE_USER=root
 HDFS_SECONDARYNAMENODE_USER=root

start-yarn.sh / stop-yarn.sh

YARN_RESOURCEMANAGER_USER=root
YARN_NODEMANAGER_USER=root

将jdk,hadoop安装文件发送到其他两台服务器的相同目录上,并增加环境变量

scp -r /usr/local/java  root@slave01:/usr/local/
scp -r /usr/local/hadoop  root@slave2:/usr/local/hadoop

格式化文件系统,在master上执行

hadoop namenode  -format

执行 start-all.sh 启动集群

验证:

在master上执行 jsp,结果如下:

在slave01上执行jps,结果如下:

在slave02上执行jps,结果如下:

搭建完成

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值