创新路
我们一直在努力

Hadoop安装

Hadoop:是一个开源框架,允许使用简单的编程模型在跨计算机集群的分布式环境中存储和处理大数据。它的设计是从单个服务器扩展到数千个机器,每个都提供本地计算和存储。包含有HDFS分布式文件系统模块,Mapreduce模块是一种编程模型,用于大规模数据集的并行运算,Yarn模块是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度以及等等

HDFS 角色及概念 :hadoop分布式文件系统(空间≈单台datanode空间*datanode数量)

  1. HDFS是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,用于在低成本的通用硬件上运行。(分布式的文件存储系统)

  2. 角色和概念 (fsimage:文件存储位置文件,fsedit:数据位置变更日志)

    A. Client :切分文件,访问HDFS,与NameNode交互,获取文件位置信息,与DataNode交互,读取和写入数据。 (存数据和切分文件分布式存储)

    B. Namenode  :Master节点,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理所有客户端请求。(管理者:数据存哪个datanode,记录文件存哪儿)

    C. Secondarynode :定期合幵 fsimage 和fsedits,推送给NameNode,紧急情况下,可辅劣恢复NameNode (综合文件存储文件和数据位置变更日志,让fsedit不臃肿,数据出现紧急情况可以参考)

    D. Datanode :数据存储节点,存储实际的数据,汇报存储信息给NameNode。

    E. Block(数据块大小):每块缺省64MB大小,每块可以多个副本

 

Mapreduce 角色及概念:一种编程模型,用于大规模数据集的并行运算

  1. JobTracker

    Master节点,只有一个管理所有作业,作业/任务的监控、错误处理等,将任务分解成一系列任务,幵分派给TaskTracker。

  2. TaskTracker

    Slave节点,一般是多台,运行Map Task和Reduce Task,并与JobTracker交互,汇报任务状态

  3. Map Task

    解析每条数据记录,传递给用户编写的map(),幵执行,将输出结果写入本地磁盘(如果为map-only作业,直接写入HDFS)。

  4. Reducer Task

    从Map Task的执行结果中,远程读取输入数据,对数据进行排序,将数据按照分组传递

给用户编写的reduce函数执行。

 

Yarn 角色及概念:

  Yarn 是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度

  Yarn 的角色

    1. Resourcemanager:处理客户端请求,启动 / 监控 ApplicationMaster,监控 NodeManager

    2. Nodemanager:单个节点上的资源管理,处理来自 ResourceManager 的命令,处理来自 ApplicationMaster 的命令

    3. ApplicationMaster:数据切分,为应用程序申请资源,幵分配给内部任务,任务监控不容错Yarn 角色及概念

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

    5. Client:用户与 YARN 交互的客户端程序,提交应用程序、监控应用程序状态,杀死应用程序等

 

Hadoop 安装配置

    Hadoop 的部署模式有三种

    1. 单机

    2. 伪分布式 (安装在一台机器上)

    3. 完全分布式(安装在多台机器上)

一、单机模式

  1. 设置hostname名字,例如node1

     设置hosts:xxx.xxx.xxx.xxx node1

  2. 装软件包yum -y install java-1.8.0-openjdk-devel(依赖)

  3. 在http://hadoop.apache.org上下在hadoop包

  4. 解压hadoop包,移动/usr/local/hadoop(改名)

  5. 配置hadoop:改配置脚本/usr/local/hadoop/etc/hadoop/hadoop-env.sh

            export

            jAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre"

            //配置JAVA的主目录,可rpm -ql java-1.8.0-openjdk查看

            export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/usr/local/hadoop/etc/hadoop"}

            //配置hadoop的配置文件目录

  6 可添加PATH路径,然后hadoop version查看版本信息

  

例:查看单词的出现次数

    hadoop jar ./share/hadoop/

    mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount input output

    Jar:运行java文件    

    hadoop-mapreduce-examples-2.7.3.jar:jar文件的路径,事先有的jar文件在share/hadoop/ mapreduce/下

    Wordcount:单词统计次数的方法

    input output:输入输出的目录,输入目录可以有多个,输出只能有一个,但是输出的目录不能存在

    注:不知道填写什么直接回车,会产生提示

    例子:hadoop jar ./share/hadoop/

    mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount ooo xxx

 

