血海修罗

导航

 
一、创建集群需要的虚拟机,这里我创建5台,系统版本centos7.x
 
IP地址
主机名
安装软件
进程(部署的服务)
192.168.137.101
hadoop1
jdk1.8,hadoop3.2.0,zookeeper3.4.14
namenode,ZKFC,Resourcemanager
192.168.137.102
Hadoop2
jdk1.8,hadoop3.2.0,zookeeper3.4.14
namenode,ZKFC,Resourcemanager
192.168.137.103
hadoop3
jdk1.8,hadoop3.2.0,zookeeper3.4.14
datanode,zookeeper, nodemanager,journalnode
192.168.137.104
hadoop4
jdk1.8,hadoop3.2.0,zookeeper3.4.14
datanode,zookeeper, nodemanager,journalnode
192.168.137.105
hadoop5
jdk1.8,hadoop3.2.0,zookeeper3.4.14
datanode,zookeeper, nodemanager,journalnode
二、关闭防火墙,systemctl stop firewalld.service
 
 
设置开机不启动:chkconfig firewalld off ,查看是否生效:systemctl list-unit-files|grep firewalld
 
 
三、设置主机名:hostnamectl set-hostname hadoop1(每台设置相应的主机名)
 
四、编辑主机名映射对应
    vim /etc/hosts
    
五、安装centos常用的命令工具包(如果已经安装,无需再次安装)
    1、yum install -y psmisc             安装killall命令
    2、yum install -y lrzsz                 安装sz(下载)和rz(上传)命
    3、yum install -y net-tools         安装 ifconfig 命令
    4、yum install -y vim*                安装vim
    5、yum install -y unzip              安装unzip命令
    6、yum install -y net-tools        安装netstat命令
    7、yum install -y lsof                 安装lsof安装  是一个列出当前系统打开文件的工具
    8、yum install sshd                   安装ssh服务
    9、yum install -y wget              安装wget
 
六、把第四步骤编辑的主机名文件hosts,scp到其余四台主机上(hadoop2,hadoop3,hadoop4,hadoop5)
      scp /etc/hosts 192.168.137.102:/etc/
 
七、设置五台虚拟服务器的时间同步
      1、 安装时间工具包ntp
             yum install ntp
        
    2、设置与指定时间服务器同步
            ntpdate cn.pool.ntp.org
             
 
    3、、修改配置文件,使该NTP服务器在不联网的情况下,使用本服务器的时间作为同步时间
                vim /etc/ntp.conf
                把如下四行代码注释掉
                server 0.centos.pool.ntp.org iburst
                server 1.centos.pool.ntp.org iburst
                server 2.centos.pool.ntp.org iburst
                server 3.centos.pool.ntp.org iburst
                 在下面再添加两行
                        server 127.127.0.1
                        fudge  127.127.0.1  stratum 10
六、创建hadoop用户hadoop(我这里直接使用root用户)
       useradd  hadoop 并设置密码 password hadoop
 
七、设置免密码登录
     1、在五台机器上都输入ssh-keygen –t rsa,然后一直按回车
    
   2、将每台的秘钥分别拷贝到其余四台上
         ssh-copy-id  hadoop2  
  3、把自己本机的秘钥写入自己的authorized_keys文件中,实现本机免秘钥登录本机
       cat .ssh/id_rsa.pub >> .ssh/authorized_keys(启动hadoop,需要对本机进行免密登录)
 
八、安装jdk
     1、解压jdk文件
        tar xvf jdk-8u91-linux-x64.gz
     2、设置环境变量
         vim /etc/profile
        最后添加下面几行:
        export JAVA_HOME=/root/jdk8
        export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
        export PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
    3、加载测试jdk环境
    source /etc/profile
    java -version
    
 4、把jdk 和 /etc/profile 文件拷贝到其余四台上面
        scp /etc/profile hadoop2:/etc/        
        scp jdk8  hadoop2:/root/
       
 
九、进入hadoop5,安装配置zookeeper
    1、解压zookeeper
            tar xf zookeeper-3.4.14.tar.gz
    2、配置zookeeper
         cd /root/zookeeper/conf
         cp zoo_sample.cfg zoo.cfg
         vim zoo.cfg
        添加下面几项
      server.1=hadoop3:2888:3888
      server.2=hadoop4:2888:3888
      server.3=hadoop5:2888:3888
      修改数据目录
     dataDir=/root/zookeeper/zkdata
  3、拷贝zookeeper到其余两台(hadoop3 ,hadoop4)
      scp -r zookeeper hadoop3:/root/
  4、启动zookeeper
        bin/zkServer.sh    start
        
 
 
