大数据~Hadoop3.3.1+CentOs7 分布式原创


简介

最近在接触大数据相关的项目,项目需求:Hadoop3.3.1 数据库 + CentOs7 环境部署,本着自以为很简单的心态开始部署,结果由于网上教程过于老旧,导致部署过程中查找资料较多,踩过的坑不计其数,本着技术共享的心态特将此次实际部署过程完整的发布出来,以便大家少走弯路,保证如果细心看完之后能够通过本篇文章一站式部署成功,不用在东奔西走去搜集各种资料和踩坑。 想要完全掌握一个新架构,就需要知其然再知其所以然,这样以便日后进行修改和维护,所以本文将从零开始直至完全部署完毕,细节和重点将给各位画出来。

一、Hadoop数据库是什么

Hadoop数据库是一个分布式框架数据库,属于非关系型数据库(更详细的请自行科普)

二、Hadoop分布式数据库和关系型数据库区别

1、关系型数据库特点:结构化存储,一对多的层次型特性,数据类型基于字符串。表现形式类似于Execel表,数据以每个Excel表的样式存储在数据库中。

2、非关系型数据库特点: 非关系型数据库通常以字典数据类型存储,没有对应关系表。Hadoop数据库利用name node字段记录文件被分散存储的属性值,利用date node字段存储文件分散路径,表现形式类似于Windows系统注册表和系统文件的对应关系。

三、Hadoop特性

Hadoop就是为了解决海量数据的存储与运算问题,它所存储的数据类型是 消息和文件,消息用来记录文件的存放属性,文件会被分布存储到各个Hadoop文件系统中,并且在整个群集中形成多个副本。

Hadoop数据库分为多个功能,这些功能在一个安装包中,每台服务器安装其中一个功能,进行多台安装。

通常用一台name node,用来存放文件属性,多台data node 用来存放文件块。 Hadoop分布式数据库读写原理。

四、Hadoop运行环境

Linux系统,Java JDK8以上开发环境组件

五、Hadoop分布式数据库读写原理

  1. 由接口收发数据
  2. 由分布式调度平台将任务分为存储分布式和运算分布式进行任务下发。
  3. 存储任务:目标数据会分分割成若干个小份,以文件的形式散落在各个Hadoop分布式文件系统中,并且每个小块会在整个群集中存储多个副本,当需要取出时进行文件聚合。
  4. 运算任务: 一个任务会被分发到多台服务器中并行计算,快速计算出结果。

六、Hadoop基本架构

name node字段: 用来记录消息,也就是 分布式文件块大小,分割成几个块等。 data node: 用来存储文件路径和文件

七、Hadoop交互方式介绍

Hadoop交互分为命令行模式和交七、互式界面: 1. 命令行模式: Hadoop通过Linux终端方式连接,操作命令和Linux系统命令相差 不多。 2. 界面交互: 可以通过web浏览器方式访问Hadoop节点服务器。

八、Hadoop最小化部署配置要求

最小化部署: 需要2台服务器,双核CPU、2G内存。

九、环境部署前的准备工作

准备工作: 1. 准备Linux服务器:虚拟机或物理机都行,用来搭建Hadoop分布式数据库。 2. 下载JDK 8 。 3. 下载 Hadoop3.3.1 for Linux 安装包。 4. 推荐到官网下载,或自行搜索下载,这里不方便分享链接。

十、开始部署Hadoop分布式数据库

1、修改MAC地址(非虚拟机无需)

克隆的虚拟机,为避免Mac地址冲突,需要关闭虚拟机,重新生成MAC地址。 客户端连接

2、修改主机名:

例如:hdp01 、hdp02、hdp0... 1. 修改显示主机名:hostnamectl set-hostname hdp01 2. 修改网络主机名: vi /etc/sysconfig/network ~ 编辑配置文件 HOSTNAME=hdp01 ~ 将网络主机名改为hdp01

3、修改静态IP(仅本地物理或虚拟机需要改):

将服务器修改成静态IP:如果是云服务器不需要改ip地址,否则会断网。 1. 编辑配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33 添加下面的 代码。(vi编辑器 i 进入编辑模式、ESC退出编辑模式、:wq 保存退出) IPADDR="192.168.137.133" NETMASK="255.255.255.0" GATEWAY="192.168.137.2" DNS1="192.168.137.2" 2. 重启网络:service network restart

4、增加域名映射:

在没有域的情况下,主机之间能通过主机名来互相访问,这就是修改hosts文件的作用,编辑hosts文件: vi /etc/hosts 输入要映射的主机名和IP地址(IP地址改成你当前主机的IP)。 127.0.0.1 master 192.168.137.133 master master.centos.com 192.168.137.134 slave1 slave1.centos.com 192.168.137.135 slave2 slave2.centos.com

5、安装scp和 yum(所有主机)

  1. 先安装scp:如果能正常装上,yum update 就不用做。 scp工具:Linux下文件拷贝的基本工具,建议安装,可以使用命令安装。 yum install openssh-clients -y
  2. 安装yum工具:后面用来安装系统组件、其他软件的必备工具,可以使用命令 安装或本地安装两种方式, yum update 。

