美文网首页
hadoop环境搭建

hadoop环境搭建

作者: 熊_看不见 | 来源:发表于2018-06-04 01:33 被阅读0次

    一、平台环境

    CentOS6.5

    二、软件版本

    hadoop-2.8.1下载地址
    jdk-8u45-linux-x64下载地址
    apache-maven-3.3.9软件下载

    三、内容目录

    1. 前置内容
      1.1 jdk安装和配置
      1.2 maven安装和配置
      1.3 hadoop 编译
    2. 相关知识
      2.1 hadoop部署方式介绍
      2.2 hadoop主要组件介绍
      2.3 hadoop主要进程介绍
      2.4 jps命令介绍
    3. 环境搭建
      3.1 Hadoop本地模式安部署
      3.2 Hadoop伪分布式模式部署

    1、前置内容

    1.1 jdk安装和配置

        之前的文章已经完成过这一步骤,详情请见CentOS6.5安装JDK8

    1.2 maven安装和配置

        之前的文章已经完成过这一步骤,详情请见CentOS6.5安装Maven

    1.3 hadoop 编译

        hadoop编译并发必要步骤,只是一个熟悉把源码编译成可用的工具包操作的过程。可以直接在官网下载已经编译好的包跳过此步骤。
        如果对此步骤感兴趣可以参考hadoop-2.8.1编译

    2、相关知识

    2.1 hadoop部署方式介绍

        Hadoop部署模式有:本地模式、伪分布模式、完全分布式模式、HA完全分布式模式。区分的依据是NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager等模块运行在几个JVM进程、几个机器。参考下面表格:

    模式名称 各个模块占用的JVM进程数 各个模块运行在几个机器数上
    本地模式 1个 1个
    伪分布模式 N个 1个
    完全分布式模式 N个 N个
    HA完全分布式模式 N个 N个
    2.2 hadoop主要组件介绍

        hadoop主要组件:HDFS、MapReduce、Yarn。

    HDFS( Hadoop Distributed File System):hadoop自带的分布式文件系统,是hadoop数据存储基础。

    MapReduce:一套从海量源数据提取分析元素最后返回结果集的编程模型(分布式计算,无进程)。

    Yarn(Yet Another Resource Negotiator):通用的资源管理平台,可为各类计算框架提供资源的管理和调度。

    此处只对三个组件功能进行简单说明,后续会通过文章对三个组件进行详细说明。注意:Yarn是Hadoop2.x才出MapReduce功能模块中拆出来的。

    2.3 hadoop主要进程介绍

        hadoop主要进程分为:HDFS相关进程、Yarn相关进程。下面将分别罗列两者的进程。

    • HDFS相关进程:
      • NameNode NameNode就是HDFS的Master架构,主要负责HDFS文件系统的管理工作
      • DataNode DataNode就是负责存储数据的组件
      • SecondaryNameNode 是定时对NameNode的数据snapshots进行备份,这样可尽量降低NameNode崩溃之后导致数据丢失的风险
    • Yarn
      • ResourceManager 负责协调集群上计算资源的分配。调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况
      • NodeManager 根据要求启动和监视集群中机器的计算容器container,负责 Container 状态的维护,并向 RM 保持心跳汇报该节点资源使用情况。
    2.4 jps命令介绍

       请参考jps命令原理

    3、环境搭建

        学习到这里仅仅尝试了本地模式和伪分布式部署。其他模式的部署待后续学习过程慢慢补充。

    3.1 Hadoop本地模式部署

       本地模式部署比较简单,不需要修改任何配置文件,简单说明一下步骤:

    1. 创建一个存放本地模式hadoop的目录
    [hadoop@hadoop002 software]$ mkdir /opt/software
    
    1. 文件上传并解压hadoop文件
    [hadoop@hadoop002 software]$ tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz 
    
    1. 确保JAVA_HOME环境变量已经配置好
    [hadoop@hadoop002 software]$ echo $JAVA_HOME
    
    1. 运行MapReduce程序,验证
         hadoop自带的wordcount例子来在本地模式下测试跑mapreduce。
      4.1. 准备mapreduce输入文件teddy.input
    [hadoop@hadoop002 software]$ cat /opt/data/teddy.input
    hadoop mysql hive
    spark oracle storm
    mysql hive
    

    4.2. 运行hadoop自带的mapreduce Demo

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$  bin/hadoop jar share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /opt/data/teddy.input output2
    

    4.3. 查看输出结果

    [hadoop@hadoop002 output2]$ pwd
    /opt/software/hadoop-2.6.0-cdh5.7.0/output2
    [hadoop@hadoop002 output2]$ ll
    total 4
    -rw-r--r--. 1 hadoop hadoop 49 Jun  3 17:43 part-r-00000
    -rw-r--r--. 1 hadoop hadoop  0 Jun  3 17:43 _SUCCESS
    

    输出目录中有_SUCCESS文件说明JOB运行成功,part-r-00000是输出结果文件。
    查看输出结果

    [hadoop@hadoop002 output2]$ cat part-r-00000 
    hadoop  1
    hive    2
    mysql   2
    oracle  1
    spark   1
    storm   1
    
    3.2 Hadoop伪分布式模式部署
    1. Hadoop所用的用户设置
      1.1 创建hadoop用户
    [root@hadoop002 data]# useradd hadoop
    [root@hadoop002 data]# passwd hadoop
    

    1.2 给hadoop用户sudo权限

    [root@hadoop002 data]# vi /etc/sudoers
    

    设置权限,学习环境可以将hadoop用户的权限设置的大一些,但是生产环境一定要注意普通用户的权限限制。
    配置如下:

    root ALL=(ALL) ALL
    hadoop ALL=(root) NOPASSWD:ALL

    注意:如果root用户无权修改sudoers文件,先手动为root用户添加写权限。

    [root@hadoop002 ~]# chmod u+w /etc/sudoers
    

    切换到hadoop用户

    [root@hadoop002 ~]# su - hadoop
    
    1. 解压Hadoop目录文件
      2.1 创建一个存放本地模式hadoop的目录
    [hadoop@hadoop002 software]$ mkdir /opt/software
    

    2.2 文件上传并解压hadoop文件

    [hadoop@hadoop002 software]$ tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz 
    
    1. 配置Hadoop
      3.1 配置hadoop环境变量
    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ vi /etc/profile
    

    增加配置如下

    export HADOOP_HOME=/opt/software/hadoop-2.6.0-cdh5.7.0
    export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$PATH

    使配置文件生效

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ source /etc/profile
    

    3.2 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数
    配置文件所在目录为:/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
    修改hadoop-env.sh

    [hadoop@hadoop002 hadoop]$ vi hadoop-env.sh 
    

    修改为:

    export JAVA_HOME=/usr/java/jdk1.8.0_45

    依次修改三个文件。
    3.3 配置core-site.xml
        配置文件的路径是:/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop

    [hadoop@hadoop002 hadoop]$ vi ${HADOOP_HOME}/etc/hadoop/core-site.xml
    

    配置入下:

    <configuration>
            <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://hadoop002:9000</value>
            </property>
            <property>
                    <name>hadoop.tmp.dir</name>
                   <value>/opt/data/tmp</value>
            </property>
    </configuration>
    

    其中

    • fs.defaultFS参数配置的是HDFS的地址。
    • hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下。

    注意:默认的hadoop.tmp.dir是/tmp/hadoop-${user.name},此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。

    现在/opt/data/tmp/目录是不存在的,我们要创建它并将它的权限分配给hadoop用户。

    [hadoop@hadoop002 hadoop]$ sudo mkdir -p /opt/data/tmp
    [hadoop@hadoop002 hadoop]$ sudo chown –R hadoop:hadoop /opt/data/tmp
    
    1. 配置、格式化、启动HDFS
      4.1 配置hdfs-site.xml
          配置文件的路径是:/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
    [hadoop@hadoop002 hadoop]$ vi ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
    

    配置如下:

    <configuration>
            <property>
                    <name>dfs.replication</name>
                    <value>1</value>
            </property>
    </configuration>
    

    dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以设置为1。
    4.2 格式化hdfs
    执行命令

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ $HADOOP_HOME/bin/hdfs namenode -format
    

    格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。

    [root@hadoop002 current]# pwd
    /opt/data/tmp/dfs/name/current
    [root@hadoop002 current]# ll
    total 16
    -rw-rw-r--. 1 hadoop hadoop 353 Jun  3 18:22 fsimage_0000000000000000000
    -rw-rw-r--. 1 hadoop hadoop  62 Jun  3 18:22 fsimage_0000000000000000000.md5
    -rw-rw-r--. 1 hadoop hadoop   2 Jun  3 18:22 seen_txid
    -rw-rw-r--. 1 hadoop hadoop 207 Jun  3 18:22 VERSION
    
    • fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
    • fsimage*.md5 是校验文件,用于校验fsimage的完整性。
    • seen_txid 是hadoop的版本
    • vession文件里保存:
      • namespaceID:NameNode的唯一ID。
      • clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。
    [root@hadoop002 current]# cat VERSION 
    #Sun Jun 03 18:22:04 CST 2018
    namespaceID=826949800
    clusterID=CID-3e8c3f5c-6ff5-461f-ace1-e2be7de4b72c
    cTime=0
    storageType=NAME_NODE
    blockpoolID=BP-1770757348-192.168.137.130-1528021323999
    layoutVersion=-60
    

    4.3 启动NameNode

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode
    

    4.4 启动DataNode

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode
    

    4.5 启动SecondaryNameNode

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode
    

    4.6 jps命令查看是否已经启动成功,有结果就是启动成功了。

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ jps
    52035 SecondaryNameNode
    51863 NameNode
    51945 DataNode
    52075 Jps
    

    启动成功

    1. 配置、启动YARN
      5.1 配置mapred-site.xml
          默认没有mapred-site.xml文件,但是有个mapred-site.xml.template配置模板文件。复制模板生成mapred-site.xml。
    [hadoop@hadoop002 hadoop]$ pwd
    /opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
    [hadoop@hadoop002 hadoop]$ cp mapred-site.xml.template mapred-site.xml
    [hadoop@hadoop002 hadoop]$ vi mapred-site.xml
    

    增加配置如下:

    <configuration>
            <property>
                    <name>mapreduce.framework.name</name>
                    <value>yarn</value>
            </property>
    </configuration>
    

    指定mapreduce运行在yarn框架上。

    5.2 配置yarn-site.xml

    [hadoop@hadoop002 hadoop]$ pwd
    /opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
    [hadoop@hadoop002 hadoop]$ vi yarn-site.xml
    

    增加配置如下:

    <configuration>
            <property>
                     <name>yarn.nodemanager.aux-services</name>
                      <value>mapreduce_shuffle</value>
            </property>
    </configuration>
    
    • yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
      5.3 启动Resourcemanager
    [hadoop@hadoop002 hadoop]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
    

    5.4 启动nodemanager

    [hadoop@hadoop002 hadoop]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
    

    5.5 查看是否启动成功

    [hadoop@hadoop002 hadoop]$ jps
    52035 SecondaryNameNode
    52294 ResourceManager
    51863 NameNode
    51945 DataNode
    52413 NodeManager
    52494 Jps
    

    5.6 YARN的Web页面
    YARN的Web客户端端口号是8088,通过http://主机ip:8088/可以查看。


    伪分布式部署.png
    1. 在Yarn上运行MapReduce Job
         hadoop自带的wordcount例子来在伪分布式下测试跑mapreduce。
      6.1 创建测试用的Input文件
    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs dfs -mkdir -p /wordcountdemo/input
    

    6.2 准备mapreduce输入文件teddy.input

    [hadoop@hadoop002 software]$ cat /opt/data/teddy.input
    hadoop mysql hive
    spark oracle storm
    mysql hive
    

    6.3 上传文件到hdfs

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs dfs -put /opt/data/teddy.input /wordcountdemo/input
    

    6.4 运行mapreduce

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /wordcountdemo/input /wordcountdemo/output
    

    完成结果如下:

    [hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs dfs -ls /wordcountdemo/output
    Found 2 items
    -rw-r--r--   1 hadoop supergroup          0 2018-06-03 18:56 /wordcountdemo/output/_SUCCESS
    -rw-r--r--   1 hadoop supergroup         49 2018-06-03 18:56 /wordcountdemo/output/part-r-00000
    

    相关文章

      网友评论

          本文标题:hadoop环境搭建

          本文链接:https://www.haomeiwen.com/subject/lmflsftx.html