十、安装配置HADOOP
        1、解压hadoop
             [root@hadoop1 ~]# tar xf hadoop-3.2.0.tar.gz
        2、把解压的hadoop移动到安装目录/usr/local下面
             [root@hadoop1 ~]# tar hadoop-3.2.0 /usr/local/
        3、配置环境变量
            vim /etc/profile
            添加以下几行
            export HADOOP_HOME=/usr/local/hadoop-3.2.0
            export PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
            
        4、修改配置文件
             进入到配置文件目录
             cd /usr/local/hadoop-3.2.0/etc/hadoop/
             
             hadoop-env.sh mapred-env.sh yarn-env.sh 这三个文件添加JAVA环境变量
             export JAVA_HOME=/root/jdk8
        5、修改core-site.xml

             <configuration>
                    <property>  
                        <name>fs.defaultFS</name>  
                        <value>hdfs://nd</value>  
                    </property>  
                    <property>  
                        <name>hadoop.tmp.dir</name>  
                        <value>/usr/local/hadoop-3.2.0/data/tmp</value>  
                    </property>  
                    <property>  
                        <name>hadoop.http.staticuser.user</name>  
                        <value>hadoop</value>  
                        </property>  
                    <property>  
                        <name>ha.zookeeper.quorum</name>  
                        <value>hadoop3:2181,hadoop4:2181,hadoop5:2181</value>  
                    </property>
               </configuration>

        6、修改 hdfs-site.xml文件

<configuration>
    <property>  
        <name>dfs.replication</name>  
        <value>3</value>  
    </property>  
    <property>  
        <name>dfs.permissions.enabled</name>  
        <value>false</value>  
    </property>  
    <property>  
        <name>dfs.nameservices</name>  ----》NameNode集群组
        <value>nd</value>  
    </property>  
    <property>  
        <name>dfs.blocksize</name>  
        <value>134217728</value>  -----》128M
    </property>  
    <property>  
        <name>dfs.ha.namenodes.nd</name>  ------》NameNode集群的服务器定义
        <value>hadoop1,hadoop2</value>  
    </property>  
    <!-- hadoop1的RPC通信地址,hadoop1所在地址  -->  
    <property>  
        <name>dfs.namenode.rpc-address.nd.hadoop1</name>  
        <value>hadoop1:8020</value>  
    </property>  
    <!-- hadoop1的http通信地址,外部访问地址 -->  
    <property>  
        <name>dfs.namenode.http-address.nd.hadoop1</name>  
        <value>hadoop1:50070</value>  
    </property>  
    <!-- hadoop2的RPC通信地址,hadoop2所在地址 -->  
    <property>  
        <name>dfs.namenode.rpc-address.nd.hadoop2</name>  
        <value>hadoop2:8020</value>  
    </property>  
    <!-- nn2的http通信地址,外部访问地址 -->  
    <property>  
        <name>dfs.namenode.http-address.nd.hadoop2</name>  
        <value>hadoop2:50070</value>  
    </property>  
    <!-- 指定NameNode的元数据在JournalNode日志上的存放位置(一般和zookeeper部署在一起) -->  
    <property>  
        <name>dfs.namenode.shared.edits.dir</name>  
        <value>qjournal://hadoop3:8485;hadoop4:8485;hadoop5:8485/nd</value>  
    </property>  
    <!--指定datanode目录存放位置-->
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/usr/local/hadoop-3.2.0/hdata</value>
    </property>
   <!-- 指定JournalNode在本地磁盘存放数据的位置 -->  
    <property>  
        <name>dfs.journalnode.edits.dir</name>  
        <value>/usr/local/hadoop-3.2.0/data/journal</value>  
    </property>  
    <!--客户端通过代理访问namenode,访问文件系统,HDFS 客户端与Active 节点通信的Java 类,使用其确定Active 节点是否活跃  -->  
    <property>  
        <name>dfs.client.failover.proxy.provider.nd</name>  
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>  
    </property>  
    <!--这是配置自动切换的方法,有多种使用方法,具体可以看官网,在文末会给地址,这里是远程登录杀死的方法  -->  
    <property>  
        <name>dfs.ha.fencing.methods</name>  
        <value>sshfence</value>     
    </property>  
    <!-- 这个是使用sshfence隔离机制时才需要配置ssh免登陆 -->  
    <property>  
        <name>dfs.ha.fencing.ssh.private-key-files</name>  
        <value>/root/.ssh/id_rsa</value>  
    </property>  
    <!-- 配置sshfence隔离机制超时时间,这个属性同上,如果你是用脚本的方法切换,这个应该是可以不配置的 -->  
    <property>  
        <name>dfs.ha.fencing.ssh.connect-timeout</name>  
        <value>30000</value>  
    </property>  
    <!-- 这个是开启自动故障转移,如果你没有自动故障转移,这个可以先不配 -->  
    <property>  
        <name>dfs.ha.automatic-failover.enabled</name>  
        <value>true</value>  
    </property>  
