【Hadoop】大数据简介及Hadoop平台搭建

1、大数据简介

      大数据特点:大(数据量大,PB级别的数据)、繁(多样性、复杂性,非结构化数据)、快(查询、处理、计算速度快)、有价值(Value)。

      2008年成立的Cloudera是最早将Hadoop商用的公司,为合作伙伴提供Hadoop的商用解决方案,主要是包括支持、咨询服务和培训。2009年Hadoop的创始人Doug Cutting也加盟Cloudera公司,Cloudera产品主要为CDH,Cloudera Manager,Cloudera Support。CDH是Cloudera的Hadoop发行版,完全开源,比Apache Hadoop在兼容性,安全性,稳定性上有所增强。Cloudera Manager是集群的软件分发及管理监控平台,可以在几个小时内部署好一个Hadoop集群,并对集群的节点及服务进行实时监控。Cloudera Support即是对Hadoop的技术支持。Cloudera的标价为每年每个节点4000美元。Cloudera开发并贡献了可实时处理大数据的Impala项目。

      Cloudera公司的Hadoop发行版是CDH版。Google的三篇论文:MapReduce、GFS->HDFS分布式文件系统、bigtable->HBase数据库。Hadoop 1.x = MapReduce+HDFS。

2、企业大数据平台架构

【Hadoop】大数据简介及Hadoop平台搭建

3、Hadoop模块

      Hadoop 2.x主要包括以下四个模块:

      (1)Hadoop Common:为其他Hadoop模块提供基础设施。

      (2)Hadoop HDFS:一个高可靠、高吞吐量的分布式文件系统。

      (3)Hadoop MapReduce:一个分布式的离线并行计算框架。

      (4)Hadoop YARN:一个新的MapReduce框架,任务调度与资源管理。

4、HDFS(Hadoop Distributed File System)文件系统

      (1)设计思想:一次写入,多次读取,写入后存储在HDFS上就不能修改,但可以把文件下载到本地,把HDFS上的文件删除,修改后再上传到HDFS上,实现文件的修改。

      (2)文件属性(文件元数据):文件名称、存储位置、副本数、权限(RWX)、存储块。

      (3)存储的形式:块block,块的大小:默认128MB,可以用户自定义大小。

              比如:文件大小为500MB,块大小是256MB,第一个块:256,第二个块:244。

              如果文件大小小于数据块的大小,它是不会占据整个块的空间的。

              多个文件不能放到一个块中。

      (4)主从架构

              主节点namenode:管理存储元数据;

              从节点datanode:真正存储文件,消耗硬盘。

              NameNode是主节点,存储文件的元数据,如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在DataNode等。

              DataNode在本地文件系统存储文件块数据,以及块数据的校验和。

              SecondaryNameNode是用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。

      (5)读写流程

              首先client通过RPC协议请求namenode获取文件的位置,然后到具体datanode上读写

              client -> namenode

              client -> datanode

5、Yarn框架

      (1)主从架构

              主节点:resourcemanager,管理资源、分配资源;

              从节点:nodemanager,消耗资源。

      (2)作用:集群资源分配管理,多任务调度。

              总的资源:CPU、内存、硬盘。

              运行的任务(时间、资源)。

              ApplicationMaster应用管理者:每一个应用都会有一个应用管理者。

              Container容器:每个map都是在各自独立的环境中去运行(资源独立),任务就在容器中运行。

      (3)ResourceManager:负责处理客户端请求,启动/监控ApplicationMaster,监控NodeManager,资源分配与调度。

               NodeManager:负责单个节点上的资源管理,处理来自ResourceManager的命令和来自ApplicationMaster的命令。

               ApplicationMaster:负责数据切分,为应用程序申请资源,并分配给内部任务,负责任务监控与容错。

               Container:对任务运行环境的抽象,封装了CPU、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。

