Spark学习之(一) HDFS 集群环境搭建

HDFS 集群环境搭建

2017114,星期六

23:21

  

背景:项目中使用spark进行数据分析,数据保存在HDFS中,因此搭建了HDFSSpark环境,现在记录环境搭建过程。

  

环境:公司环境中是使用的真实的机器,我在家里面也搭建了一套相似的环境,不过这套环境是用VMWare虚拟机(VMware-workstation-full-12.5.7.20721)搭建的。

  

HDFS集群信息

系统

Host Name

IP

ubuntu-16.04

master.hadoop

192.168.187.129

ubuntu-16.04

slave1.hadoop

192.168.187.130

ubuntu-16.04

slave2.hadoop

192.168.187.131

ubuntu-16.04

slave3.hadoop

192.168.187.132

  

jdk-8u144-linux-x64

hadoop-2.7.4

  

安装步骤

  

一 下载VMWare和Ubuntu镜像 并且安装

参考如下链接下载

https://my.vmware.com/cn/web/vmware/downloads https://www.ubuntu.com/download

安装成功后能进入到Ubuntu系统,如下

  

Spark学习之(一) HDFS 集群环境搭建

  

 

二 安装JDK

  1. Oracle官网上下载JDK(jdk-8u144-linux-x64.tar.gz)
  2. 解压缩到目录:/usr/java/jdk1.8.0_144
  3. 配置环境变量

    添加如下环境变量到 /etc/profile文件

    export JAVA_HOME=/usr/java/jdk1.8.0_144

    export JRE_HOME=/usr/java/jdk1.8.0_144/jre

    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bi

      

    Spark学习之(一) HDFS 集群环境搭建

  4. 使环境变量生效

    source /etc/profile

  5. 验证安装成功

    Spark学习之(一) HDFS 集群环境搭建

  

三 修改机器名称以及域名解析文件

  1. 修改文件 /etc/hostname

    分别修改4个node的机器名称为master.hadoop slave1.hadoop slave2.hadoop slave3.hadoop

  2. 修改域名解析hosts文件

    分别添加如下配置到4个node

    Spark学习之(一) HDFS 集群环境搭建

  3. 测试配置是否生效

    确保任何一台机器都可以ping通其他机器

    Spark学习之(一) HDFS 集群环境搭建

  

四 创建hadoop用户

分别在四个node上创建Hadoop用户

-m自动生成Hadoop目录

Spark学习之(一) HDFS 集群环境搭建

  

  

五 配置无密码登录

启动一个Hadoop集群,需要在master Node执行启动命令,master Node需要无密码登录到salve Node并且启动各个slave Node,这个无密码是通过SSH(Secure Shell)实现的。

无密码登录原理:

Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个**对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。

  

  1. 如果Ubuntu上没有安装SSH,需要安装
  2. 配置master.hadoop无密码登录到其他所有slave节点

    使用hadoop用户执行如下命令会在默认/home/hadoop/.ssh文件夹下生成秘钥对。

    ssh-****** –t rsa –P ''

    之后执行如下命令使rsa添加到授权key文件里面,用于授权登录

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

      

    Spark学习之(一) HDFS 集群环境搭建

    授权文件需要是600权限

    chmod 600 authorized_key

      

    在然后修改/etc/ssh/sshd_config文件确保如下配置正确

    Spark学习之(一) HDFS 集群环境搭建

  3. 在其他几个slave节点分别执行步骤1 2,然后将master.hadoop的公钥copy到所有的slave节点。其实就是讲id_rsa.pub文件的中内容追加到到slavenode上该文件里面

    Spark学习之(一) HDFS 集群环境搭建

  4. 测试无密码登录设置成功

    Spark学习之(一) HDFS 集群环境搭建

  

六 安装Hadoop

先在master.hadoop上执行安装操作,之后再在slave机器上安装

  1. 下载Hadoop安装包 hadoop-2.7.4.tar.gz 并且解压到/usr文件夹下面

    tar -zxvf hadoop-2.7.4.tar.gz

    重命名为hadoop , chown hadoop 文件夹给Hadoop用户

    chown –R hadoop:hadoop hadoop

  2. 添加环境变量到/etc/profile

    # set hadoop env

    export HADOOP_HOME=/usr/hadoop

    export PATH=$PATH:$HADOOP_HOME/bin

    export PATH=$PATH:$HADOOP_HOME/sbin

      

    Spark学习之(一) HDFS 集群环境搭建

    执行source /etc/profile 使配置生效

  3. 配置hadoop配置文件

    hadoop-env.sh 添加Java环境变量

    Spark学习之(一) HDFS 集群环境搭建

      

      

    core-site.xml

    修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS master(即namenode)的地址和端口号。

    <configuration>

        <property>

            <name>hadoop.tmp.dir</name>

            <value>/usr/hadoop/tmp</value>

            需要先在 /usr/hadoop 目录下建立 tmp 文件夹

            <description>A base for other temporary directories.</description>

        </property>

    <!-- file system properties -->

        <property>

            <name>fs.default.name</name>

            <value>hdfs://master.hadoop:9000</value>

        </property>

    </configuration>

    如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoop-hadoop。而这个目录在每次重启后都会被删掉,必须重新执行format才行,否则会出错。

    Spark学习之(一) HDFS 集群环境搭建

  

  

hdfs-site.xml

<configuration>

  

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/usr/hadoop/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/usr/hadoop/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

  

  

</configuration>

Spark学习之(一) HDFS 集群环境搭建

  

  

mapred-site.xml

  

<configuration>

  

<property>

        <name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>master.hadoop:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master.hadoop:19888</value>

</property>

  

</configuration>

Spark学习之(一) HDFS 集群环境搭建

  

  

slaves

192.168.187.130

192.168.187.131

192.168.187.132

Spark学习之(一) HDFS 集群环境搭建

  

  

到此为止:hadoop已经在master机器上安装完毕,然后分别在每个slave机器上执行上述安装步骤来安装hadoop。

简单方法:其实可以scp master机器上已经安装好的hadoop文件夹到slave机器,这样也可以实现在slave机器上hadoop的安装 。注意这种方法scp文件之后要修改文件的group。

scp -r /usr/hadoop root@服务器IP:/usr/

chown -R hadoop:hadoop /usr/hadoop

  

七 使用Hadoop

  1. 到此为止 hadoop集群已经安装完毕,现在要初始化以及使用hadoop集群

使用hadoop账户登录master.hadoop节点,到/usr/hadoop/bin目录下执行命令来格式化集群。

./hadoop namenode -format

  

  1. 启动集群

    执行start-all.sh命令 启动集群

    可以通过命令和网页查看集群状态

    Spark学习之(一) HDFS 集群环境搭建

      

    Spark学习之(一) HDFS 集群环境搭建

      

    Spark学习之(一) HDFS 集群环境搭建

      

    Spark学习之(一) HDFS 集群环境搭建

      

      

至此hadoop集群安装结束。




遇到的问题:

DataNode 启动失败:

原因1   namenode format 之后 clusterId 发生变化 ,而datanode 可能clusterID还没有更新,此时会导致datanode启动失败

原因2 datanode的存放数据的data目录里面数据有冲突,需要删掉,之后数据会自动sync

           处理方法将namenode 的中的VERSION文件的id copy 到slave机器上