</configuration>
 

        7、修改 mapred-site.xml(hadoop2 修改mapred-site.xml.template名称为mapred-site.xml并修改,hadoop3直接修改)    

<configuration>
    <property>  
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
    </property>  
    <property>  
        <name>mapreduce.jobhistory.address</name>  
        <value>hadoop1:10020</value>  
    </property>  
    <property>  
        <name>mapreduce.jobhistory.webapp.address</name>  
        <value>hadoop1:19888</value>  
    </property>  
</configuration>

        8、修改yarn-site.xml文件

<configuration>
    <property>  
        <name>yarn.nodemanager.aux-services</name>  
        <value>mapreduce_shuffle</value>  
    </property>
    <!-- Site specific YARN configuration properties -->
    <!--启用resourcemanager ha-->  
    <!--是否开启RM ha,默认是开启的-->  
    <property>  
       <name>yarn.resourcemanager.ha.enabled</name>  
      <value>true</value>  
    </property>  
    <!--声明两台resourcemanager的地址-->  
    <property>  
      <name>yarn.resourcemanager.cluster-id</name>  
       <value>rmcluster</value>  
    </property>  
    <property>  
      <name>yarn.resourcemanager.ha.rm-ids</name>  
      <value>hadoop1,hadoop2</value>  
    </property>  
    <property>  
       <name>yarn.resourcemanager.hostname.hadoop1</name>  
       <value>hadoop1</value>  
    </property>  
    <property>  
       <name>yarn.resourcemanager.hostname.hadoop2</name>  
       <value>hadoop2</value>  
    </property>  
    <property>
        <name>yarn.resourcemanager.webapp.address.hadoop1</name>
        <value>hadoop1:8088</value>
    </property>    
    <property>
        <name>yarn.resourcemanager.webapp.address.hadoop2</name>
        <value>hadoop2:8088</value>
    </property>   
 
    <!--指定zookeeper集群的地址-->   
    <property>  
       <name>yarn.resourcemanager.zk-address</name>  
        <value>hadoop3:2181,hadoop4:2181,hadoop5:2181</value>  
    </property>  
    <!--启用自动恢复,当任务进行一半,rm坏掉,就要启动自动恢复,默认是false-->   
    <property>  
       <name>yarn.resourcemanager.recovery.enabled</name>  
       <value>true</value>  
    </property>  
   
    <!--指定resourcemanager的状态信息存储在zookeeper集群,默认是存放在FileSystem里面。-->   
    <property>  
      <name>yarn.resourcemanager.store.class</name>  
       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>  
    </property>
 
    <property>  
       <name>yarn.resourcemanager.ha.id</name>  -----》定义HA集群服务器ID ,定义本机,另外一台定义修改成本机的ip或者主机名
       <value>hadoop1</value>  
    </property>