6、Hadoop伪分布式环境搭建

      (1)三种模式

              Local (Standalone) Mode  本地模式:不使用HDFS文件系统,使用本地文件系统,程序员调试用;

              Pseudo-Distributed Mode  伪分布式模式:单节点,一台机器,使用HDFS文件系统,程序员调试用;

              Fully-Distributed Mode  完全分布式模式:真实生产环境用,集群。

      (2)解压JDK

              $ tar  -zxf  jdk-7u67-linux-x64.tar.gz  -C  /opt/modules/

              配置环境变量

              #JAVA_HOME
              export JAVA_HOME=/opt/modules/jdk1.7.0_67
              export PATH=$PATH:$JAVA_HOME/bin

      (3)解压Hadoop

              $ tar -zxf hadoop-2.5.0.tar.gz -C /opt/modules/

      (4)建议:删除rm -rf /opt/modules/hadoop-2.5.0/share/doc/,里面是英文文档,没有作用

      (5)配置过程

              <1>hadoop-env.sh、mapred-env.sh、yarn-env.sh指定Java的安装路径
                     export JAVA_HOME=/opt/modules/jdk1.7.0_67

              <2>core-site.xml,指定namenode所在机器位置及交互端口号,另外也是指定使用的是HDFS文件系统
                     <property>
                            <name>fs.defaultFS</name>
                            <value>hdfs://hadoop-senior.ibeifeng.com:8020</value>
                     </property>

              <3>hdfs-site.xml,指定副本数个数
                     <property>
                            <name>dfs.replication</name>
                            <value>1</value>
                     </property>

              <4>core-site.xml,更改Hadoop默认的临时目录位置,用于存放块文件和元数据文件
                     <property>
                           <name>hadoop.tmp.dir</name>
                           <value>/opt/modules/hadoop-2.5.0/data/tmp</value>
                     </property>

              <5>slaves,指定从节点位置(主机名),包括datanode和nodemanager

              <6>格式化namenode,对于元数据进行初始化,否则无法读取元数据

                     bin/hdfs namenode -format

             <7>更改mapred-site.xml文件名称,指定MR运行在yarn上
                    <property>
                            <name>mapreduce.framework.name</name>
                            <value>yarn</value>
                    </property>

            <8>yarn-site.xml
                    <property>
                         <name>yarn.nodemanager.aux-services</name>
                         <value>mapreduce_shuffle</value>
                    </property>
                    <property>
                         <name>yarn.resourcemanager.hostname</name>
                         <value>hadoop-senior.ibeifeng.com</value>
                    </property>

            <9>yarn外部管理界面端口号:8088

                  HDFS外部管理界面端口号:50070

                  secondarynamenode外部管理界面端口号:50090

7、组件启动

      启动namenode:

      sbin/hadoop-daemon.sh start namenode

      启动datanode:

      sbin/hadoop-daemon.sh start datanode

      启动resourcemanager:

      sbin/yarn-daemon.sh start resourcemanager

      启动nodemanager:

      sbin/yarn-daemon.sh start nodemanager

8、日志

      日志文件:分析日志文件的格式.log和.out

      .log:通过log4j记录的,记录大部分应用程序的日志信息

      .out:记录标准输出和标准错误日志,少量记录

      日志文件的命名规则:【框架名称-用户名-进程名-主机名.日志格式后缀】

      出错一定要学会看日志,看错误信息,看.log的日志

9、Hadoop自带历史服务器

     配置:mapred-site.xml

     <property>
                <name>mapreduce.jobhistory.address</name>
                <value>hadoop-senior.ibeifeng.com:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>hadoop-senior.ibeifeng.com:19888</value>
        </property>

     启动历史服务器:sbin/mr-jobhistory-daemon.sh start historyserver

10、日志聚集

      日志聚合是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制。默认情况下,Container/任务日志存在在各个NodeManager上,如果启用日志聚合功能需要额外的配置。

       yarn-site.xml

        <property>
                <name>yarn.log-aggregation-enable</name>
                <value>true</value>
        </property>
        <property>
                <name>yarn.log-aggregation.retain-seconds</name>
                <value>106800</value>
        </property>

        单位:秒

      重启resourcemanager、nodemanager和historyserver:

      sbin/yarn-daemon.sh stop resourcemanager

      sbin/yarn-daemon.sh stop nodemanager

      sbin/mr-jobhistory-daemon.sh stop historyserver

      sbin/yarn-daemon.sh start resourcemanager

      sbin/yarn-daemon.sh start nodemanager

      sbin/mr-jobhistory-daemon.sh start historyserver

11、HDFS用户权限检查

      hdfs-site.xml

      <property>
                <name>dfs.permissions.enabled</name>
                <value>false</name>
      </property>

      core-site.xml

      <property>
                <name>hadoop.http.staticuser.user</name>
                <value>beifeng</value>
      </property>

 

      重启namenode、datanode、resourcemanager、nodemanager和historyserver:

      sbin/hadoop-daemon.sh stop namenode

      sbin/hadoop-daemon.sh stop datanode

      sbin/yarn-daemon.sh stop resourcemanager

      sbin/yarn-daemon.sh stop nodemanager

      sbin/mr-jobhistory-daemon.sh stop historyserver

      sbin/hadoop-daemon.sh start namenode

      sbin/hadoop-daemon.sh start datanode

      sbin/yarn-daemon.sh start resourcemanager

      sbin/yarn-daemon.sh start nodemanager

      sbin/mr-jobhistory-daemon.sh start historyserver

