继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

全网最详细Hadoop完全分布式部署教程

2018-10-23 16:11:1411961浏览

酷田

3实战 · 10手记 · 3推荐
TA的实战

        在前面的手记《简述Hadoop各种部署方式及学习路线》,分享了关于Hadoop的各种部署方式,那么今天我们就来搭建一个完全分布式的Hadoop环境

        实验环境一共搭建3个节点:

                一、主机名和IP如下:

                node1.hadoop.cn        192.168.184.6        CentOS 7

                node2.hadoop.cn        192.168.184.7        CentOS 7

                node3.hadoop.cn        192.168.184.8        CentOS 7

                二、节点所承担Hadoop中的角色:

                node1.hadoop.cn    namenode    datanode    nodemanager

                node2.hadoop.cn    datanode    nodemanager

                node3.hadoop.cn    datanode    nodemanager    resourcemanager

        集群部署前提:

                在上述3个节点上做以下设置:

                (1)、配置本地DNS解析

                所有3个节点的/etc/hosts追加以下内容:      

                        192.168.184.6 node1.hadoop.cn

                        192.168.184.7 node2.hadoop.cn

                        192.168.184.8 node3.hadoop.cn

                (2)、关闭selinux和iptables

                 所有3个节点上执行:setenforce 0

                查看关闭selinux是否生效:getenforce

                永久关闭selinux:sed -i "s/SELINUX=Enforcing/SELINUX=permissive/g" /etc/sysconfig/selinux

                关闭防火墙:systemctl stop firewalld.service

                关闭开机自启动:systemctl disable firewalld.service      

        正式部署之前,有必要先理清思路。Hadoop的核心就是HDFS和MapReduce,其中HDFS是提供了底层的分布式存储功能,是一个独立的模块,而MapReduce则是建立在HDFS基础之上的,包括Hadoop 2.X版本中引入的YARN计算框架,其也是需要运行在HDFS基础之上。

        因此我们首先来部署HDFS,HDFS由两个进程组成,一个是DataNode,另外一个是NameNode,其中NameNode是元数据的管理节点,存储了元数据的inode信息和目录树结构,但真正的数据是存储在DataNode之上,上面的规划中node1、node2和node3一共3个节点,都提供了DataNode功能,也就是都提供数据存储,但node1还额外提供了NameNode进程;

        因此我们首先部署HDFS,配置步骤如下:

                所需JDK安装包:jdk-8u181-linux-x64.tar.gz

                所需Hadoop安装包:hadoop-2.7.6.tar.gz

        一、配置JAVA环境

                Hadoop中的HDFS或YARN进程,其实质都是启动一个JVM进程,是建立在JAVA环境的基础之上的,因此我们必须首先配置好环境变量

                所有节点都做如下设置:

                tar xf jdk-8u181-linux-x64.tar.gz -C /usr/local/

                ln -sv /usr/local/jdk1.8.0_181 /usr/local/java

                设置后如下图所示:

                

