大数据笔记(四):Hadoop 2.7.7+Scala+Spark 完全分布式集群搭建

本文记录了使用3台物理机部署Hadoop完全分布式集群的过程,所使用系统为Ubuntu16.04 LTS,Hadoop版本为Hadoop 2.7.7。

搭建前的准备

  • Ubuntu16.04 LTS
  • JDK(Download)
  • Hadoop 2.7.7(Download)
  • Spark(Download)
  • Scala(Download)

注意:
※ 下载密码:kevin
※ 教程中所有shell命令,如果没有特殊说明,全部都需要单步执行,不能批量粘贴。

免密登录

  1. 新装系统分别设置如下参数
No. 姓名 计算机名 用户名
1(主节点) master master hadoop
2(子节点) slave1 slave1 hadoop
3(子节点) slava2 slave2 hadoop

大数据笔记(四):Hadoop 2.7.7+Scala+Spark 完全分布式集群搭建_第1张图片

这里的情况是全新安装的系统,如果有已经安装的系统,可以为3台电脑分别创建hadoop用户并授予su权限加入hadoopGropu即可。

  1. 为3台物理机设置静态IP,方法参考百度。
  2. 检查hostname,以master机器为例,如果hostname不是master,需要修改为master,三台都需要检查。
    $ sudo gedit /etc/hostname
    
  3. 设置Hosts(三台同步操作)
    ifconfig #查看IP
    
    输入以下命令编辑hosts文件
    $ sudo gedit /etc/hosts
    
    在hosts中添加master、slave1、slave2的映射,每条记录一行
    192.168.0.1 master
    192.168.0.2 slave1
    192.168.0.3 slave2
    
    设置完后保存,在三台主机上互相ping,检测是否ping通:
    $ ping slave1 -c 4
    $ ping slave2 -c 4
    $ ping master -c 4
    
  4. 安装SSH并生成密钥对(三台同步)
    $ sudo apt-get install openssh-server #安装SSH
    $ ps -e | grep ssh #查看SSH进程是否启动
    $ ssh localhost #尝试登陆本机
    
    尝试登录本机后,如果出现Welcome to Ubuntu 16.04 LTS ....Last login: xxxxxx即为成功。
    $ ssh-keygen -t rsa #生成密钥对,输入后直接按三次回车,不需要输入密码。
    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #密钥追加到认证公钥
    $ cd ~/.ssh #切换到ssh目录
    $ sudo chmod 600 authorized_keys #更改权限为600
    
  5. 分别在两个子节点上获取主节点master的密钥
    $ cd ~/.ssh
    $ scp hadoop@master:~/.ssh/id_rsa.pub ./master_rsa.pub
    $ cat master_rsa.pub >> authorized_keys #将master的密钥增加到子节点的认证公钥
    
    完成后回到master上,测试登陆是否免密:
    $ ssh slave1 #测试登陆节点1
    $ ssh slave2 #测试登陆节点2
    

安装JDK/Hadoop/Spark/Scala

master上,将博客开头的JDK和Hadoop包下载,并使用终端进入所在目录,逐条执行以下命令:

$ cd Downloads #进入下载目录
$ sudo mkdir /usr/lib/jvm   #创建jvm目录
$ sudo tar -zxvf jdk-8u201-linux-x64.tar.gz  -C /usr/lib/jvm #/ 解压java到/usr/lib/jvm目录下
$ sudo tar -zxvf hadoop-2.7.7.tar.gz -C /usr/local  #解压hadoop到/usr/local目录下
$ sudo tar -zxvf spark-2.3.3-bin-hadoop2.7.tgz -C /usr/local #解压spark到/usr/local目录下
$ sudo tar -zxvf scala-2.12.0.tgz -C /usr/local  #解压scala到/usr/local目录下
$ cd /usr/lib/jvm
$ sudo mv jdk1.8.0_201 java #重命名
$ cd /usr/local
$ sudo mv hadoop-2.7.7 hadoop  #重命名
$ sudo mv spark-2.3.3-bin-hadoop2.7 spark
$ sudo mv scala-2.12.0 scala
$ sudo chown -R hadoop ./hadoop  #修改权限

暂时先不配置环境变量。

修改Spark配置文件

  1. spark-env.sh
    $ cd spark/conf
    $ cp spark-env.sh.template spark-env.sh
    $ sudo gedit spark-env.sh
    

修改内容:

export SCALA_HOME=/usr/local/scala
export JAVA_HOME=/usr/lib/jvm/java
export SPARK_MASTER_IP=master
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
  1. slaves
    $ cp slaves.template slaves
    $ sudo gedit slaves
    

修改内容:

slave1
slave2

修改Hadoop配置文件

$ cd /usr/local/hadoop/etc/hadoop #进入Hadoop配置文件目录

