zoukankan      html  css  js  c++  java
  • 大数据高可用集群环境安装与配置(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/

  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/EmptyFS/p/12113138.html
Copyright © 2011-2022 走看看