二、Hadoop完全分布式

    1.HDFS分布式文件系统(OpenJdk必须同版本!)

        192.168.1.10 nn1 //namenode,secondarynamenode

        192.168.1.11 node1 //datanode

        192.168.1.12 node2 //datanode

        192.168.1.13 node3 //datanode

        安装java-1.8.0-openjdk-devel

        A. 所有机器配置 /etc/hosts(里面所有的机器都要有,包括本机的)

        B. 在nn1上的ssh的配置文件,不是d的文件中/etc/ssh/ssh_config里面的Host * 下加入StrictHostKeyChecking no  //避免连接时出现yes/no

        C. nn1:生成密钥,传给ALL,包括nn1自己,ssh自己时不需要密码!

        D. 在nn1上配置vim /usr/local/hadoop/etc/hadoop/core-site.xml

            <configuration>

               <property>

                 <name>fs.defaultFS</name>              //文件系统配置

                 <value>hdfs://nn01:9000</value>       //注意hdfs格式

               </property>

               <property>

                 <name>hadoop.tmp.dir</name>      //配置hdfs数据存储位置

                 <value>/var/hadoop</value>      //修改到这个目录下,习惯

               </property>

             </configuration>

        E.在nn1上配置vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml

           <configuration>

              <property>

                  <name>dfs.namenode.http-address</name>  

                  <value>nn1:50070</value>

              </property>

              <property>

                  <name>dfs.namenode.secondary.http-address</name>

                  <value>nn1:50090</value>

              </property>

              <property>

                  <name>dfs.replication</name>

                  <value>2</value>

              </property>

           </configuration>

            dfs.namenode.http-address:配置namenode(也就是nn1)的地址参数,声明namenode的地址,给datanode用的

            dfs.namenode.secondary.http-address:声明secondarynode的地址,我们也把它配置到这台机器上

            dfs.replication:切块的数据存几份,默认存3份,包括原数据!

           拓展:dfs.namenode.name.dir :记录数据的位置及变更文件的路径,默认不修改file://${hadoop.tmp.dir}/dfs/name,在hadoop存数据的位置下

            dfs.datanode.data.dir :存真实数据的位置,也默认不修改,默认:file://${hadoop.tmp.dir}/dfs/data下

        F. 在每台机器上面创建/var/hadoop文件夹

        G. 从nn1上面拷贝/usr/local/hadoop到每台机器上

        H. ./bin/hdfs namenode -format  //在 namenode 上执行格式化操作

        I. /sbin/start-dfs.sh   //启动集群

    验证:在每台机器上使用jps查看,nn1有namenode和secondarynamenode,但是没有datanode,其他只有datanode,在nn1上 bin/hdfs dfsadmin -report查看每台机器的信息,也算是验证是否成功

    2. 部署分布式计算框架

        在etc/hadoop下把mapred-site.xml.template拷贝成mapred-site.xml文件并加入配置

            <configuration>

                <property>

                  <name>mapreduce.framework.name</name>  //部署分布式计算框架

                  <value>yarn</value>   //单击使用local,集群使用yarn

                 </property>

            </configuration>

    3. 安装部集群的资源管理

        在etc/hadoop下添加文件yarn-site.xml的配置

            <configuration>

               <property>             

                  <name>yarn.resourcemanager.hostname</name>       

                             //配置resourcemanager的address

                  <value>nn1</value>   地址写hosts里面的nn1

               </property>

               <property>

                   <name>yarn.nodemanager.aux-services</name>

                            //配置nodemanager的计算框架

                   <value>mapreduce_shuffle</value>                       

                            //使用默认的框架mapreduce_shuffle

               </property>

            </configuration>

    4. 同步配置到所有主机

    5. 启动服务 ./sbin/start-yarn.sh

    6. 验证角色 jps

    7. 验证节点状态 ./bin/yarn node -list

 

HDFS 基本命令 (./bin/hadoop fs回车可以查看到可以使用的命令!)

    如果不能写入,应该是在保护状态,操作./hadoop dfsadmin -safemode leave

    – ./bin/hadoop fs –ls /

        – 对应 shell 命令 ls /

    – ./bin/hadoop fs –mkdir /abc

        – 对应 shell 命令 mkdir /abc

    – ./bin/hadoop fs –rmdir /abc

        – 对应 shell 命令 rmdir /abcHDFS 使用

    – ./bin/hadoop fs –touchz /urfile

        – 对应 shell 命令 touch /urfile

    – ./bin/hadoop fs –cat /urfile

        – 对应 shell 命令 cat /urfile

    – ./bin/hadoop fs –rm /urfile

        – 对应 shell 命令 rm /urfileHDFS 使用

    – 上传文件

        – ./bin/hadoop fs –put localfile /remotefile

    – 下载文件

        – ./bin/hadoop fs –get /remotefile

 

例:词频统计

  ./bin/hadoop fs -mkdir /oo

  ./bin/hadoop fs -put *.txt /oo/

  ./bin/hadoop jar

    ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar  

      wordcount /oo /xx

  (注意oo xx 前面要加/斜线!)

  ./bin/hadoop fs -ls /

 