本节涉及slaves hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml 6个文件的修改。

  1. slaves
    $ sudo gedit slaves
    
    删除localhost,增加:
    slave1
    slave2
    
  2. hadoop-env.sh
    $ sudo gedit hadoop-env.sh
    
    修改JAVA_HOME:
    export JAVA_HOME=/usr/lib/jvm/java
    
  3. core-site.xml
    $ sudo gedit core-site.xml
    
    修改configuration节:
    <configuration>
      <property>
        <name>fs.defaultFSname>
        <value>hdfs://master:9000value>
      property>
      <property>
        <name>io.file.buffer.sizename>
        <value>131072value>
      property>
      <property>
        <name>hadoop.tmp.dirname>
        <value>/usr/local/hadoop/tmpvalue>
      property>
    configuration>
    
  4. hdfs-site.xml
    $ sudo gedit hdfs-site.xml
    
    <configuration>
        <property>
          <name>dfs.namenode.secondary.http-addressname>
          <value>master:50090value>
        property>
        <property>
          <name>dfs.replicationname>
          
          <value>2value>
        property>
        <property>
          <name>dfs.namenode.name.dirname>
          <value>/usr/local/hadoop/hdfs/namevalue>
        property>
        <property>
          <name>dfs.datanode.data.dirname>
          <value>/usr/local/hadoop/hdfs/datavalue>
        property>
    configuration>
    
  5. mapred-site.xml
    $ cp mapred-site.xml.template mapred-site.xml #复制模板,生成xml
    $ sudo gedit mapred-site.xml #	打开
    
    修改配置节:
    <configuration>
     <property>
        <name>mapreduce.framework.namename>
        <value>yarnvalue>
      property>
      <property>
        <name>mapreduce.jobhistory.addressname>
        <value>master:10020value>
      property>
      <property>
        <name>mapreduce.jobhistory.addressname>
        <value>master:19888value>
      property>
    configuration>
    
  6. yarn-site.xml
    $ sudo gedit yarn-site.xml
    
    修改配置节:
    <configuration>
         <property>
             <name>yarn.nodemanager.aux-servicesname>
             <value>mapreduce_shufflevalue>
         property>
         <property>
             <name>yarn.resourcemanager.addressname>
             <value>master:8032value>
         property>
         <property>
             <name>yarn.resourcemanager.scheduler.addressname>
             <value>master:8030value>
         property>
         <property>
             <name>yarn.resourcemanager.resource-tracker.addressname>
             <value>master:8031value>
         property>
         <property>
             <name>yarn.resourcemanager.admin.addressname>
             <value>master:8033value>
         property>
         <property>
             <name>yarn.resourcemanager.webapp.addressname>
             <value>master:8088value>
         property>
    configuration>
    
  7. 配置完成后,使用master将整个hadoop、Java、Spark和Scala发送到两个子节点:
    $ scp -r /usr/local/hadoop hadoop@slave1:/usr/local
    $ scp -r /usr/local/hadoop hadoop@slave2:/usr/local
    $ scp -r /usr/local/spark hadoop@slave1:/usr/local
    $ scp -r /usr/local/spark hadoop@slave2:/usr/local
    $ scp -r /usr/local/scala hadoop@slave1:/usr/local
    $ scp -r /usr/local/scala hadoop@slave2:/usr/local
    $ scp -r /usr/lib/jvm hadoop@slave1:/usr/lib
    $ scp -r /usr/lib/jvm hadoop@slave2:/usr/lib
    
  8. 在集群所有机器上分别配置hadoop、Java、Spark和Scala的环境变量,所有机器
    $ cd ~
    $ sudo gedit ~/.bashrc
    

将下列内容追加到文件尾部:

#JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

#HADOOP_HOME
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

#Spark
export SPARK_HOME=/usr/local/spark
export PATH="$SPARK_HOME/bin:$PATH"

#Scala
export SCALA_HOME=/usr/local/scala

刷新环境变量

$ source ~/.bashrc
  1. 在所有机器上检查hadoop、Java、Spark和Scala环境,查看是否安装成功。
    $ java -version    #查看Java版本
    $ hadoop version   #查看hadoop版本
    $ scala            #查看Scala环境
    $ spark-shell      #查看Spark环境
    

启动集群(master上操作)

  1. 在master上格式化NameNode。(只在master上执行,且只执行一次)
    $ hadoop namenode -format
    
  2. 启动:
    $ cd /usr/local/hadoop/sbin #Hadoop的执行目录
    $ start-all.sh #启动
    
    如果启动成功,此时master终端输入jps可以看到NameNode和SecondaryNameNode等进程,slave有DataNode等进程。

你可能感兴趣的:(大数据学习)