12、SecondaryNameNode

       NameNode启动后的元数据存放在内存中,启动前的元数据存放在本地文件系统文件中。

       HDFS格式化后生成fsimage镜像文件,其中存放文件系统元数据,NameNode会读取此元数据,并存放在内存中。

       edits文件,编辑日志文件,用于保存用户对于HDFS文件系统的每一步行为操作。

       NameNode启动后,先读取fsimage镜像文件,得到元数据,再读取edits日志文件,数据就不会丢失。

       SecondaryNameNode用于减少NameNode重启的时间、合并文件,SecondaryNameNode读取两类文件,加载到内存,写到一个新的fsimage镜像文件,然后再生成一个edits编辑日志文件,每隔一段时间将新生成的fsimage和新生成的edits合并成一个fsimage镜像文件,即每隔一段时间获取HDFS元数据的快照,这样NameNode重启只需要读取内存中的fsimage镜像文件即可,读取镜像文件比读取日志文件快很多。

       hdfs-site.xml

       <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hadoop-senior.ibeifeng.com:50090</value>
       </property>

       启动命令:$ sbin/hadoop-daemon.sh start secondarynamenode

13、块文件存放地址

      /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/BP-2012260383-192.168.74.128-1516569449179/current/finalized

      镜像文件、日志文件存放地址

      /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current

      dfs.blocksize自定义块大小属性(单位字节),在hdfs-site.xml中

14、SSH免密码登陆

      使用sbin/start-dfs.sh脚本文件启动namenode、datanode和secondarynamenode时,需要输入用户密码,使用SSH免密码登陆的话,就给用户生成公钥和私钥,用户将自己的公钥储存在远程主机上,将公钥发到需要登陆的服务器,当需要登陆时,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回去,远程主机用事先存储的公钥进行解密,如果解密成功,就证明用户是可信的,直接允许登陆shell,不再要求密码。

      配置SSH免密码登陆:

      cd home/beifeng/.ssh

      ssh-****** -t rsa

      即生成id_rsa和id_rsa.pub文件,其中id_rsa是私钥,id_rsa.pub是公钥。

      ssh-copy-id hadoop-senior.ibeifeng.com

      即生成authorized_keys和known_hosts文件,其中authorized_keys是向远程主机发送的用户公钥,known_hosts是记录文件,有记录文件就不需要再输入密码了。

15、Hadoop配置常见错误

       <1>不要多次格式化namenode,如需再次格式化,需要先删除data/tmp/下的所有文件。

       <2>集群ID不一致,即

             /opt/modules/hadoop-2.5.0/data/tmp/dfs/name/current/VERSION

             /opt/modules/hadoop-2.5.0/data/tmp/dfs/data/current/VERSION

             两文件中的clusterID不一致,这是由于多次格式化导致的,解决方法可以如<1>,也可以依据namenode中的clusterID来修改datanode中的clusterID。

       <3>端口号被占用,使用netstat -tlun查看。

       <4>多用户混用。即/tmp目录下有多个用户的pid,多个用户在各自的环境中启动了同一个进程,造成pid文件冲突。解决方法:将/tmp目录下的.pid文件全部删除,再用一个用户启动进程。

16、Hadoop配置文件

      Hadoop配置文件分为默认的和自定义的,每个模块对应一个文件。

      系统启动会先加载默认配置文件。默认配置文件存放在jar包中,/opt/modules/hadoop-2.5.0/share/hadoop/common/hadoop-common-2.5.0.jar中存放有core-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/hdfs/hadoop-hdfs-2.5.0.jar中存放有hdfs-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.5.0.jar中存放有mapred-default.xml,/opt/modules/hadoop-2.5.0/share/hadoop/yarn/hadoop-yarn-common-2.5.0.jar中存放有yarn-default.xml。

       自定义配置文件优先级高于默认配置文件,如果自定义配置文件中有配置,会覆盖默认配置文件中的相应属性。

 

17、安装rz工具

       切换到root用户后,用yum安装lrzsz。rz工具用于将Windows中的文件上传到虚拟机中,如CentOS中,只能在远程工具中使用,不能在虚拟机中使用。

      su

      password:

      yum -y install lrzsz

18、遇到的问题

       我的虚拟机IP地址为192.168.74.128,hostname为hadoop-senior.ibeifeng.com,在成功启动了namenode、datanode、resourcemanager、nodemanager、historyserver之后,物理机的浏览器可以输入http://192.168.74.128:50070后可以正常访问HDFS管理界面,但是输入http://hadoop-senior.ibeifeng.com:50070之后提示“网页无法访问”。原因是我的物理机上的C:\\Windows\System32\drivers\etc\下的hosts文件没有做虚拟机的主机名和虚拟机的IP地址的映射,用Administrator账户登录,并修改hosts文件即可。