美文网首页我爱编程
Hadoop学习(一):完全分布式集群环境搭建

Hadoop学习(一):完全分布式集群环境搭建

作者: HerbGuo | 来源:发表于2017-10-04 12:10 被阅读0次

    1. 设置免密登录

    (1) 新建普通用户hadoop:useradd hadoop
    (2) 在主节点master上生成密钥对,执行命令ssh-keygen -t rsa便会在home文件夹下生成 .ssh 文件以及id_rsa和id_rsa.pub文件 注意:.ssh文件夹的权限为700,否则会影响其他机器的免密登录
    (3) 执行命令:

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 authorized_keys   #修改文件的权限为600
    

    (4) 将authorized_keys文件拷贝到下一个主机上后重复上述操作。
    scp ~/.ssh/authorized_keys hadoop@slave1:/home/hadoop/.ssh/authorized_keys
    若拷贝出错,则在.ssh文件 可手动建立,但是注意修改其权限为700:chmod 700 .ssh
    。。。
    以此类推,最终在最后一个节点上的authorized_keys上包括了所有主机的公钥,再将它拷贝到其他节点上,完成免密登录的设置。

    2.设置hosts文件

    本人搭建的Hadoop环境包括有一个主节点和三个从节点,配置为:一个NameNode,一个SecondaryNameNode以及两个DataNode。
    /etc/hosts添加配置如下

    10.0.209.122 master122 hadoop-NameNode-122
    10.0.209.123 slave123 hadoop-SecondaryNameNode-123
    10.0.209.124 slave124 hadoop-DataNode-124
    10.0.209.125 slave125 hadoop-DataNode-125

    在一个主机上配置完成后,将该文件拷贝到其他节点之上。

    3.安装Hadoop

    首先,在master节点上,使用root用户在/usr/local/文件夹下新建hadoop文件夹,并修改该文件夹对普通用户有读写权限

    mkdir /usr/local/hadoop
    chmod 777 /usr/local/hadoop
    

    使用普通用户hadoop登录:su hadoop
    下载jdk1.8安装包以及hadoop的安装包,并加压文件到/usr/local/hadoop下

    wget wget http://apache.claz.org/hadoop/common/hadoop-2.8.1/hadoop-2.8.1.tar.gz
    tar -xzvf  hadoop-2.8.1.tar.gz -C /usr/local/hadoop
    

    加压后/usr/local/hadoop/文件夹下包含jdk1.8以及hadoop2.8.1,
    切换到root用户,编辑/etc/profile文件

    JAVA_HOME=/usr/local/hadoop/jdk1.8.0_102
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.1
    PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
    
    export JAVA_HOME
    export PATH
    export HADOOP_HOME
    export CLASSPATH
    

    保存后执行source /etc/profile 使其立即生效。
    然后执行java -version和hadoop version验证,配置安装成功。

    4.配置Hadoop集群

    (1). 配置core-site.xml

    修改Hadoop核心配置文件/usr/local/hadoop/etc/hadoop/core-site.xml,通过fs.default.name指定NameNode的IP地址和端口号,通过hadoop.tmp.dir指定hadoop数据存储的临时文件夹。

    <configuration>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/usr/local/hadoop/hadoop-2.8.1/tmp</value>
    <description>Abase for other temporary directories.</description>
    </property>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://master122:9000</value>
    </property>
    </configuration>

    特别注意:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删除,必须重新执行format才行,否则会出错。

    (2).配置hdfs-site.xml

    修改HDFS核心配置文件/usr/local/hadoop/etc/hadoop/hdfs-site.xml,通过dfs.replication指定HDFS的备份因子为3,通过dfs.name.dir指定namenode节点的文件存储目录,通过dfs.data.dir指定datanode节点的文件存储目录。

    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>3</value>
    </property>
    <property>
    <name>dfs.name.dir</name>
    <value>/usr/local/hadoop/hdfs/name</value>
    </property>
    <property>
    <name>dfs.data.dir</name>
    <value>/usr/local/hadoop/hdfs/data</value>
    </property>
    <property>
    <name>dfs.namenode.secondary.http-address</name> #配置SecondaryNameNode
    <value>slave123:50090</value>
    </property>
    </configuration>

    (3).配置mapred-site.xml

    拷贝mapred-site.xml.template为mapred-site.xml,再进行修改。

    cp /usr/local/hadoop/hadoop-2.8.1/etc/hadoop/mapred-site.xml.template /usr/local/hadoop/hadoop-2.8.1/etc/hadoop/mapred-site.xml  
    vi /usr/local/hadoop/hadoop-2.8.1/etc/hadoop/mapred-site.xml
    

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    <property>
    <name>mapred.job.tracker</name>

      <value>http://hadoop-master:9001</value>
    

    </property>
    </configuration>

    (4).配置yarn-site.xml

    <configuration>

    <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    </property>
    <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop-master</value>
    </property>
    </configuration>

    (5).配置masters文件

    增加/usr/local/hadoop/etc/hadoop/masters文件,该文件指定namenode节点所在的服务器机器。添加namenode节点的主机名master122;不建议使用IP地址,因为IP地址可能会变化,但是主机名一般不会变化。另外,为将SecondaryNameNode与NameNode分开,可将SecondaryNameNode节点的主机也加入到masters文件之中。

    master122
    slave123
    

    (6).配置slaves节点(Master主机特有)

    修改/usr/local/hadoop/etc/hadoop/slaves文件,该文件指定哪些服务器节点是datanode节点。删除locahost,添加所有datanode节点的主机名,如下所示。
    vi /usr/local/hadoop/hadoop-2.8.1/etc/hadoop/slaves

    slave123
    slave124
    slave125

    (7).配置hadoop-env.sh文件

    修改jdk的目录,以及集群间免密互连的端口(由于本人修改了ssh的默认端口,而hadoop默认是以22端口连接,所以需要进行添加配置)

    export JAVA_HOME=/usr/local/hadoop/jdk1.8.0_102   #修改jdk路径
    export HADOOP_SSH_OPTS="-p 22000"  #添加ssh自定义端口
    

    (8).配置ssh客户端配置

    由于修改了ssh的默认端口,使得在使用ssh以及scp时都要加上-p/-P 非常的繁琐(主要是因为懒是人类进步的阶梯),所以修改ssh的客户端配置,使其默认配置端口为自定义端口。
    vi /etc/ssh/ssh_config

    Port 22000    #将源端口22修改为自定义端口22000
    

    5.同步配置到其他节点

    第4步配置是在主节点master上进行的配置,下面要将上述配置好的jdk以及hadoop软件包拷贝到其他从节点上,首先在各个从节点建立文件夹/usr/local/hadoop,并将其权限设置为777,然后用普通用户hadoop执行命令:

    scp -r /usr/local/hadoop/* slave123:/usr/local/hadoop/ &
    scp -r /usr/local/hadoop/* slave124:/usr/local/hadoop/ &
    scp -r /usr/local/hadoop/* slave125:/usr/local/hadoop/ &
    

    由于已经配置ssh客户端的连接端口,所以这里不需要特意指定,加‘&’因为hadoop/下包含jdk以及hadoop软件包,文件很大,放入后台执行更方便。
    下面继续将/etc/profile下的JAVA_HOME和HADOOP_HOME配置同步配置到其他节点,至此集群的搭建配置完成。

    6.启动集群

    在主节点master上进入到/usr/local/hadoop/hadoop-2.8.1/执行命令:

    bin/hadoop namenode -format  #格式化namenode,第一次启动服务前执行的操作,以后不需要执行。
    

    然后启动hadoop:

    sbin/start-all.sh
    

    执行jps命令查看运行情况
    通过简单的jps命令虽然可以查看HDFS文件管理系统、MapReduce服务是否启动成功,但是无法查看到Hadoop整个集群的运行状态。我们可以通过hadoop dfsadmin -report进行查看。用该命令可以快速定位出哪些节点挂掉了,HDFS的容量以及使用了多少,以及每个节点的硬盘使用情况。
    停止hadoop命令:sbin/stop-all.sh

    至此,hadoop集群搭建配置完毕。

    7.可能的错误

    The authenticity of host ‘0.0.0.0 (0.0.0.0)’ can’t be established.

    解决方案:关闭SELINUX

    -- 关闭SELINUX
    # vim /etc/selinux/config
    -- 注释掉
    #SELINUX=enforcing
    #SELINUXTYPE=targeted
    — 添加
    SELINUX=disabled
    

    相关文章

      网友评论

        本文标题:Hadoop学习(一):完全分布式集群环境搭建

        本文链接:https://www.haomeiwen.com/subject/ebegextx.html