Hdfs分布式环境搭建与一键安装脚本的编写

Hadoop介绍

  Hadoop 是目前比较流行的大数据分布式处理软件框架。这套框架异常的可靠,在假设数据元素和存储会失效的情况下,维护多个工作数据副本,确保能够针对失败的节点重新分布处理。同时以并行处理提高处理速度,最高能能够处理 PB 级数据。
  Hadoop 主要由三个部分组成:
1、HDFS
2、MapReduce
3、Hbase

  HDFS(Hadoop Distributed File System)为分布式计算存储提供了底层支持。存储在 HDFS 中的文件被分成块(通常为 64MB),然后将这些块复制到多个计算机中(DataNode)。块的大小和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
    MapReduce从名字上看就是map(任务的分解)与reduce(结果的汇总)的结合,提供了一个海量数据处理的编程模型框架。基于该框架能够容易地编写应用程序,这些应用程序能够运行在由上千个商用机器组成的大集群上,并以一种可靠的,具有容错能力的方式并行地处理上TB级别的海量数据集。这个定义里面有着这些关键词,一是软件框架,二是并行处理,三是可靠且容错,四是大规模集群,五是海量数据集。
    HBase是一个开源的、分布式的、多版本的、面向列的存储模型。可以直接使用本地文件系统也可使用Hadoop的HDFS文件存储系统的大型数据库。

分布式环境搭建

1、安装需求
    以搭建一台master,两台slave为例,需要准备的有:
    linux机器三台,实体机与虚拟机皆可,ip最好可以固定。这里以三台centos7 64位的机器为例。
    hadoop安装包,下载地址:hadoop官方下载地址 选择某个版本 binary(已编译好的)tar包下载,这里选择hadoop-2.7.2版本
    JDK安装包JDK官方下载地址 选择linux 64位对应的tar包下载
2、hadoop的安装
    先介绍一下hadoop的安装过程便于理解脚本的编写。

  • 安装JDK
        关于JDK的安装请参照我的另一篇博客centos7上JDK安装与一键安装脚本的编写,同样的是自己编写的一键安装脚本方式安装:centos7上JDK安装与一键安装脚本的编写

  • 关闭防火墙
        使用 “systemctl stop firewalld” 命令关闭防火墙

  • 设置主机名称
        使用 “hostnamectl set-hostname xxxx” 来设置主机名,这里我们吧master机器的主机名设置为master,slave机器主机名命名为slave1、slave2以此类推。

  • 配置hosts文件
        在host文件中添加各个机器ip与的对应,这样各个机器之间就可以用主机名直接通信了。修改”/etc/hosts”文件,在文件末尾添加 “IP地址 主机名”,样式如下:
    192.168.1.1 master
    192.168.1.2 slave1
    192.168.1.3 slave2

  • 设置无密码登陆
        使用命令 “ssh-keygen -t rsa” ,所有的交互都直接回车,生成密钥对。默认存放路径在 “~/.ssh” 目录下,这个目录下会有”id_rsa.pub” 这个文件。如果A机器想要免密码访问B机器,把自己的”id_rsa.pub” 这个文件拷贝到B机器的 “~/.ssh”目录下,就可以免密码访问B了,从B机器上拷贝文件也不会需要密码。

设置完以上配置后,将hadoop的压缩包内容解压到/usr/hadoop目录下

  • 修改hadoop的配置文件
        hadoop的配置文件都是xml格式的,存放在解压后目录的etc/hadoop//目录下。找到每一项的名称,修改对应的value即可。
        
        修改配置文件core-site.xml。配置其中的fs.defaultFS项,这里配置的是HDFS master(即namenode)的地址和端口号(默认9000)。其中的ip地址在修改过host文件后可以换成主机名。
<configuration>  
    <property>  
        <name>fs.defaultFS</name>  
        <value>hdfs://192.168.1.1:9000</value>  
    </property>  
</configuration>  

    修改配置文件hdfs-site.xml。配置其中的dfs.replication项,这里配置的是子节点的总数目。

<configuration>
    <property>
          <name>dfs.replication</name>
          <value>2</value>    
    </property>
</configuration>

    修改配置文件mapred-site.xml。配置其中的mapred.job.tracker项,这里配置的是jobtracker的ip和端口(默认9001)。

configuration>
    <property>
          <name>mapred.job.tracker</name>
          <value>192.168.1.1:9001</value>    
    </property>
</configuration>

    修改配置文件hadoop-env.sh,修改其中JAVA_HOME的设置,如果JAVA_HOME已经设置好了,可以跳过这一步:
把export JAVA_HOME=${JAVA_HOME}改为export JAVA_HOME=实际的JAVA_HONE路径。

    修改slaves文件,slaves即为HDFS的DataNode节点。当使用脚本start-dfs.sh来启动hdfs时,会使用到这个文件,以无密码登录方式到各slaves上启动DataNode。将slaves的节点IP(也可以是相应的主机名)一个个加进去,一行一个IP。在设置过hosts文件后,也可以一行一个主机名。

    设置完毕后格式化hadoop
    $HADOOP_HOME/bin/hadoop namenode -format

在namenode的机器上设置好hdfs后,把整个目录拷贝到各个datanode机器上即可。

一键安装脚本的编写

首先设置master的ip和slave的ip

function syni_input_master_hdfs()
{
    local input_master_fail_num=0
    local input_slave_fail_num=0
    # 设置MASTER_IP
    while [ 1 ]; do
        read -p ">>Please input HDFS-master IP : " MASTER_IP
        if [ ! -z "$MASTER_IP" ]; then
            echo "$MASTER_IP" | grep -q -E "^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"
            if [ $? -eq 0 ]; then
                break
            fi
        fi
        (( input_master_fail_num=input_master_fail_num+1 ))
        echo "Error, MASTER_IP <$MASTER_IP> is not reachable or not valid!!"
        if [ $input_master_fail_num -ge 6 ]; then
            echo "ERROR, fail to input server ip $input_master_fail_num times!!"
            exit 1
        fi
    done

    read -p ">>Please input HDFS-slave total numbers : " SLAVE_NUM
    for (( num=1; num<=SLAVE_NUM; num++ ))
    do
        # 设置SLAVE_IP
        while [ 1 ]; do
            read -p ">>Please input HDFS-slave${num} IP : " SLAVE_IP
            if [ ! -z "$SLAVE_IP" ]; then
                echo "$SLAVE_IP" | grep -q -E "^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"
                if [ $? -eq 0 ]; then
                    break
                fi
            fi
            (( input_slave_fail_num=input_slave_fail_num+1 ))
            echo "Error, SLAVE_IP <$SLAVE_IP> is not reachable or not valid!!"
            if [ $input_slave_fail_num -ge 6 ]; then
                echo "ERROR, fail to input server ip $input_slave_fail_num times!!"
                exit 1
            fi
        done
        #修改Hosts文件,把slaves
        # read
        #in_url = ${HDFS_ROLE}
        #in_ip = ${HDFS_IP}
        local grep_result
        inner_ip_map="${SLAVE_IP} "slave"${num}"
        grep_result=$(cat /etc/hosts |grep "${inner_ip_map}" || echo "") 
        if [ -z "${grep_result}" ];then
            echo ${inner_ip_map} >> /etc/hosts
            if [ $? -eq 0 ]; then
                let host_add_num=SLAVE_NUM+1
                echo "${inner_ip_map} to hosts success host is $(tail -n ${host_add_num} /etc/hosts)"
            fi
        fi
    done
}

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值