6、重点!卸载系统自带JAVA(每台主机)

因系统自带JAVA版本可能比较老,而此时又新增高版本JAVA,可能在下面的配置过程中产生冲突,需提前检查,如果有则卸载。 1. 查看当前已安装的JAVA:rpm -qa|grep jdk 2. 使用rpm -e --nodeps命令将这些查询出来的全卸载掉: rpm -e --nodeps java-1.8.0-openjdk-1.8.0.242.b08-1.el7.x86_64 3. 查看当前jdk版本:java -version 4. 刷新环境变量:source /etc/profile

7、安装JDK、配置JAVA环境变量(每台主机)

以上都配置好之后,就可以通过远程方式,拿终端连接Linux主机,一切都在终端上完成,推荐使用 SecureCRT 工具。 1. 上传JDK包到Linux:先在根路径下创建一个Hadoop的目录,用来存放java包和Hadoop包。 mkdir /hadoop3 2. 上传JDK包:将JDK压缩包上传到/Hadoop目录下备用)。 cd /hadoop3 put D:\jdk-14.0.8_linux-x64_bin.tar.gz 3. 配置JAVA环境变量 解压JDK包到当前目录:tar -zxvf D:\jdk-14.0.2_linux-x64_bin.tar.gz 编辑环境变量配置文件:vi /etc/profile export JAVA_HOME=/hadoop/jdk-14.0.2 (你的解压完jdk后的那个主目录) 拼接环境变量:export PATH=$PATH:$JAVA_HOME/bin 截图仅供参考实际目录以你当前jdk为准 测试JAVA环境变量:配置完环境变量后测试,保证配置是正确的,再向下进行:直接输入 JAVA。

8、配置免密登陆 !

配置从A主机到其他所有主机的免密登陆: 1. 在A主机生成密钥: - 使用root用户登陆系统 - 生成密钥:ssh-keygen (生成的密钥文件在/root/.ssh下 id_rsa 、id_rsa.pub) 2. 配置自己对自己的免密登陆:ssh-copy-id hdp01 (hdp01就是你当前第一台的主机名) 3. 将密钥文件拷贝到其他所有主机上:ssh-copy-id hdp02 回车 - 根据提示输入 yes ,根据提示输入对方主机的 root 密码,敲回车。 成功的提示:Now try logging into the machine, with "ssh 'hdp02' ", and check in: .ssh/authorized_keys 4. 如果还需要配置其他免密登陆的主机继续:ssh-copy-id hdp03 .... 5. 配置完免密登陆后执行一次:ssh hdp01 、ssh hdp02

9、关闭防火墙

搭建的过程中先将防火墙关闭,或者放行端口: 关闭防火墙命令:systemctl stop firewalld.service 开启防火墙命令:systemctl start firewalld.service

10、上传Hadoop安装包到第一台Linux主机

  1. 将下载好的Hadoop包直接上传到我们上面创建好的 /hadoop 路径下备用(路径自己创建)。 只需要上传到第一台主机就行,这台主机我们用来做 name node服务器,然后我们将这个配置好之后的Hadoop目录通过SCP直接拷贝到其他主机的相同路径下就可以使用了。
  2. 解压Hadoop包: tar -xzvf xxxx.tar.gz

11、配置name node服务器:

默认使用第一台做为name node服务器,同时,这台服务器需要同时配置 name node和data node,而以下其他服务器只需配置data node 即可。

11.1 配置 hadoop-env.sh 文件

编辑hadoop-env.sh文件:这个文件在你解压后的 hadoop-3.3.0/etc/hadoop 路径下修改hadoop/hadoop-env.sh配置文件,指定JAVA路径。 vi hadoop-env.sh export JAVA_HOME=/hadoop/jdk-14.0.2/

11.2 编辑 core-site.xml 配置文件:

这个是Hadoop核心部分!!! hadoop系统需要手动指定默认文件系统为HDFS,并且在众多服务器中指定其中一台作为name node服务器,通过修改hadoop/core-site.xml配置文件,里的内容来实现。 编辑core-site.xml配置文件:vi core-site.xml ,加入下面黄色部分代码。 (这个文件在解压后的 hadoop-3.3.0/etc/hadoop 路径下) <property> <name>fs.defaultFS</name> <value>hdfs://hdp01:9003</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/hadoop3/hadoop-3.3.0/tmp</value> </property>

11.3 编辑 hdfs-site.xml 配置文件:

