您的位置:首页 > 运维架构

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

2017-03-20 16:34 316 查看

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
}


未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop 分布式