• 大数据高可用集群环境安装与配置(06)——安装Hadoop高可用集群


    下载Hadoop安装包

    登录 https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/ 镜像站,找到我们要安装的版本,点击进去复制下载链接

    安装Hadoop时要注意版本与后续安装的HBase、Spark等相关组件的兼容,不要安装了不匹配的版本,而导致某些组件需要重装

    输入命令进行安装操作

    cd /usr/local/src/
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
    tar -zxvf hadoop-2.7.7.tar.gz
    mv hadoop-2.7.7 /usr/local/hadoop/

    修改服务器系统环境变量

    所有服务器都需要按要求修改配置

    vi /etc/profile

    在尾部添加下面配置

    export HADOOP_HOME=/usr/local/hadoop/
    export PATH=$PATH:$HADOOP_HOME/bin

    保存退出后,运行命令,让配置马上生效

    source /etc/profile

    创建Hadoop需要的文件夹

    # 所有服务器都需要执行创建hadoop的tmp文件夹
    mkdir -p /data/hadoop/
    
    # 在两台master服务器创建这个文件夹
    mkdir -p /data/hadoop/journaldata

    安装NSCD服务

    Hadoop高度依赖DNS,因此在正常运行期间会执行许多DNS查找。为了减少DNS基础结构的负载,需要在运行Linux或任何其他dns缓存机制(即dnsmasq)的群集节点上使用名称服务缓存守护程序(NSCD)。

    该守护程序将缓存主机,用户和组查找,并提供更好的解析性能,并减少DNS基础结构的负载。

    # 每台服务器上都安装
    yum -y install nscd
    systemctl enable nscd
    systemctl start nscd

    设置nscd配置

    vi /etc/nscd.conf

    按下面配置进行修改

            enable-cache            passwd          yes
            positive-time-to-live   passwd          600
            negative-time-to-live   passwd          20
            suggested-size          passwd          211
            check-files             passwd          yes
            persistent              passwd          yes
            shared                  passwd          yes
            max-db-size             passwd          33554432
            auto-propagate          passwd          yes
    
            enable-cache            group           yes
            positive-time-to-live   group           3600
            negative-time-to-live   group           60
            suggested-size          group           211
            check-files             group           yes
            persistent              group           yes
            shared                  group           yes
            max-db-size             group           33554432
            auto-propagate          group           yes
    
            enable-cache            hosts           yes
            positive-time-to-live   hosts           3600
            negative-time-to-live   hosts           20
            suggested-size          hosts           211
            check-files             hosts           yes
            persistent              hosts           yes
            shared                  hosts           yes
            max-db-size             hosts           33554432
    
            enable-cache            services        no
            positive-time-to-live   services        28800
            negative-time-to-live   services        20
            suggested-size          services        211
            check-files             services        yes
            persistent              services        yes
            shared                  services        yes
            max-db-size             services        33554432
    
            enable-cache            netgroup        yes
            positive-time-to-live   netgroup        28800
            negative-time-to-live   netgroup        20
            suggested-size          netgroup        211
            check-files             netgroup        yes
            persistent              netgroup        yes
            shared                  netgroup        yes
            max-db-size             netgroup        33554432

    配置Hadoop参数

    打开Hadoop对应版本的官方页面,按说明对Hadoop配置文件配置相关参数

    http://hadoop.apache.org/docs/r3.1.3/hadoop-project-dist/hadoop-common/SingleCluster.html

    1. 配置hadoop-env.sh

    cd /usr/local/hadoop/etc/hadoop/
    vi hadoop-env.sh

    在文件尾部添加相关配置(优化gc参数,记录gc日志)

    export HADOOP_IDENT_STRING=$USER
    export JAVA_HOME=/usr/local/java/jdk/
    export HADOOP_NAMENODE_OPTS="-XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:/data/logs/hadoop/gc-`date +'%Y%m%d'`.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ${HADOOP_NAMENODE_OPTS}"

    2. 配置core-site.xml

    vi core-site.xml

    将配置文件里的内容修改为下面内容:

    <configuration>
        <!-- NameNode URI,客户端访问HDFS地址 -->
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://nameservice/</value>
        </property>
        <!-- 以分钟为单位的垃圾回收时间,垃圾站中数据超过此时间,会被删除。如果是0,垃圾回收机制关闭 -->
        <property>
            <name>fs.trash.interval</name>
            <value>4320</value>
        </property>
        <!-- 设置hadoop临时目录 -->
        <property>
            <name>hadoop.tmp.dir</name>
            <value>/data/hadoop/</value>
        </property>
        <!-- 设置zookeeper集群地址 -->
        <property>
            <name>ha.zookeeper.quorum</name>
            <value>master:2181,master-backup:2181</value>
        </property>
        <!-- HealthMonitor check namenode 的超时设置,默认50000ms,改为5mins -->
        <property>
            <name>ha.health-monitor.rpc-timeout.ms</name>
            <value>90000</value>
        </property>
        <!-- zk failover的session 超时设置,默认5000ms,改为3mins -->
        <property>
            <name>ha.zookeeper.session-timeout.ms</name>
            <value>90000</value>
        </property>
        <!-- 被删除文件保留时间(小时) -->
        <property>
            <name>fs.trash.interval</name>
            <value>1440</value>
        </property>
        <!-- 每个日志文件的最大值,单位:bytes -->
        <property>
            <name>hadoop.logfile.size</name>
            <value>50000000</value>
        </property>
        <!-- 日志文件的最大数量 -->
        <property>
            <name>hadoop.logfile.count</name>
            <value>10</value>
        </property>
    </configuration>

    3. 配置hdfs-site.xml

    vi hdfs-site.xml

    将配置文件里的内容修改为下面内容:

    <configuration>
        <!-- hadoop存储文件的副本数量 -->
        <property>
            <name>dfs.replication</name>
            <value>2</value>
        </property>
        <!-- 设置hadoop namenode存储路径 -->
        <property>
            <name>dfs.namenode.name.dir</name>
            <value>file://${hadoop.tmp.dir}/dfs/name</value>
        </property>
        <!-- 设置hadoop datanode存储路径 -->
        <property>
            <name>dfs.datanode.data.dir</name>
            <value>file://${hadoop.tmp.dir}/dfs/data</value>
        </property>
        <!--设置hdfs的nameservice,需要和core-site.xml中的保持一致 -->
        <property>
            <name>dfs.nameservices</name>
            <value>nameservice</value>
        </property>
        <!-- nameservice下面有两个NameNode -->
        <property>
            <name>dfs.ha.namenodes.nameservice</name>
            <value>namenodes1,namenodes2</value>
        </property>
        <!-- namenodes1的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.nameservice.namenodes1</name>
            <value>master:9000</value>
        </property>
        <!-- namenodes1的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.nameservice.namenodes1</name>
            <value>master:50070</value>
        </property>
        <!-- namenodes2的RPC通信地址 -->
        <property>
            <name>dfs.namenode.rpc-address.nameservice.namenodes2</name>
            <value>master-backup:9000</value>
        </property>
        <!-- namenodes2的http通信地址 -->
        <property>
            <name>dfs.namenode.http-address.nameservice.namenodes2</name>
            <value>master-backup:50070</value>
        </property>
        <!-- 开启NameNode失败自动切换 -->
        <property>
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        <!-- 设置NameNode的元数据在JournalNode上的存放位置 -->
        <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://master:8485;master-backup:8485/nameservice</value>
        </property>
        <!-- 设置JournalNode存放数据位置 -->
        <property>
            <name>dfs.journalnode.edits.dir</name>
            <value>/data/hadoop/journaldata</value>
        </property>
        <!-- 配置失败自动切换实现方式 -->
        <property>
            <name>dfs.client.failover.proxy.provider.nameservice</name>
            <value>
                org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
            </value>
        </property>
        <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
        <property>
            <name>dfs.ha.fencing.methods</name>
            <value>
                sshfence
                shell(/bin/true)
            </value>
        </property>
        <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
        <property>
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>~/.ssh/id_rsa</value>
        </property>
        <!-- 配置sshfence隔离机制超时时间 -->
        <property>
            <name>dfs.ha.fencing.ssh.connect-timeout</name>
            <value>30000</value>
        </property>
        <!-- JournalNodes选择输入流时超时时间 -->
        <property>
            <name>dfs.qjournal.select-input-streams.timeout.ms</name>
            <value>60000</value>
        </property>
        <!-- EditLog会被切割为很多段,每一段称为一个segment,Namenode发起新写入editlog的RPC调用,会使用startLogSegment方法,该参数表示发起新segment的超时时间 -->
        <property>
            <name>dfs.qjournal.start-segment.timeout.ms</name>
            <value>60000</value>
        </property>
        <!--写入超时时间 -->
        <property>
            <name>dfs.qjournal.write-txns.timeout.ms</name>
            <value>60000</value>
        </property>
        <!-- namenode节点RPC的处理线程数,计算公式(N为集群服务器数量):python -c 'import math ; print int(math.log(N) * 20)' -->
        <property>
            <name>dfs.namenode.handler.counts</name>
            <value>32</value>
        </property>
        <!-- datanode节点RPC的处理线程数 -->
        <property>
            <name>dfs.datanode.handler.count</name>
            <value>30</value>
        </property>
        <!-- datanode同时处理文件的上限 -->
        <property>
            <name>dfs.datanode.max.xcievers</name>
            <value>4096</value>
        </property>
    </configuration>

    4. 配置mapred-site.xml

    mv mapred-site.xml.template mapred-site.xml
    vi mapred-site.xml

    将配置文件里的内容修改为下面内容

    <configuration>
        <!-- 设置执行框架为Hadoop YARN -->
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    </configuration>

    5. 配置yarn-site.xml

    vi yarn-site.xml

    将配置文件里的内容修改为下面内容

    <configuration>
        <!-- 启用resourcemanager为高可用 -->
        <property>
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
        </property>
        <!-- 启用MapReduce功能 -->
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <!-- 定义在节点管理器总的可用资源,用于container申请的物理内存大小。这里需要根据服务器实际的内存大小进行对应的调整 -->
        <property>
            <name>yarn.nodemanager.resource.memory-mb</name>
            <value>1024</value>
        </property>
        <!-- 设置resourcemanager的集群标识, 确保RM不会接管另一个集群 -->
        <property>
            <name>yarn.resourcemanager.cluster-id</name>
            <value>yrc</value>
        </property>
        <!-- 设置resourcemanager的名字 -->
        <property>
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>resourcemanager1,resourcemanager2</value>
        </property>
        <!-- 设置resourcemanager的地址 -->
        <property>
            <name>yarn.resourcemanager.hostname.resourcemanager1</name>
            <value>master</value>
        </property>
        <property>
            <name>yarn.resourcemanager.hostname.resourcemanager2</name>
            <value>master-backup</value>
        </property>
        <!-- 设置resourcemanager的webapp地址 -->
        <property>
            <name>yarn.resourcemanager.webapp.address.resourcemanager1</name>
            <value>master:8088</value>
        </property>
        <property>
            <name>yarn.resourcemanager.webapp.address.resourcemanager2</name>
            <value>master-backup:8088</value>
        </property>
        <!-- 设置zookeeper集群地址 -->
        <property>
            <name>yarn.resourcemanager.zk-address</name>
            <value>master:2181,master-backup:2181</value>
        </property>
        <!-- 开启 YARN 集群的日志聚合功能 -->
        <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
        </property>
        <!-- YARN 集群的聚合日志最长保留时长 -->
        <property>
            <name>yarn.log-aggregation.retain-seconds</name>
            <!--1天-->
            <value>86400</value>
        </property>
        <!-- 启用resourcemanager自动恢复 -->
        <property>
            <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
        </property>
        <!-- 制定 resourcemanager 的状态信息存储在 zookeeper 集群上-->
        <property>
            <name>yarn.resourcemanager.store.class</name>
            <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
        </property>
    </configuration>

    6. 配置hadoop启动用户

    如果使用root用户启动hadoop服务,则需要做以下配置,不然会直接报错

    vi /usr/local/hadoop/sbin/start-dfs.sh

    在第二行直接添加下面配置

    HDFS_DATANODE_USER=root
    HADOOP_SECURE_DN_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
    vi /usr/local/hadoop/sbin/stop-dfs.sh

    在第二行直接添加下面配置

    HDFS_DATANODE_USER=root
    HADOOP_SECURE_DN_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
    vi /usr/local/hadoop/sbin/start-yarn.sh

    在第二行直接添加下面配置

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root
    vi /usr/local/hadoop/sbin/stop-yarn.sh

    在第二行直接添加下面配置

    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root

    7. 添加集群子节点配置

    vi slaves

    将localhost改为下面内容

    node1
    node2
    node3

    8. 将hadoop同步到其他服务器上

    rsync -avz /usr/local/hadoop/ master-backup:/usr/local/hadoop/
    rsync -avz /usr/local/hadoop/ node1:/usr/local/hadoop/
    rsync -avz /usr/local/hadoop/ node2:/usr/local/hadoop/
    rsync -avz /usr/local/hadoop/ node3:/usr/local/hadoop/

    9. 启动journalnode

    分别在master和master-backup服务器上执行命令,启动journalnode

    /usr/local/hadoop/sbin/hadoop-daemon.sh start journalnode

    启动后使用jps查看,可以发现两台服务器上已多出了JournalNode进程

    在两台master服务器上安装psmisc组件,用于故障检查时,服务可以正常执行检查命令:fuser -v -k -n tcp 9000

    yum install -y psmisc

    10. 格式化namenode

    如果是全新集群,第一次namenode启动,需要执行格式化操作(只在master服务器执行)

    /usr/local/hadoop/bin/hdfs namenode -format

    将master服务器namenode格式化生成的文件复制到master-backup中

    rsync -avz /data/hadoop/dfs master-backup:/data/hadoop/

      

    如果是非HA集群转换成HA集群,则需要复制旧集群master上的dfs到新增的master-backup服务器上,即只需要执行上面的复制命令即可,不需要再次格式化

    然后在新master-backup服务器还需要执行下面命令,实现待命状态引导

    /usr/local/hadoop/bin/hdfs namenode -bootstrapStandby

    然后执行初始化操作,将master上的数据同步到master-backup

    /usr/local/hadoop/bin/hdfs namenode -initializeSharedEdits

    11. 格式化ZKFC

    初始化容灾管理器

    /usr/local/hadoop/bin/hdfs zkfc -formatZK

    执行后,可在master和master-backup服务器上分别查看/data/hadoop/journaldata/目录,如果里面自动生成了nameservice文件夹,即表示初台化成功了

    12. 启动hadoop服务

    在master服务器中运行命令,启动HDFS

    /usr/local/hadoop/sbin/start-all.sh

    master-backup服务器上的resourcemanager需要手动启动

    /usr/local/hadoop/sbin/yarn-daemon.sh start resourcemanager

    在master与master-backup服务器上输入jps命令,就可以查看到已启动的服务

    3569 Jps
    1987 JournalNode
    3220 NameNode
    2937 QuorumPeerMain
    10616 ResourceManager
    3501 DFSZKFailoverController

    执行上面命令后,各node节点上也已启动了NodeManager,datanode服务需要手动登录各node节点服务器上去分别启动

    /usr/local/hadoop/sbin/hadoop-daemon.sh start datanode

    输入jps命令,就可以查看到已启动的服务

    15083 NodeManager
    23043 DataNode
    16319 Jps

    13. 查看hadoop运行状态

    在浏览器打开 http://192.168.10.90:8088/cluster 与 http://192.168.10.91:8088/cluster 查看到hadoop的运行状态

    打开 http://192.168.10.90:50070/dfshealth.html#tab-datanode 与 http://192.168.10.91:50070/dfshealth.html#tab-overview 可以分别查看到两个master服务器的namenodes的状态分别为active与standby

    版权声明:本文原创发表于 博客园,作者为 AllEmpty 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

    作者博客:http://www.cnblogs.com/EmptyFS/

  • 相关阅读:
    2017面向对象程序设计寒假作业2!
    寒假学习计划
    2017面向对象程序设计寒假作业1!
    bzoj3583 杰杰的女性朋友
    poj1185 [NOI2001炮兵阵地]
    bzoj1009 [HNOI2008]GT考试
    EXKMP
    bzoj1355 [Baltic2009]Radio Transmission
    poj1275 Cashier Employment
    bzoj3809 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/EmptyFS/p/12113138.html
Copyright © 2020-2023  润新知