这个配置文件是非常关键的一个:其中定义了 name node 配置文件、data node 配置文件的存储路径,文件存储的副本个数、SecondaryNameNode启动所在主机。 默认情况下name node和data node配置文件存储在tem目录下,但这是危险的,必须通过手动修改配置文件的存储路径。第一台name node服务器需要同时配置name node和data node配置文件路径,其他服务器只需要改data node路径即可;通过修改 Hadoop/hdfs-site.xml 配置文件实现。 备注:配置文件中指定的路径如果不存在,程序会自动创建。 SecondaryNameNode作用: 首先说明name node的机制,name node的数据是在内存中的,这样会加快读写速度,但是如果突然断电怎么办?数据就丢失了?但是如果一边在内存中读写,一边保存到磁盘上,那么速度就会降低。SecondaryNameNode就是为了解决这个问题,它会单独的 定期的将内存中的数据同步到磁盘上去,起到一个合并和备份的作用。 SecondaryNameNode默认启动位置: SecondaryNameNode服务默认启动位置是在name node服务器上的,但是不建议这么做, 编辑hdfs-site.xml配置文件:配置文件在解压后的 hadoop-3.3.0/etc/hadoop 路径下 vi hdfs-site.xml  ~ 编辑配置文件,添加下面黄色部分所有代码。 <property> <name>dfs.namenode.name.dir</name> <value>/hadoop3/namenode</value> </property> <name>dfs.datanode.name.dir</name> <value>/hadoop3/datanode</value> <name>dfs.replication</name> <value>3</value> <name>dfs.namenode.secondary.http-address</name> <value>hdp02:50090</value>

11.4 修改 yarn-site.xml 配置文件:

yarn-site.xml 配置文件决定着群集管理web服务,也就是当访问 8088 端口时的那个服务。 <name>yarn.resourcemanager.hostname</name> <value>hdp01</value>

11.5 修改 start-dfs.sh、stop-dfs.sh、hadoop-env.sh 配置文件

hadoop-env.sh 路径:hadoop-3.3.0/etc/hadoop start-dfs.sh、stop-dfs.sh、hadoop-env.sh 路径:/hadoop-3.3.0/sbin 分别编辑 start-dfs.sh、stop-dfs.sh、hadoop-env.sh 配置文件,向每个配置文件的顶行,添加下面代码,否则启动时会因为权限不足而失败,这四个配置文件默认路径: HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=root HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root HADOOP_SHELL_EXECNAME=root ~ 这一行给 hadoop-env.sh 加上,其他不用。

11.6 修改 start-yarn.sh、stop-yarn.sh 文件:

修改 start-yarn.sh、stop-yarn.sh 文件,添加下面的配置: 配置文件路径:hadoop-3.3.0/sbin YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=root YARN_NODEMANAGER_USER=root

11.7 将hadoop3目录添加到环境变量(必须做!):

因为后面经常会用到Hadoop命令,如果不添加环境变量,经常会报错“命令找不到”,所以为了后面的使用便利,必须提前将Hadoop目录添加到环境变量中。可以通过修改系统配置文件来实现: 编辑 /etc/profile文件:vi /etc/profile export HADOOP_HOME=/hadoop3/hadoop-3.3.0 (这个路径就是解压后的Hadoop的路径) export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

。刷新环境变量:source /etc/profile 。测试环境变量:直接输入 hadoop 如果有回显,说明配置正确。

11.8 配置workers批量启动脚本:

群集中如果有一千台服务器,怎么去启动?每台手动去启动是不现实的,所以需要从name node 服务器上配置批量启动脚本,在这一台主机上通过脚本一键启动所有服务器。 而这个脚本在Hadoop目录中已经提供了,3.0以后 slaves 改名为 workers ,在hadoop-3.3.0/etc/hadoop下 , 编辑workers配置文件:vi /workers 编辑name node服务器内的,workers文件,将要启动的主机名添加到这里,以后hadoop-daemon.sh启动服务时会先读取这个配置文件中的主机,并将主机里的服务启动。

11.9 拷贝配置到其他主机:

首先,我们的hadoop3路径是在 / 下,其次 java 也放在了 /hadoop3 根目录下, 那么我们在第一台主机上配置好之后,就可以将整个 /hadoop 目录拷贝到hdp02 主机上这样,改好的配置就一起过去了,不用再重复配置。需要拷贝的有: 1. /hadoop3目录:scp -r /hadoop3/ hdp02:/ 2. 拷贝环境变量配置文件:当完成了第一台主机的环境变量之后,其他的服务器也需要做相同的配置,所以将环境变量的配置文件拷贝过去即可。 scp /etc/profile hdp02:/etc/profile

11.10 刷新环境变量:

配置文件从服务器A分别拷贝到服务B、C 之后,需要在 B、C 服务器上刷新环境变量才能生效。 刷新环境变量命令:source /etc/profile 11.11 初始化name node 服务器(必须做): 在以上的过程中,配置好了文件系统和相关配置文件,但是整个系统还没有初始化,所以是不可用的,这里使用命令进行初始化后就可以使用了。 初始化命令:hdfs namenode -format 验证初始化结果:在最后的二十行之内搜索 has been successfully formatted 字样,如果有,说明初始化成功,否则初始化失败,再往上看看哪些漏了做。

11.12 启动服务器:
  1. 批量启动:start-all.sh
  2. 批量停止:stop-all.sh

十一、访问测试:

默认浏览地址:http://name node服务器地址:9870 ~ data node 页面 http://name node服务器地址:8088 ~ 群集管理页面登陆验证:

参考文章:

https://baijiahao.baidu.com/s?id=1678971710871759628&wfr=spider&for=pc