美文网首页
Hadoop安装部署 双Namenote

Hadoop安装部署 双Namenote

作者: Mr_Gao_ | 来源:发表于2018-01-18 11:12 被阅读0次

    环境

    hdp21 192.168.95.21
    hdp22 192.168.95.22
    hdp23 192.168.95.23
    hdp24 192.168.95.24
    hdp25 192.168.95.25
    时间网络同步、关闭selinux
    创建用户hadoop,密码fujg
    hadoop 用户免密登录
    我准备把所有的文件都放在home目录下
    

    Hadoop2.7.3

    192.168.95.21  hdp21  主NameNode
    192.168.95.22  hdp22  备用NameNode
    192.168.95.23  hdp23  DataNode
    192.168.95.24  hdp24  DataNode
    192.168.95.25  hdp25  DataNode
    

    1 准备

    1,解压安装包到home目录
    tar –zxvf hadoop-2.7.3.tar.gz –C /home/
    2,修改home的权限
    chmod 777 /home
    3,创建目录
    mkdir -pv /home/dfs/{data,name}
    mkdir /home/tmp
    mkdir -pv /home/hadoop-2.7.3/{journal,mapred_local,mapred_system,mr-history}
    mkdir -pv /home/hadoop-2.7.3/mr-history/{done,tmp}
    

    2 编辑配置文件
    2.1 core-site.xml

    
    <configuration>
        <property>
            <!-- hdfs访问端口,这里看hdfs-site.xml中配置的端口,双机 -->
            <name>fs.defaultFS</name>
            <value>hdfs://ns</value>
        </property>
        <property>
            <!-- 临时文件目录 -->
            <name>hadoop.tmp.dir</name>
            <value>/home/tmp</value>
        </property>
        <property>
            <!-- 缓存的大小,单位为byte,默认4k,线上设置为40k,这里设置4k -->
            <name>io.file.buffer.size</name>
            <value>4096</value>
        </property>
        <property>
            <!-- 指定zookeeper地址 -->
            <name>ha.zookeeper.quorum</name>
            <value>hdp21:2181,hdp22:2181,hdp23:2181,hdp24:2181,hdp25:2181</value>
        </property>
        <property>
            <!-- 用户代理机制 属组 -->
            <name>hadoop.proxyuser.hadoop.groups</name>
            <value>hadoop</value>
        </property>
        <property>
            <!-- 用户代理机制 hosts -->
            <name>hadoop.proxyuser.hadoop.hosts</name>
            <value>192.168.95.21</value>
        </property>
        <!-- snappy 文件压缩 -->
        <!--<property>
            <name>io.compression.codecs</name>
            <value>
                org.apache.hadoop.io.compress.GzipCodec,
                org.apache.hadoop.io.compress.DefaultCodec,
                org.apache.hadoop.io.compress.BZip2Codec,
                org.apache.hadoop.io.compress.SnappyCodec
            </value>
        </property>
        -->
    </configuration>
    

    2.2 hdfs-site.xml

    
    
    
    <configuration>
        <property>
            <!-- 指定hdfs的nameservice为ns,要与core-site.xml中的名字一致 -->
            <name>dfs.nameservices</name>
            <value>ns</value>
        </property>
        <property>
            <!-- ns下面配置两个nameNode,nn1、nn2 -->
            <name>dfs.ha.namenodes.ns</name>
            <value>nn1,nn2</value>
        </property>
        <property>
            <!-- nn1的RPC通信地址 -->
            <name>dfs.namenode.rpc-address.ns.nn1</name>
            <value>hdp21:9000</value>
        </property>
        <property>
            <!-- nn1的HTTP通信地址 -->
            <name>dfs.namenode.http-address.ns.nn1</name>
            <value>hdp21:50070</value>
        </property>
        <property>
            <!-- nn2的RPC通信地址 -->
            <name>dfs.namenode.rpc-address.ns.nn2</name>
            <value>hdp22:9000</value>
        </property>
        <property>
            <!-- nn2的HTTP通信地址 -->
            <name>dfs.namenode.http-address.ns.nn2</name>
            <value>hdp22:50070</value>
        </property>
        <property>
            <!-- 指定NameNode的元数据 在JournalNode上的存放位置,使用以下3个节点存储 -->
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://hdp23:8485;hdp24:8485;hdp25:8485/ns</value>
        </property>
        <property>
            <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
            <name>dfs.journalnode.edits.dir</name>
            <value>/home/hadoop-2.7.3/journal</value>
        </property>
        <property>
            <!-- 开启NameNode故障时自动切换 -->
            <name>dfs.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        <property>
            <!-- 失败自动切换实现方式 -->
            <name>dfs.client.failover.proxy.provider.ns</name>
            <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>
        <property>
            <!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 -->
            <name>dfs.ha.fencing.methods</name>
            <value>sshfence</value>
        </property>
        <property>
            <!-- 使用隔离机制时,需要ssh免密登录 -->
            <name>dfs.ha.fencing.ssh.private-key-files</name>
            <value>/home/hadoop/.ssh/id_rsa</value>
        </property>
        <property>
            <!-- 元数据文件目录,默认为//${hadoop.tmp.dir}/dfs/name,这里的hadoop.tmp.dir是core-site.xml中配置的临时文件目录 -->
            <name>dfs.namenode.name.dir</name>
            <value>file:/home/dfs/name</value>
        </property>
        <property>
            <!-- 数据目录 -->
            <name>dfs.datanode.data.dir</name>
            <value>file:/home/dfs/data</value>
        </property>
        <property>
            <!-- 副本的冗余数量,正常应该是三个 -->
            <name>dfs.replication</name>
            <value>3</value>
        </property>
        <property>
            <!-- 在nn和dn上开启webHDFS (REST API) 功能,不是必须 -->
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
        </property>
        
        <!-- 数据节点 追加 start -->
        <property>
            <!-- 是否开启数据节点追加,默认为true,当节点很少(即,节点宕掉了没有新的节点可提供)时,应该关闭 -->
            <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
            <value>true</value>
        </property>
        <property>
            <!-- 数据节点追加,当上一个设置为true时起作用 -->
            <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>
            <value>NEVER</value>
        </property>
        <!-- 数据节点 追加 end -->
        
        <property>
            <!-- 权限检查开关,只有在有权限的环境中有用 -->
            <name>dfs.permissions</name>
            <value>false</value>
        </property>
        <property>
            <!-- webserver使用的用户名,','分隔添加用户组 -->
            <name>dfs.web.ugi</name>
            <value>hadoop,hadoop</value>
        </property>
        <property>
            <!-- 超时时间,单位 毫秒 -->
            <name>dfs.socket.timeout</name>
            <value>240000</value>
        </property>
        <property>
            <!-- 指定用于在DataNode间传输block数据的最大线程数,默认4096 线上配置为40960 -->
            <name>dfs.datanode.max.transfer.threads</name>
            <value>4096</value>
        </property>
        <property>
            <!-- 打开文件数量上限,不能超过系统打开文件数设置 线上配置40960 -->
            <name>dfs.datanode.max.xcievers</name>
            <value>4096</value>
        </property>
        <property>
            <!-- datanode同时处理客户端请求线程数,默认为10 线上配置500 -->
            <name>dfs.datanode.handler.count</name>
            <value>50</value>
        </property>
        <property>
            <!-- namenode线程数,越大消耗内存越大 线上配置500 -->
            <name>dfs.namenode.handler.count</name>
            <value>50</value>
        </property>
        <!-- 动态增删节点,下面两项配置,运行hadoop dfsadmin -refreshNodes 即可使其生效 -->
        <property>
            <!-- 节点写在文件中 -->
            <name>dfs.hosts</name>
            <value>/home/hadoop-2.7.3/etc/hadoop/slaves</value>
        </property>
        <property>
            <!-- 要删除的节点写在文件中 -->
            <name>dfs.hosts.exclude</name>
            <value>/home/hadoop-2.7.3/etc/hadoop/exclude-slaves</value>
        </property>
    
    </configuration>
    

    2.3 mapred-site.xml

    
    
    
    <configuration>
        
        <property>
            <!-- 指定map reduce运行在YARN上 -->
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <!-- mapreduce共享目录,MapReduce的控制文件 -->
            <name>mapred.system.dir</name>
            <value>/home/hadoop-2.7.3/mapred_system</value>
        </property>
        <property>
            <!-- MapReduce产生的中间数据存放目录,以,号隔开,hdfs会把数据存在这些目录下,一般这些目录是不同的块设备,不存在的目录会被忽略掉 -->
            <name>mapred.local.dir</name>
            <value>/home/hadoop-2.7.3/mapred_local</value>
        </property>
        <property>
            <!-- mapreduce历史作业服务:端口 -->
            <name>mapreduce.jobhistory.address</name>
            <value>hdp21:10020</value>
        </property>
        <property>
            <!-- mapreduce历史作业  web ui 服务:端口 -->
            <name>mapreduce.jobhistory.webapp.address</name>
            <value>hdp21:19888</value>
        </property>
        <property>
            <!-- mapreduce正在运行作业信息目录 -->
            <name>mapreduce.jobhistory.intermediate-done-dir</name>
            <value>/home/hadoop-2.7.3/mr-history/tmp</value>
        </property>
        <property>
            <!-- mapreduce已完成作业信息目录 -->
            <name>mapreduce.jobhistory.done-dir</name>
            <value>/home/hadoop-2.7.3/mr-history/done</value>
        </property>
        <!-- JVM参数 -->
        <property>
            <!-- 每个map或reduce使用的内存数量,线上512m -->
            <name>mapred.child.java.opts</name>
            <value>-Xmx200M</value>
        </property>
        <property>
            <!-- reduce使用的内存数量,线上512m -->
            <name>mapred.reduce.child.java.opts</name>
            <value>-Xmx200M</value>
        </property>
        <property>
            <!-- map使用的内存数量,线上512m -->
            <name>mapred.map.child.java.opts</name>
            <value>-Xmx200M</value>
        </property>
    
    </configuration>
    

    2.4 yarn-site.xml

    
    
    <configuration>
    
    <!-- Site specific YARN configuration properties -->
        <property>
            <!-- 辅助服务,扩展自己的功能 -->
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
            <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
            <!-- 开启RM高可用,ha高可用集群,这里是双机 -->
            <name>yarn.resourcemanager.ha.enabled</name>
            <value>true</value>
        </property>
        <property>
            <!-- 自动故障切换 -->
            <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
            <value>true</value>
        </property>
        <property>
            <!-- 指定RM的名字 -->
            <name>yarn.resourcemanager.ha.rm-ids</name>
            <value>rm1,rm2</value>
        </property>
        <property>
            <!--  -->
            <name>yarn.resourcemanager.zk-address</name>
            <value>hdp23:2181,hdp24:2181,hdp25:2181</value>
        </property>
        <property>
            <!-- 指定rm1的地址 -->
            <name>yarn.resourcemanager.hostname.rm1</name>
            <value>hdp21</value>
        </property>
        <property>
            <!-- 指定rm2的地址 -->
            <name>yarn.resourcemanager.hostname.rm2</name>
            <value>hdp22</value>
        </property>
        <property>
            <!-- 指定RM的cluster集群 id -->
            <name>yarn.resourcemanager.cluster-id</name>
            <value>yrc</value>
        </property>
        <property>
            <!-- 该节点上YARN可使用的物理内存总量,默认是8192(MB),YARN不会智能的探测节点的物理内存总量,线上是16372 -->
            <name>yarn.nodemanager.resource.memory-mb</name>
            <value>512</value>
        </property>
    
    </configuration>
    
    

    2.5 slaves

    hdp23
    hdp24
    hdp25
    

    2.6 修改hadoop-env.sh

    vim /home/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
    把原来的export JAVA_HOME=${JAVA_HOME}
    修改为export JAVA_HOME= /usr/local/jdk1.7.0_71
    即真实的jdk安装路径
    

    2.7 复制配置到其他节点

    cd /home/
    scp -r hadoop-2.7.3/ hdp22:/home/
    scp -r hadoop-2.7.3/ hdp23:/home/
    scp -r hadoop-2.7.3/ hdp24:/home/
    scp -r hadoop-2.7.3/ hdp25:/home/
    

    3 环境变量

    su root
    vim /etc/profile.d/hadoop.sh
    export HADOOP_HOME=/home/hadoop-2.7.3
    export PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
    复制到其他节点:scp /etc/profile.d/hadoop.sh hdp22: /etc/profile.d/
    执行使配置立即生效 . /etc/profile.d/hadoop.sh
    

    4 为启动准备
    4.1 zookeeper

    启动zookeeper,zk-bat.sh start
    Zookeeper已经安装完成 zk-bat.sh是我写的启动脚本
    

    4.2 创建zk命名空间

    在主NameNode节点上执行(创建命名空间):
    hdfs zkfc -formatZK
    

    4.3 JournalNode

    在各个DataNode节点上执行(启动journalnode):
    hadoop-daemon.sh start journalnode
    使用jps查看服务是否启动
    

    4.4 格式化hdfs

    格式化namenode和journalnode目录
    hdfs namenode -format ns
    

    4.5 启动namenode

    1,在主namenode节点启动namenode进程(hdp21,只在一个NameNode上执行即可)
    hadoop-daemon.sh start namenode
    2,复制主NameNode(在hdp22上,把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了):
    hdfs namenode –bootstrapStandby
    3,启动备namenode进程(在hdp22上执行)
    hadoop-daemon.sh start namenode
    4,在两个NameNode上都执行:
    hadoop-daemon.sh start zkfc
    

    4.6 启动DataNode

    在所有的DataNode上执行(启动datanode):
    hadoop-daemon.sh start datanode
    

    6 启停

    启动
    start-dfs.sh
    停止
    stop-dfs.sh
    

    7 监控等

    hdp21主NameNode

    Hdfs浏览器访问地址:
    http://hdp21:50070
    

    hdp22备NameNode

    Hdfs浏览器访问地址:
    http://hdp22:50070
    

    测试NameNode双机

    杀掉主NameNode,即hdp21上的NameNode进程,浏览器查看hdp22的状态

    1.在hdp21上jps,找到NameNode进程id并杀掉

    图片 1.png

    2.浏览器查看备NameNode状态

    [图片上传中...(2.png-f1916-1516245036237-0)]

    备用NameNode已经启动了!!!

    相关文章

      网友评论

          本文标题:Hadoop安装部署 双Namenote

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