hdfs伪分布式集群搭建和部署详解
阅读原文时间:2021年04月20日阅读:1

    hadoop大致可分为三个部分:
    1、分布式存储,HDFS(Hadoop Distributed File System);
    2、分布式计算,MapReduce;
    3、资源管理系统,Yarn。
    下面直接进入正题:伪分布式集群的搭建。
    环境:
        ① Vmvare workStation、
        ② Linux(CentOS,Ubuntu等,我用的是CentOS_6.5版本下载)
        ③ Jdk(7或7以上均可)
        ④ Hdaoop2.6.5安装包
    以上文件下载地址:https://pan.baidu.com/s/1ek7QjQSaWBJD2uikY3DTng
    安装步骤:
    ① 安装jdk,解压即可,安装之后配置环境变量,修改/etc/profile文件,为什么要修改这个文件?是因为hadoop可以通过配置找到jdk,根本因为hadoop是java语言编写,也需要在jvm中运行。完成以后,配置ip/主机名映射,修改/etc/hosts文件。
        [root@xiaoku ~]# rpm -i jdk-8u151-linux-x64.rpm
        [root@xiaoku ~]# vi /etc/profile
        在profile文件底部添加:
        export JAVA_HOME=/usr/java/jdk1.8.0_151
        export PATH=$PATH:$JAVA_HOME/bin
        [root@xiaoku ~]# vi /etc/hosts
        在hosts文件底部添加(主机名安装操作系统时可自定义,但不能出现像"."、“_”、“/”这样的字符,后面格式化的时候会出错)
        192.168.201.77 xiaoku
    ② 设置免密码登录
        设置免密码登录的目的是为了实现hadoop的自动化操作,搭建好集群后,各个节点之间通过ssh的方式进行通信,只需要各节点持有的公钥相同即可完成认证,也保障了通信的安全性。
        [root@xiaoku ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
        [root@xiaoku ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    ③ 安装hadoop2.6.5
        [root@xiaoku ~]# tar xf hadoop-2.6.5.tar.gz
        解压成功后会出现hadoop-2.6.5文件,将其复制到新的文件夹下
        创建新目录/opt/source(可自定义),用来存放安装包
        [root@xiaoku ~]# mkdir /opt/source
        [root@xiaoku ~]# mv hadoop-2.6.5 /opt/source
        添加环境变量:修改/etc/profile文件底部添加:
        export HADOOP_PREFIX=/opt/source/hadoop-2.6.5
        同时PATH后添加:
        export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
        此时环境变量配置完了,加载到内存
        [root@xiaoku ~]# . /etc/profile
        加载完成后,hadoop的命令就会生效了。
    ④ 修改脚本文件和配置文件
        [root@xiaoku source]# cd hadoop-2.6.5/etc/hadoop/
        [root@xiaoku source]# cat $JAVA_HOME
        会得到一个目录/usr/java/jdk1.8.0_151,即当前jdk所在目录,复制
        修改hadoop目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh
        [root@xiaoku source]# vi hadoop-env.sh
        [root@xiaoku source]# vi mapred-env.sh
        [root@xiaoku source]# vi yarn-env.sh
        打开文件找到export JAVA_HOME=${JAVA_HOME},如果前面有#的说明被注释了,将其打开即可,
        然后将${JAVA_HOME}替换为复制的jdk目录。
        为什么要这么做呢?是为搭建真分布式集群做准备,如果通过本地节点,可以获取到${JAVA_HOME}的值为当前jdk所在目录,如果通过ssh远程调用的时候,就获取不到值,程序就会报错。
        下面修改配置文件core-site.xml、hdfs-site.xml和slaves
        [root@xiaoku source]# vi core-site.xml
        添加如下配置,是为了启动namenode的时候,能够找到默认的namenode主机节点
                                                fs.defaultFS                     hdfs://xiaoku:9000                            
        同时必须添加一个如下配置:
                            hadoop.tmp.dir                 /var/xiaoku/hadoop/local(可自定义,在/var目录下建立均可)            
        在hadoop默认配置中,hadoop.tmp.dir指向的是linux的/tmp/hadoop-${user.name},此目录在节点宕机等情况发生时会被清空,此时hadoop的数据将被清空。

        默认配置参考官方文档:http://hadoop.apache.org/docs/r2.6.5/做菜单栏下的Configuration

        [root@xiaoku source]# vi hdfs-site.xml
                                    dfs.replication                 1//添加块的副本数,伪分布式集群只有一个节点,为1;分布式节点为多个                                         dfs.namenode.secondary.http-address                 xiaoku:50090//配置secondaryNamenode的ip和端口(默认50090),参考官档                    
        [root@xiaoku source]# vi slaves
        将localhost修改成当前节点主机名即可。slaves存放的是datanode各个节点的主机名或ip,目前主机名为当前节点,真分布式则有多个
    ⑤ 格式化文件系统,进行hdfs集群的部署,启动集群
        [root@xiaoku source]# hdfs namenode -format
        格式化成功的标志是没有报错,并在日志中出现successfully formatted字样,格式化之后会在/var生成/xiaoku/hadoop/local…的目录。
        格式化之后会在/var/xiaoku/hadoop/local/dfs/name/current/下的VERSION中存放一个clusterId,集群启动后也会在/var/xiaoku/hadoop/local/dfs/data/current/下的VERSION中存放一个clusterId
        只有当两个clusterId相同时,节点才会正常,否则datanode在启动一段时间之后会自动消失,原因就是datanode会通过clusterId来寻找对应的主机。
        [root@xiaoku source]# start-dfs.sh
        此时会逐渐启动namenode、datanode和secondaryNamenode
        [root@xiaoku source]# jps

        打印java进程,查看个节点是否启动成功

 如果进程中有上面四个,就说明启动成功

    ⑥ hdfs webUI界面
        在浏览器输入ip:50070或namenode主机名:50070
        如果出现下面的界面就说明成功了:
        

        下拉可以查看Live nodes,即slaves的有效节点数。
        到此,为分布式集群搭建结束。