hdfs伪分布式集群搭建和部署详解

    大家好,这是我的第一篇技术博客,也是第一篇博客,请大家多多支持。我写博客的初衷无非是对所学知识的回顾和总结,同时能与广大的读者一起探讨,共同进步,这是一件非常令人开心的事。
    博客的内容大都是大数据技术相关,今天要说的是hadoop,以后会可能还会更新,hive,Hbase,flume,spark,storm等。希望大家多多批评和指正,我一定虚心接受。
    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/1o9Eu6nC
    安装步骤:
    ① 安装jdk,解压即可,安装之后配置环境变量,修改/etc/profile文件,为什么要修改这个文件?是因为hadoop可以通过配置找到jdk,根本因为hadoop是java语言编写,也需要在jvm中运行。完成以后,配置ip/主机名映射,修改/etc/hosts文件。
        [[email protected] ~]# rpm -i jdk-8u151-linux-x64.rpm
        [[email protected] ~]# vi /etc/profile
        在profile文件底部添加:
        export JAVA_HOME=/usr/java/jdk1.8.0_151
        export PATH=$PATH:$JAVA_HOME/bin
        [[email protected] ~]# vi /etc/hosts
        在hosts文件底部添加(主机名安装操作系统时可自定义,但不能出现像"."、“_”、“/”这样的字符,后面格式化的时候会出错)
        192.168.201.77 xiaoku
    ② 设置免密码登录
        设置免密码登录的目的是为了实现hadoop的自动化操作,搭建好集群后,各个节点之间通过ssh的方式进行通信,只需要各节点持有的公钥相同即可完成认证,也保障了通信的安全性。
        [[email protected] ~]# ssh-****** -t dsa -P '' -f ~/.ssh/id_dsa
        [[email protected] ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    ③ 安装hadoop2.6.5
        [[email protected] ~]# tar xf hadoop-2.6.5.tar.gz
        解压成功后会出现hadoop-2.6.5文件,将其复制到新的文件夹下
        创建新目录/opt/source(可自定义),用来存放安装包
        [[email protected] ~]# mkdir /opt/source
        [[email protected] ~]# 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
        此时环境变量配置完了,加载到内存
        [[email protected] ~]# . /etc/profile
        加载完成后,hadoop的命令就会生效了。
    ④ 修改脚本文件和配置文件
        [[email protected] source]# cd hadoop-2.6.5/etc/hadoop/
        [[email protected] source]# cat $JAVA_HOME
        会得到一个目录/usr/java/jdk1.8.0_151,即当前jdk所在目录,复制
        修改hadoop目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh
        [[email protected] source]# vi hadoop-env.sh
        [[email protected] source]# vi mapred-env.sh
        [[email protected] source]# vi yarn-env.sh
        打开文件找到export JAVA_HOME=${JAVA_HOME},如果前面有#的说明被注释了,将其打开即可,
        然后将${JAVA_HOME}替换为复制的jdk目录。
        为什么要这么做呢?是为搭建真分布式集群做准备,如果通过本地节点,可以获取到${JAVA_HOME}的值为当前jdk所在目录,如果通过ssh远程调用的时候,就获取不到值,程序就会报错。
        下面修改配置文件core-site.xml、hdfs-site.xml和slaves
        [[email protected] source]# vi core-site.xml
        添加如下配置,是为了启动namenode的时候,能够找到默认的namenode主机节点
            <configuration>
                <property>
                    <name>fs.defaultFS</name>
                    <value>hdfs://xiaoku:9000</value>
                </property>
            </configuration>
        同时必须添加一个如下配置:
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/var/xiaoku/hadoop/local</value>(可自定义,在/var目录下建立均可)
            </property>
        在hadoop默认配置中,hadoop.tmp.dir指向的是linux的/tmp/hadoop-${user.name},此目录在节点宕机等情况发生时会被清空,此时hadoop的数据将被清空。

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

hdfs伪分布式集群搭建和部署详解

        [[email protected] source]# vi hdfs-site.xml
        <configuration>
            <property>
                <name>dfs.replication</name>
                <value>1</value>//添加块的副本数,伪分布式集群只有一个节点,为1;分布式节点为多个
            </property>
            <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>xiaoku:50090</value>//配置secondaryNamenode的ip和端口(默认50090),参考官档
            </property>
        </configuration>
        [[email protected] source]# vi slaves
        将localhost修改成当前节点主机名即可。slaves存放的是datanode各个节点的主机名或ip,目前主机名为当前节点,真分布式则有多个
    ⑤ 格式化文件系统,进行hdfs集群的部署,启动集群
        [[email protected] 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来寻找对应的主机。
        [[email protected] source]# start-dfs.sh
        此时会逐渐启动namenode、datanode和secondaryNamenode
        [[email protected] source]# jps

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

hdfs伪分布式集群搭建和部署详解

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

    ⑥ hdfs webUI界面
        在浏览器输入ip:50070或namenode主机名:50070
        如果出现下面的界面就说明成功了:
        hdfs伪分布式集群搭建和部署详解

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