Hadoop 节点管理

    一、HDFS 增加节点

        1. 启动一个新的系统,禁用 selinux、禁用 firewalld

        2. 设置 ssh 免密码登录

        3. 在所有节点增加新新节点的主机信息 /etc/hosts

        4. 安装 java openjdk 运行环境

        5. 拷贝namnode的 /usr/local/hadoop 到本机

        6. 修改namenode的slaves文件增加该节点

        7. 创建/var/hadoop文件存储位置

        8. 在该节点启动Datanode

            ./sbin/hadoop-daemon.sh start datanode

        9. 设置同步带宽,并同步数据

            ./bin/hdfs dfsadmin -setBalancerBandwidth 67108864

            ./sbin/start-balancer.sh

        10. 查看集群状态

            ./bin/hdfs dfsadmin -report

    二、HDFS 修复节点

        1. 修复节点比较简单,不增加节点基本一致

        2. 需要注意新节点的 ip 不 主机名 要不损坏节点一致

        3. 启动服务

              ./sbin/hadoop-daemon.sh start datanode

        4. 数据恢复是自动的:上线以后会自动恢复数据,如果数据量非常巨大,可能需要一定的时间

    三、HDFS 删除节点

        配置NameNode的 hdfs-site.xml

            1. 增加 dfs.hosts.exclude 配置

                <property>

                  <name>dfs.hosts.exclude</name>

                  <value>/usr/local/hadoop/etc/hadoop/exclude</value>

                </property>

            2. 增加 exclude 配置文件,写入要删除的节点 主机名

            3. 更新数据

                ./bin/hdfs dfsadmin -refreshNodes

            4. 查看状态 ./bin/hdfs dfsadmin -report

                – Normal 正常状态

                – Decommissioned in Program 数据正在迁移

                – Decommissioned 数据迁移完成

                – 注意:只有当状态变成 Decommissioned 才能 down机下线

 

Yarn 的相关操作

  – 由于在 2.x hadoop 引入了 yarn 框架,对于计算节点的操作已经变得非常简单

  – 增加节点

    sbin/yarn-daemon.sh start nodemanager

  – 删除节点

    sbin/yarn-daemon.sh stop nodemanager

  – 查看节点 (Resourcemanager)

./bin/yarn node -list

由于 yarn 不包含数据,所以在增加删除修复节点的时候比较简单,hdfs 要注意数据安全!!

 

NFS 网关

    NFS 网关用途

        1. 用户可以通过操作系统兼容的本地NFSv3客户端来阅览HDFS文件系统

        2. 用户可以从HDFS文件系统下载文档到本地文件系统

        3. 用户可以通过挂载点直接流化数据。支持文件附加,但是丌支持随机写

    NFS 网关支持NFSv3和允许HDFS 作为客户端文件系统的一部分被挂载

    特性与注意事项

    HDFS超级用户是不NameNode进程本身具有相同标识的用户,超级用户可以执行任何操作,因为权限检查永远不会为超级用户失败。

    1. 在非安全模式,运行网关的用户是代理用户

    2. 在安全模式时,Kerberos keytab中的用户是代理用户

    配置 

        1. 启动一个新的系统(nfsgetway),禁用 selinux、禁用 firewalld

            在nfsgetway上添加一个uid和gid相同的用户!

            groupadd -g 200 lxy

            useradd -u 200 -g 200 lxy

            id lxy

           配置nfsgetway的hosts,所有datanode节点和namenode节点

        2. 在nn1上停止集群  ./sbin/stop-all.sh

        3. 在nn1上增加配置 core-site.xml

            <property>

                <name>hadoop.proxyuser.lxy.groups</name>

                   //访问时使用的组,*代表任意组

                <value>*</value>

            </property>

            <property>

                <name>hadoop.proxyuser.lxy.hosts</name>

                  //访问时使用的hosts *代表任意主机

                <value>*</value>

            </property>

        4. 同步配置到datanode(node1,node2,node3)

        5. 在nn1上启动集群./sbin/start-dfs.sh

        6. 查看集群的状态./bin/hdfs dfsadmin -report

        7. 卸载 rpcbind 、nfs-utils

        8. 安装 java openjdk 的运行环境

        9. 同步 namenode 的 /usr/local/hadoop 到本机

        10. 配置 hdfs-site.xml

            … …

            <property>

                <name>nfs.exports.allowed.hosts</name>

                 //设置哪些主机进行什么操作

                <value>* rw</value>  //注意中间的空格

                //所有主机都进行读写操作

            </property>

            … …

            <property>

                <name>nfs.dump.dir</name>

                 //设置文件上传转存的目录(在上传过程中,上传完成才会切分文件,所以要把文件临时放置在一个目录下再切分)

                <value>/var/nfstmp</value>

                 //设置目录

            </property>

        11. 给/var/nfstmp设置属主和属组为lxy

             给/usr/local/hadoop/logs配置lxy的ACL权限rwx

        12. 使用 root 用户启动 portmap 服务(nfs依赖于portmap)

             ./sbin/hadoop-daemon.sh –script ./bin/hdfs start portmap

        13. 使用代理用户(lxy)启动 nfs3

            ./sbin/hadoop-daemon.sh –script ./bin/hdfs start nfs3

            注意:启动 portmap 需要使用 root 用户

            启动 nfs3 需要使用 core-site 里面设置的代理用户

            必须先启动 portmap 之后再启动 nfs3

            如果 portmap 重启了,在重启之后 nfs3 也需要重启

            停止需要先停止nfs3再停止portmap

        14. 客户挂载

            可以先showmount -e 192.168.1.200 查看

            挂载:mount -t nfs -o vers=3,proto=tcp,nolock,noatime,sync,noacl 192.168.1.15:/  /mnt/

            可做开机自动挂载,作为数据库的仓库或者web服务器存放页面

            查看注册服务:rpcinfo -p 192.168.1.15

 