https://img4.mukewang.com/5bceb5330001c95406840335.jpg

                /etc/profile追加一下内容:                        

                        export JAVA_HOME=/usr/local/java

                        export PATH=$JAVA_HOME/bin:$PATH

                        export JAVA_HOME PATH

                追加后使用source /etc/profile命令重读环境变量文件

                至此JAVA环境变量设定完毕,测试是否设置正确,执行一下命令:

                        java -version

                若输出一下信息,表示设置正确

                        https://img2.mukewang.com/5bceb60c00016d2706760104.jpg

        二、配置HDFS

            解压压缩包到指定目录:

                   tar xf hadoop-2.7.6.tar.gz -C /usr/local/

            建立链接:

                    ln -sv /usr/local/hadoop-2.7.6 /usr/local/hadoop

            设定后如下图所示:

                    https://img3.mukewang.com/5bceb7000001ec4008020364.jpg       

            更改属主属组,因为HDFS的NameNode和DataNode进程,我们都会以普通用户hdfs来运行,因此必须将hadoop的目录更改为hdfs所有

                    useradd hdfs

                    passwd hdfs        (输出你想设置的密码)

            root用户下将/usr/local/hadoop下所有文件更改为hdfs所有

                    chown -R hdfs.hdfs /usr/local/hadoop

                    chown -R hdfs.hdfs /usr/local/hadoop/*      

            设定后如下图所示:

                    https://img4.mukewang.com/5bceb7f40001c8d907640331.jpg    

            继续配置HDFS环境变量,编辑/etc/profile文件,修改后的内容如下:

                    https://img1.mukewang.com/5bceb9590001985d06940082.jpg       

            验证是否设置成功:

                    执行命令:hadoop version

                    输出一下内容表示配置HDFS环境变量成功:

                    https://img2.mukewang.com/5bceb9a20001765711240165.jpg 

            确认上述配置无误后,使用su - hdfs切换到hdfs用户下,开始修改配置文件

                    su  -  hdfs

             HDFS的配置文件目录为:/usr/local/hadoop/etc/hadoop

                    编辑hdfs-site.xml文件,内容如下:                    

                    <configuration>

                            <property>

                                    <name>dfs.replication</name>

                                    <value>1</value>

                            </property>

                            <property>

                                    <name>dfs.name.dir</name>

                                    <value>/data02/name/</value>

                            </property>

                            <property>

                                    <name>dfs.data.dir</name>

                                    <value>/data02/data/</value>

                            </property>

                            <property>

                                    <name>dfs.block.size</name>

                                    <value>134217728</value>

                            </property>

                            <property>

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

                                    <value>0.0.0.0:50070</value>

                            </property>

                            <property>

                                    <name>dfs.datanode.address</name>

                                    <value>0.0.0.0:50010</value>

                            </property>

                            <property>

                                    <name>dfs.datanode.ipc.address</name>

                                    <value>0.0.0.0:50020</value>

                            </property>

                            <property>

                                    <name>dfs.datanode.http.address</name>

                                    <value>0.0.0.0:50075</value>

                            </property>

                            <property>

                                    <name>dfs.hosts</name>

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

                            </property>

                            <property>

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

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

                            </property>

</configuration>

            主要参数配置说明:

            dfs.replication                设定副本集

            dfs.name.dir                    设定NameNode的元数据信息存储目录,可以设置多个

            dfs.data.dir                    设定DataNode的数据存在哪里,可以写多个磁盘,用逗号分隔

            dfs.hosts                        文件中的列表为HDFS的DataNode节点

            dfs.hosts.exclude            将文件列表中的主机剔除出HDFS

            接着编辑core-site.xml文件,添加内容如下:                        

                    <property>

                                <name>fs.defaultFS</name>

                                <value>hdfs://node1.hadoop.cn:8020</value>

                    </property>

            参数配置说明:

                    fs.defaultFS            指名NameNode服务RPC连接端口

            编辑white.hosts文件,内容如下:

                    node1.hadoop.cn

                    node2.hadoop.cn

                    node3.hadoop.cn

            说明:white.hosts文件中一行一个主机名,表示可以纳入集群的DataNode节点,根据我们的规划node1.hadoop.cn、node2.hadoop.cn、node3.hadoop.cn都要作为DataNode节点,所以都需要写进去

            black.hosts文件为空表示不需将任何主机从HDFS从剔除,该文件通常用于维护,比如我们的HDFS集群中,有一个DataNode节点有故障,需要下线维护,则可以在NameNode节点的主机上,修改这个配置文件,将需要下线的主机名写进black.hosts文件,就可以将该节点剔除出HDFS集群

            编辑slaves文件,内容如下:                    

                    node1.hadoop.cn

                    node2.hadoop.cn

                    node3.hadoop.cn

            误区:slaves的作用在于我们使用start-dfs.sh启动进程时,帮助节点识别那些节点被纳入到了HDFS集群的,如果这个文件为空,则执行start-dfs.sh只会启动本机的进程(具体启动那些进程依赖于配置文件),但如果该文件不为空,则执行start-dfs.sh时,除启动本机进程外,还会通过ssh的方式登录到slaves文件中所定义的每一台主机,启动相关进程

            经过上述的配置后,我们一共配置了3个文件,分别为:

            hdfs-site.xml

            core-site.xml

             slaves

            white.hosts

            将这4个文件全部拷贝到其他节点上,保证3个节点一致。

            然后执行start-dfs.sh,观察进程是否正常启动,可以通过jps命令查看

            说明:执行上述命令时最好配置到其他主机的免秘钥登录,此处不再提供配置方法                                        


                    

                  

        

打开App,阅读手记
6人推荐
发表评论
随时随地看视频慕课网APP