zoukankan      html  css  js  c++  java
  • Hadoop 2.2.0 集群搭建

    概述

    在前面我有写过关于 Hadoop 集群的搭建,不过之前的 Hadoop 是 1.x 版本的。目前是基于 2.x 版本的 Hadoop,与之前的 1.x 版本的差别还是挺大的。以及更为详细的 SSH 免密码互连登录的配置过程。所以,这里也把我搭建的过程记录下来了。希望于你有益。


    版权说明

    著作权归作者所有。
    商业转载请联系作者获得授权,非商业转载请注明出处。
    本文作者:Q-WHai
    发表日期: 2016年5月4日
    本文链接:http://blog.csdn.net/lemon_tree12138/article/details/51316883
    来源:CSDN
    更多内容:分类 >> 大数据之 Hadoop


    目录


    环境说明

    1. CentOS-6.7 ( master )
    2. CentOS-6.7 ( slave1 )
    3. CentOS-6.7 ( slave2 )
    4. JDK-1.8.0_92 ( Oracle )
    5. Hadoop-2.2.0
    6. 虚拟机环境: VirtualBox 5.0

    系统环境准备

    关闭防火墙

    $ sudo service iptables stop
    $ sudo chkconfig iptables off  # 设置防火墙不随系统启动,这一条你可以选择性添加

    禁用 IPv6

    $ sudo vim /etc/modprobe.d/dist.conf

    添加如下内容

    alias net-pf-10 off
    alias ipv6 off

    重启后验证操作

    $ lsmod|grep ipv6

    禁用 SELinux

    $ sudo vim /etc/selinux/config

    修改后的内容如下:

    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #     enforcing - SELinux security policy is enforced.
    #     permissive - SELinux prints warnings instead of enforcing.
    #     disabled - No SELinux policy is loaded.
    
    # SELINUX=enforcing
    SELINUX=disabled
    
    # SELINUXTYPE= can take one of these two values:
    #     targeted - Targeted processes are protected,
    #     mls - Multi Level Security protection.
    SELINUXTYPE=targeted

    修改 hosts

    (1) hostname

    $ sudo vim /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=master
    GATEWAY=172.16.2.20

    (2)

    $ sudo vim /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    172.16.2.144 master
    172.16.2.171 slave1
    172.16.2.91 slave2

    Oracle JDK 1.8 安装

    关于 Java 的安装,你可以有两种选择。一是 openjdk,另一个就是 Oracle jdk。这里我选择的是 Oracle jdk,而推荐的也是 Oracle jdk。
    安装过程很简单,这里就不赘述了。


    配置 SSH

    配置 SSH 的目的在于实现集群中的机器可以免密码相互登录。

    下载安装

    $ sudo yum -y install openssh-server
    $ sudo yum -y install openssh-clients

    这里的 openssh-clients 不是必须安装的。如果你安装 ssh-server 完成之后,运行 ssh 出现系统无法识别 ssh 的话,需要另外安装 openssh-clients。

    验证

    OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
    Bad escape character 'rsion'.

    如果 SSH 安装成功,验证时会出现类似上面的版本信息。

    创建目录

    $ mkdir -p ~/.ssh
    $ chmod 700 ~/.ssh

    如果你在安装完SSH后,这些目录都未自动生成,请自行创建。如果要免密码登录,.ssh 文件夹的权限也要修改。

    修改配置文件

    执行如下指令:

    $ sudo vim /etc/ssh/sshd_config

    在文件中找到如下内容,将内容前面的注释去掉。如果没有,就自己添加吧。

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile      .ssh/authorized_keys

    这一步是至关重要的,如果没有这一步,那么只能免密码登录本机,而无法免密码登录其他的机子了。
    这里比如,如果你想让 master 主机免密码登录 slave 主机,那么就要修改 master 主机的配置文件。

    重启 ssh

    $ sudo service sshd restart

    由于修改了 ssh 的配置文件,所以这里必须重启 ssh 服务才能生效。

    创建密钥

    $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

    指令的相关参数说明如下:

    ssh-keygen 表示生成密钥
    -t 表示指定生成的密钥类型
    dsa 是dsa密钥认证的意思,即密钥类型
    -P 提供密语
    -f 指定生成的密钥文件

    公钥下发

    $ scp id_dsa.pub slave1:~/.ssh/

    这里是将 master 的公钥下发到 slave 机群中。在第一次下发的时候,会有一些连接提示及密码提示。

    创建认证文件

    $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
    $ chmod 600 ~/.ssh/authorized_keys

    将 master 主机上的公钥添加到用于认证的公钥文件中,authorized_keys 是用于认证的公钥文件。并修改 认证文件的权限。
    此步骤是在 slave 机上完成。

    登录验证

    [hadoop@master .ssh]$ ssh slave1
    Last login: Thu Apr 28 15:17:57 2016 from master
    [hadoop@slave1 ~]$

    补充

    上面的过程只是单向的免密码登录。如果想要两两相互免密码登录,则需要集群中的所有机器都有其他机器的公钥。而具体操作也很简单,这里就不赘述了。


    Hadoop 配置

    下载安装

    这里可以在 Apache 的官网上下载,如果官网已经下架,就去百度或是 Google 里找,总会有的。
    将下载下来的 Hadoop-2.2.0 用 WinSCP 上传到虚拟机上(当然你也可以直接在虚拟机里下载),解压,并重命名为 hadoop。

    $ tar -zxvf hadoop-2.2.0.tar.gz
    $ mv hadoop-2.2.0 hadoop
    $ cd hadoop
    $ chmod -Rv 755 ./bin/
    $ chmod -Rv 755 ./sbin/
    
    $ mkdir -p /home/hadoop/dfs/name
    $ mkdir -p /home/hadoop/dfs/data
    $ mkdir -p /home/hadoop/hadoop/tmp

    上面对两个文件夹进行权限修改,是因为在这两个文件里有一些可执行文件,如果不修改他们的执行权限,那在启动时就会有权限限制。

    配置文件

    对于上面的下载安装步骤,基本已经 ok,不过如果想要正常使用,还是要配置,而 Hadoop 环境部署的核心就是此处的配置文件。
    需要修改的配置文件列表如下:
    1. /etc/profile
    2. HADOOPHOME/etc/hadoop/hadoopenv.sh3.{HADOOP_HOME}/etc/hadoop/yarn-env.sh
    4. HADOOPHOME/etc/hadoop/coresite.xml5.{HADOOP_HOME}/etc/hadoop/hdfs-site.xml
    6. HADOOPHOME/etc/hadoop/mapredsite.xml7.{HADOOP_HOME}/etc/hadoop/yarn-site.xml
    8. ${HADOOP_HOME}/etc/hadoop/slaves

    /etc/profile

    这是系统里的环境变量配置文件。配置此项目的目的是在于方便在任意目录都可以使用 Hadoop/bin 里的可执行文件(当然你也可以把 $HADOOP_HOME/sbin 加进去)。

    export HADOOP_HOME=/home/hadoop/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

    ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh

    在环境变量配置文件的合适位置添加如下 JAVA_HOME 信息:

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_92

    ${HADOOP_HOME}/etc/hadoop/yarn-env.sh

    在环境变量配置文件的合适位置添加如下 JAVA_HOME 信息:

    export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_92

    ${HADOOP_HOME}/etc/hadoop/core-site.xml

    <configuration>
    
        <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
        </property>
    
        <property>
            <name>hadoop.tmp.dir</name>
            <value>file:/home/hadoop/hadoop/tmp</value>
        </property>
    
    </configuration>

    ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

    <configuration>
    
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>master:50090</value>
        </property>
    
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file:/home/hadoop/dfs/name</value>
        </property>
    
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file:/home/hadoop/dfs/data</value>
        </property>
    
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
    
        <property>
            <name>dfs.support.append</name>
            <value>true</value>
        </property>
    
    </configuration>

    dfs.replication 的值一般设为 3,但我们只有两个 Slave 节点,所以 dfs.replication 的值重置为 2。

    ${HADOOP_HOME}/etc/hadoop/mapred-site.xml

    <configuration>
    
        <property>
            <name>mapreduce.job.tracker</name>
            <value>hdfs://master:9001</value>
        </property>
    
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    
    
        <property>
            <name>mapreduce.jobhistory.address</name>
            <value>master:10020</value>
        </property>
    
        <property>
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>master:19888</value>
        </property>
    
    </configuration>

    需要先重命名,默认文件名为 mapred-site.xml.template.

    ${HADOOP_HOME}/etc/hadoop/yarn-site.xml

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

    需要先重命名,默认文件名为 yarn-site.xml.template.

    ${HADOOP_HOME}/etc/hadoop/slaves

    slave1
    slave2

    下发

    这里说的下发就是把配置好的 hadoop,复制到另外两台 Slave 机中。下发的操作是基于 SSH 的,如下:

    $ scp -r ~/hadoop slave1:~/
    $ scp -r ~/hadoop slave2:~/

    启动及验证

    格式化 HDFS

    在启动 Hadoop 之前,我们需要先格式化 HDFS。如下:

    $ hadoop namenode –format

    对于正常格式化的操作,这里会显示如下输出:

    DEPRECATED: Use of this script to execute hdfs command is deprecated.
    Instead use the hdfs command for it.
    
    16/05/04 10:15:38 INFO namenode.NameNode: STARTUP_MSG:
    /************************************************************
    STARTUP_MSG: Starting NameNode
    STARTUP_MSG:   host = master/172.16.2.117
    STARTUP_MSG:   args = [-format]
    STARTUP_MSG:   version = 2.2.0
    STARTUP_MSG:   classpath = /home/hadoop/hadoop/etc/hadoop: ( ... 此处省略 N 条 ... ) :/home/hadoop/hadoop/contrib/                                                                                                                                                             capacity-scheduler/*.jar
    STARTUP_MSG:   build = Unknown -r Unknown; compiled by 'root' on 2013-11-22T03:4                                                                                                                                                             1Z
    STARTUP_MSG:   java = 1.8.0_92
    ************************************************************/
    
     ( ... 此处省略 N 条 ... ) 
    
    16/05/04 10:15:45 INFO common.Storage: Storage directory /home/hadoop/dfs/name has been successfully formatted.
    16/05/04 10:15:45 INFO namenode.FSImage: Saving image file /home/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
    16/05/04 10:15:45 INFO namenode.FSImage: Image file /home/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 198 bytes saved in 0 seconds.
    16/05/04 10:15:45 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
    16/05/04 10:15:45 INFO util.ExitUtil: Exiting with status 0
    16/05/04 10:15:45 INFO namenode.NameNode: SHUTDOWN_MSG:
    /************************************************************
    SHUTDOWN_MSG: Shutting down NameNode at master/172.16.2.117
    ************************************************************/

    启动 HDFS

    $ ${HADOOP_HOME}/sbin/start-dfs.sh

    对于正常的启动来说,会有类似如下的输出内容:

    Starting namenodes on [master]
    The authenticity of host 'master (172.16.2.144)' can't be established.
    RSA key fingerprint is 98:4f:21:03:76:e2:e9:96:77:3e:88:c5:88:70:04:cf.
    Are you sure you want to continue connecting (yes/no)? yes
    master: Warning: Permanently added 'master,172.16.2.144' (RSA) to the list of kn                                                                                                                                                             own hosts.
    master: starting namenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-nam                                                                                                                                                             enode-master.out
    hadoop@slave1's password: hadoop@slave2's password:
    slave1: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-dat                                                                                                                                                             anode-slave1.out
    
    slave2: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-dat                                                                                                                                                             anode-slave2.out
    Starting secondary namenodes [master]
    master: starting secondarynamenode, logging to /home/hadoop/hadoop/logs/hadoop-h                                                                                                                                                             adoop-secondarynamenode-master.out

    启动 Yarn

    $ ${HADOOP_HOME}/sbin/start-yarn.sh

    对于正常的启动来说,会有类似如下的输出内容:

    starting yarn daemons
    starting resourcemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-resourcemanager-master.out
    hadoop@slave2's password: hadoop@slave1's password:
    slave2: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
    
    slave1: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave1.out

    启动全部

    $ ${HADOOP_HOME}/sbin/start-all.sh

    对于正常的启动来说,会有类似如下的输出内容:

    [hadoop@master hadoop]$ ./sbin/start-all.sh
    This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
    Starting namenodes on [master]
    master: starting namenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-namenode-master.out
    slave2: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-slave2.out
    slave1: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-slave1.out
    Starting secondary namenodes [master]
    master: starting secondarynamenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-secondarynamenode-master.out
    starting yarn daemons
    starting resourcemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-resourcemanager-master.out
    slave2: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
    slave1: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave1.out

    验证

    (1) 验证启动的进程

    $ jps

    Master 端

    [hadoop@master hadoop]$ jps
    3202 Jps
    2923 ResourceManager
    2795 SecondaryNameNode
    2637 NameNode

    Slave 端

    [hadoop@slave1 ~]$ jps
    2256 DataNode
    2419 Jps
    2319 NodeManager

    (2) 网页验证

    # 查看 HDFS
    登录浏览器,输入 http://master:50070
    
    # 查看 RM
    登录浏览器,输入 http://master:8088

    关闭全部

    $ ${HADOOP_HOME}/sbin/stop-all.sh

    对于正常的启动来说,会有类似如下的输出内容:

    [hadoop@master hadoop]$ ${HADOOP_HOME}/sbin/stop-all.sh
    This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
    Stopping namenodes on [master]
    master: stopping namenode
    slave2: stopping datanode
    slave1: stopping datanode
    Stopping secondary namenodes [master]
    master: stopping secondarynamenode
    stopping yarn daemons
    no resourcemanager to stop
    slave2: no nodemanager to stop
    slave1: no nodemanager to stop
    no proxyserver to stop

    Ref


  • 相关阅读:
    FLINK基础(87): DS算子与窗口(1)简介
    Flink实例(三十九):状态管理(十)配置checkpoint
    FLINK基础(112): DS算子与窗口(23)多流转换算子(7)Broadcasting
    Flink实例(三十七):状态管理(八)自定义操作符状态(三)广播状态(Broadcast state)(一) KeyedBroadcastProcessFunction
    Flink实例(三十六):状态管理(七)自定义操作符状态(二)union list state
    关闭firecracker
    Creating Custom rootfs and kernel Images
    Build a single-app rootfs for Firecracker MicroVMs
    由浅入深CrosVM(一)—— 如何在Ubuntu中搭建CrosVM
    Making a Custom MicroVM for AWS Firecracker!
  • 原文地址:https://www.cnblogs.com/fengju/p/6335990.html
Copyright © 2011-2022 走看看