Zookeeper(协调执行顺序)

  进行需要写的操作都有leader处理,读的请求直接交follower处理,如果有冲突,则由leader发起投票解决。

  一个分布式的,开放源码的分布式应用程序协调服务

  用来保证数据在集群间的事务性一致

zookeeper 角色不特性

  – Leader:接受所有Follower的提案请求并统一协调发起提案的投票,负责不所有的Follower内部的数据交换

  – Follower:直接为客户端服务并参不提案的投票,同时不Leader数据交换

  – Observer:直接为客户端服务但并不参与提案的投票,同时也不Leader迚行数据交换

zookeeper 角色与选举

  – 服务在启动的时候是没有角色的 (LOOKING)

  – 角色是通过选举产生的

  – 选举产生一个 leader,剩下的是 follower

  – 选举 leader 原则:

  – 集群中超过半数机器投票选择leader.

  – 假如集群中拥有n台服务器,那么leader必须得到n/2+1台服务器投票  

zookeeper 角色与选举

  – 如果 leader 死亡,从新选举 leader

  – 如果死亡的机器数量达到一半,集群挂起

  – 如果无法得到足够的投票数量,就重新发起投票,如果参不投票的机器不足 n/2+1 集群停止工作

  – 如果 follower 死亡过多,剩余机器丌足 n/2+1 集群也会停止工作

  – observer 不计算在投票总设备数量里面

配置zookeeper(配置一台observer,一台leader,两台follower)

  环境:nn1做observer,node{1..3}做follower和leader

      1. 先配置所有机器的hosts,包括自己的,关闭防火墙和selinux

      2. 安装java环境,最好1.8.0

      3. 解压zookeeper包到/usr/local/zookeeper  习惯

      4. 在zookeeper的conf目录下把zoo_sample.cfg改为zoo.cfg(复制备份源文件)

      5. 在zoo.cfg配置文件中的最后添加

        格式:server.序号=hostname:2888:3888  做observer的在最后冒号注明observer

        例:

            server.1=node1:2888:3888

            server.2=node2:2888:3888

            server.3=node3:2888:3888

            server.4=hann1:2888:3888:observer

      6. 把zookeeper目录传递给所有的主机

      7. 所有的主机创建目录mkdir /tmp/zookeeper,因为上面配置文件中声明了数据存放在这个位置

      8. 在/tmp/zookeeper下创建一个myid文件,每台主机都需要创建,文件内容存放上面zoo.cfg配置文件中的序号就可以了 例:echo 1 > /tmp/zookeeper/myid

         注:myid文件中确保只有一个数字,每台机器上的myid文件的数字都不一样,server.id中的id(也就是上面提到的序号)必须和myid文件中的id一致!Id的范围1~255

      9. 在每台机器上依次启动服务

        /usr/local/zookeeper/bin/zkServer.sh start

        查看状态信息

        /usr/local/zookeeper/bin/zkServer.sh status

        就可以看到那一台机器时leader,哪一台机器时follower

 

利用 api 查看状态的脚本

#!/bin/bash

function getstatus(){

    exec 9<>/dev/tcp/$1/2181 2>/dev/null

    echo stat >&9

    MODE=$(cat <&9 |grep -Po "(?<=Mode:).*")

    exec 9<&-

    echo ${MODE:-NULL}

}

for i in node{1..3} nn01;do

    echo -ne "${i}\t"

    getstatus ${i}

done

 

输出结果为

 

node1 follower

node2 leader

node3 follower

nn1 observer

未经允许不得转载:天府数据港官方信息博客 » Hadoop安装

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机