<!--解决MapReduce运行遇到的 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster错误-->
    <property>
       <name>yarn.application.classpath</name>
       <value>/usr/local/hadoop-3.2.0/etc/hadoop:/usr/local/hadoop-3.2.0/share/hadoop/common/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/common/*:/usr/local/hadoop-3.2.0/share/hadoop/hdfs:/usr/local/hadoop-3.2.0/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/hdfs/*:/usr/local/hadoop-3.2.0/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/mapreduce/*:/usr/local/hadoop-3.2.0/share/hadoop/yarn:/usr/local/hadoop-3.2.0/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/yarn/*</value>
    </property>
</configuration>

       9、配置workers(hadoop3之前是slaves)
            把datanode和nodemanager的节点主机名添加到workers文件中
            
      10、把hadoop文件夹拷贝到其余四台虚拟机服务器上
              scp  -r /usr/local/hadoop-3.2.0/ hadoop2:/usr/local/
              scp  -r /usr/local/hadoop-3.2.0/ hadoop3:/usr/local/
              scp  -r /usr/local/hadoop-3.2.0/ hadoop4:/usr/local/
              scp  -r /usr/local/hadoop-3.2.0/ hadoop5:/usr/local/
      11、在hadoop2上面,yarn-site.xml文件中,添加以下内容
    <property>  
       <name>yarn.resourcemanager.ha.id</name>  -----》定义HA集群服务器ID ,定义本机,另外一台定义修改成本机的ip或者主机名
       <value>hadoop2</value>  
    </property>
     12、在hadoop1,Hadoop2,hadoop3上启动zookeeper
            /root/zookeeper/bin/zkServer.sh start,看到以下信息,表示启动成功
            
            
     13、在hadoop1,hadoop2,hadoop3上启动journalnode
            [root@hadoop5 bin]# /usr/local/hadoop-3.2.0/sbin/hadoop-daemon.sh start journalnode
            
     14、在hadoop1 上格式化namenode
            [root@hadoop1 hadoop]# /usr/local/hadoop-3.2.0/bin/hdfs namenode -format
     15、启动namenode
            [root@hadoop1 hadoop]# /usr/local/hadoop-3.2.0/sbin/hadoop-daemon.sh start namenode
     16、在hadoop2上面同步hadoop1的元数据
            [root@hadoop2 ~]# /usr/local/hadoop-3.2.0/bin/hdfs namenode -bootstrapStandby
     17、在hadoop2上面启动namenode
            [root@hadoop2 ~]#/usr/local/hadoop-3.2.0/sbin/hadoop-daemon.sh start namenode
            此时通过50070端口进入web浏览器页面,两个namenode都standby状态  
            
                    这里可以先强制手动是其中一个节点变为active
                    [root@hadoop1 hadoop]# /usr/local/hadoop-3.2.0/bin/hdfs haadmin -transitionToActive -forcemanual hadoop2
                    可以看到下面的两个状态为hadoop1 为standby,hadoop2为active
                    
                        
                                    手动故障转移已经完成,接下来配置自动故障转移
             
          18、 先把整个集群关闭,zookeeper不关,包括hadoop1,hadoop2的namenode和hadoop3,hadoop4,hadoop5的journalnode
                  在hadoop1 上面执行以下命令,格式化ZKFC
                  [root@hadoop1 hadoop]# /usr/local/hadoop-3.2.0/bin/hdfs zkfc -formatZK
                  在hadoop3 上登录zookeeper
                  [root@hadoop3 ~]# /root/zookeeper/bin/zkCli.sh
                  
                  输入ls / ,发现多了一个hadoop-ha节点,这是配置应该没有问题
                 
         19、启动集群
                 /usr/local/hadoop-3.2.0/sbin/start-dfs.sh
                
                这个时候,hadoop1,hadoop2上面有两个服务进程,namenode以及zkfc
                
                hadoop3,hadoop4,hadoop5上面有datanode,journalnode,zookeeper三个服务进程
                
               这个时候通过50070 访问web页面,一个是standby状态,一个是active状态,测试kill掉那个active状态的namenode进程,
               查看另外一个standby的状态是否变为active, 变为active说明namenode自动切换成功。
    20、 启动yarn,测试resourcemanager ha ,hadoop1输入 /usr/local/hadoop-3.2.0/sbin/start-yarn.sh
            
            
            hadoop2上面执行
            [root@hadoop2 ~]# /usr/local/hadoop-3.2.0/sbin/yarn-daemon.sh start resourcemanager
 
             在web 端输入hadoop2:8088自动跳转hadoop1:8088
            
 
            Kill hadoop1 resourcemanager进程 hadoop2自动变为active
            
 
        21、在hadoop1启动historyserver
                /usr/local/hadoop-3.2.0/sbin/mr-jobhistory-daemon.sh start historyserver
                
            通过Hadoop1:19888访问
            
 
 
 
        22、功能测试
                 查看hadoop文件
                 [root@hadoop1 ~]# hadoop fs -ls /
                 
                新建目录文件夹
                [root@hadoop1 ~]# hadoop dfs -mkdir /input
                
                删除文件夹
                
                上传文件
                [root@hadoop1 ~]# hadoop fs -put worldcount.txt /input
                
                测试MapReduce
                [root@hadoop1 hadoop]#hadoop jar /usr/local/hadoop-3.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-                                        3.2.0.jar  wordcount  /input/worldcount.txt  /root/output
                
                查看输出文件
                
 
 
运行MapReduce遇到的问题:
                    
解决方案:输入hadoop classpath
                 
                 然后 这些输出 直接 粘贴到 yarn 的配置文件里 yarn-site.xml的属性 <name>yarn.application.classpath</name>
                 

<property>
       <name>yarn.application.classpath</name>
       <value>/usr/local/hadoop-3.2.0/etc/hadoop:/usr/local/hadoop-3.2.0/share/hadoop/common/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/common/*:/usr/local/hadoop-3.2.0/share/hadoop/hdfs:/usr/local/hadoop-3.2.0/share/hadoop/hdfs/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/hdfs/*:/usr/local/hadoop-3.2.0/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/mapreduce/*:/usr/local/hadoop-3.2.0/share/hadoop/yarn:/usr/local/hadoop-3.2.0/share/hadoop/yarn/lib/*:/usr/local/hadoop-3.2.0/share/hadoop/yarn/*</value>
    </property>

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted on 2020-01-03 11:28  血海修罗  阅读(208)  评论(0)    收藏  举报