Hadoop集群搭建安装教程(详细完整)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

1 引入

大数据最早提出“大数据”时代到来的是全球知名咨询公司麦肯锡大数据是当前很热的一个词。这几年来云计算、继而大数据成了整个社会的热点大数据究竟是什么东西?有哪些相关技术?

2 Hadoop介绍

2.1狭义的hadoop

Hadoop是Apache旗下的一个用java语言实现开源软件框架是一个开发和运行处理大规模数据的软件平台。允许使用简单的编程模型在大量计算机集群上对大型数据集进行分布式处理。
狭义上说Hadoop指Apache这款开源框架有四个模块如下
在这里插入图片描述

通过上图可知它的核心组件有
HDFS分布式文件系统解决海量数据存储
YARN作业调度和集群资源管理的框架解决资源任务调度
MAPREDUCE分布式运算编程框架解决海量数据计算

2.2 Hadoop生态圈

广义的Hadoop是指Hadoop生态圈不仅包含上述组件还包含各类大数据存储和分析应用如下图
如有侵权联系作者删除

3 集群环境准备

3.1 虚拟机和操作系统安装

博客技术文章较多不再赘述推荐文章https://blog.csdn.net/q2158798/article/details/80550626

3.2 环境搭建

windows系统确认所有的关于VmWare的服务都已经启动
在这里插入图片描述
确认好VmWare生成的网关地址网关地址不必和我一样可以自己设置网段比如192.168.88.xxx
在这里插入图片描述
在windows系统网络适配器中确认VmNet8网卡已经配置好了IP地址和DNS
注意ip地址如果设置为固定ip地址的网段应与上面所选的网段一致
在这里插入图片描述

3.3 复制虚拟机和设置

3.3.1 复制

利用虚拟机的“克隆功能”进行虚拟机克隆或者直接复制虚拟机文件夹然后打开虚拟机。
复制完成的虚拟机文件夹以及打开后的虚拟机如下图注意复制之后再vmare中将mac地址重新生成
在这里插入图片描述

3.3.2 内存设置

在分配的时候, 需要在总内存大小的基础上, 减去2G-4G作为系统内存, 剩余的内存供虚拟机分配, 作为每
台虚拟机的内存
软件安装规划

IP主机名环境配置安装
192.168.174.100node01关防火墙和selinux, host映射, 时钟同步JDK, NameNode,
192.168.174.110node02关防火墙和selinux, host映射, 时钟同步JDK, DataNode, NodeManager,Zeekeeper
192.168.174.120node03关防火墙和selinux, host映射, 时钟同步JDK, DataNode, NodeManager,Zeekeeper

3.3.2 网络设置

有些教程要求再虚拟机系统中设置mac地址我没有设置
本教程提供设置命令如下修改mac通过命令vim /etc/udev/rules.d/70-persistent-net.rules
修改mac地址mac地址与vmare中的mac地址一致

每台虚拟机更改IP地址:
进入目录

cd /etc/sysconfig/network-scripts/

该目录下有配置ip地址的文件不同系统的文件名可能不同不同之处是文件后的数字我的是ifcfg-ens32 打开文件

vim ifcfg-ens32

修改内容如下其他保持默认配置。
在这里插入图片描述
或按下面进行修改
在这里插入图片描述
设置每台虚拟机的主机名

vim  /etc/sysconfig/network

HOSTNAME=node01
HOSTNAME=node02
HOSTNAME=node03
每台虚拟机设置ip和域名映射

vim /etc/hosts

添加如下内容,注意下面的ip地址根据前面设置的修改

192.168.88.100 node1.btks.cn node1
192.168.88.101 node2.btks.cn node2
192.168.88.102 node3.btks.cn node3

重启虚拟机

3.4 虚拟机关闭防火墙和SELinux

三台机器执行以下命令root用户来执行

service iptables stop #关闭防火墙
chkconfig iptables off #禁止开机启动

三台机器关闭selinux(ELinux是Linux的一种安全子系统)
SELinux的工作模式: enforcing 强制模式 ; permissive 宽容模式; disable 关闭

#修改selinux的配置文件
vi /etc/selinux/config

在这里插入图片描述

3.4 集群之间虚拟机免密码登录

Hadoop 节点众多, 所以一般在主节点启动从节点, 这个时候就需要程序自动在主节点登录到从节点中, 如果不能免密就每次都要输入密码, 非常麻烦
流程为 1. 需要先在 B节点 配置 A节点 的公钥 2. A节点 请求 B节点 要求登录 3. B节点 使用 A节点 的公钥, 加密一段随机文本 4. A节点 使用私钥解密, 并发回给 B节点 5. B节点 验证文本是否正确。可以看出以上操作非常繁琐。

配置无密码登录。具体操作如下
第一步在三台机器执行以下命令生成公钥与私钥

ssh-keygen -t rsa

执行该命令之后按下三个回车即可
第二步拷贝公钥到同一台机器。三台机器将拷贝公钥到第一台机器三台机器执行命令

ssh-copy-id node1 # node1 为机器名下同

第三步:复制第一台机器的认证到其他机器。将第一台机器的公钥拷贝到其他机器上在第一天机器上面指向以下命令

scp /root/.ssh/authorized_keys node2:/root/.ssh
scp /root/.ssh/authorized_keys node3:/root/.ssh

3.5 时钟同步

三台机器时钟同步
因为很多分布式系统是有状态的, 比如说存储一个数据, A节点 记录的时间是 1, B节点 记录
的时间是 2, 就会出问题
通过网络所有主机和时钟同步服务器保持同步

## 安装
yum install -y ntp
## 启动定时任务
crontab -e
## 随后在输入界面键入
*/1 * * * * /usr/sbin/ntpdate ntp4.aliyun.com;

4 辅助环境和hadoop编译

4.1 目录准备

mkdir -p /export/servers # 软件解压目录
mkdir -p /export/software # 软件目录
mkdir -p /export/data # 数据目录

4.2 辅助环境和编译环境

为什么要编译hadoop由于appache给出的hadoop的安装包没有提供带C程序访问的接口所以我们在使用本地库本地库可以用来做压缩以及支持C程序等等的时候就会出问题,需要对Hadoop源码包进行重新编译。
1安装编译相关的依赖

yum install gcc gcc-c++
yum install autoconf automake libtool curl
yum install lzo-devel zlib-devel openssl openssl-devel ncurses-devel
yum install snappy snappy-devel bzip2 bzip2-devel lzo lzo-devel lzop libXtst

(2)手动安装cmake ,需要先获取cmake-3.13.5.tar.gz然后上传至服务器

#yum卸载已安装cmake 版本低
yum erase cmake
#解压
tar zxvf cmake-3.13.5.tar.gz
#编译安装
cd /export/servers/cmake-3.13.5
./configure
make && make install
#验证
cmake -version      
cmake version 3.13.5

#如果没有正确显示版本 请断开SSH连接 重新登录

3手动安装snappy先获取snappy-1.1.3.tar.gz上传至服务

#卸载已经安装的
cd /usr/local/lib
rm -rf libsnappy*
#上传解压
tar zxvf snappy-1.1.3.tar.gz 
#编译安装
cd /export/servers/snappy-1.1.3
./configure
make && make install
#验证是否安装
ls -lh /usr/local/lib |grep snappy
# -rw-r--r-- 1 root root 511K Nov  4 17:13 libsnappy.a
# -rwxr-xr-x 1 root root  955 Nov  4 17:13 libsnappy.la
# lrwxrwxrwx 1 root root   18 Nov  4 17:13 libsnappy.so -> libsnappy.so.1.3.0
# lrwxrwxrwx 1 root root   18 Nov  4 17:13 libsnappy.so.1 -> libsnappy.so.1.3.0
# -rwxr-xr-x 1 root root 253K Nov  4 17:13 libsnappy.so.1.3.0

4安装配置JDK 1.8先获取jdk-8u65-linux-x64.tar.gz上传到服务器

#解压安装包
tar zxvf jdk-8u65-linux-x64.tar.gz

#配置环境变量
vim /etc/profile
# 将以下内容追加到文件中
	export JAVA_HOME=/export/servers/jdk1.8.0_65
	export PATH=$PATH:$JAVA_HOME/bin
	export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 使配置文件生效	
source /etc/profile
#验证是否安装成功
java -version
# java version "1.8.0_65"
# Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
# Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
# You have new mail in /var/spool/mail/root

5安装maven先下载apache-maven-3.5.4-bin.tar.gz。上传至服务器

#解压安装包
tar zxvf apache-maven-3.5.4-bin.tar.gz
#配置环境变量
vim /etc/profile
# 将以下内容追加到文件中
	export MAVEN_HOME=/exports/server/apache-maven-3.5.4
	export MAVEN_OPTS="-Xms4096m -Xmx4096m"
	export PATH=:$MAVEN_HOME/bin:$PATH
source /etc/profile
#验证是否安装成功
mvn -v
# Apache Maven 3.5.4

#添加maven 阿里云仓库地址 加快国内编译速度
vim /export/servers/apache-maven-3.5.4/conf/settings.xml
# 将以下内容添加到配置文件注意配置文件中已经有<mirrors>只需要将<mirror>...<mirror>添加到<mirrors>所在的位置即可
<mirrors>
     <mirror>
           <id>alimaven</id>
           <name>aliyun maven</name>
           <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
           <mirrorOf>central</mirrorOf>
      </mirror>
</mirrors>

6安装ProtocolBuffer 2.5.0下载protobuf-2.5.0.tar.gz上传至服务器

#解压
tar zxvf protobuf-2.5.0.tar.gz
#编译安装
cd /export/servers/protobuf-2.5.0
./configure
make && make install
#验证是否安装成功
[root@node4 protobuf-2.5.0]# protoc --version
libprotoc 2.5.0

7编译,编译时间较长可能会持续一个小时或者更久

#上传解压源码包
tar zxvf hadoop-3.1.4-src.tar.gz

#编译
cd /export/servers/hadoop-3.1.4-src

mvn clean package -Pdist,native -DskipTests -Dtar -Dbundle.snappy -Dsnappy.lib=/usr/local/lib

#参数说明

#Pdist,native 把重新编译生成的hadoop动态库
#DskipTests 跳过测试
#Dtar 最后把文件以tar打包
#Dbundle.snappy 添加snappy压缩支持【默认官网下载的是不支持的】
#Dsnappy.lib=/usr/local/lib 指snappy在编译机器上安装后的库路径

8编译之后的安装包路径

cd /export/servers/hadoop-3.1.4-src/hadoop-dist/target

(9)将安装包解压到servers目录

tar zxvf hadoop-3.1.4.tar.gz -C /export/servers/

5 修改hadoop配置文件

进入配置文件所在的目录

cd /export/servers/hadoop-3.1.4/etc/hadoop/

修改以下配置文件
1hadoop环境文件修改 。hadoop-env.sh

#配置JAVA_HOME
export JAVA_HOME=/export/server/jdk1.8.0_65
#文件最后添加各进程启动身份
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root 

(2)其他配置文件修改,注意路径和计算机名等内容和自己实际情况一致需要仔细检查

<!------------------------core-site.xml------------------------------->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://node1.itcast.cn:8020</value>
</property>
<!-- hadoop本地数据存储目录 format时自动生成 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/export/data/hadoop-3.1.4</value>
</property>
<!-- 在Web UI访问HDFS使用的用户名。-->
<property>
    <name>hadoop.http.staticuser.user</name>
    <value>root</value>
</property>

<!------------------------hdfs-site.xml------------------------------->

<!-- 设定SNN运行主机和端口。-->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2.itcast.cn:9868</value>
</property>

<!------------------------mapred-site.xml------------------------------->

<!-- mr程序默认运行方式。yarn集群模式 local本地模式-->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>
<!-- 历史服务器端地址 -->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>node1:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>node1:19888</value>
</property>
<!-- MR App Master环境变量。-->
<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR MapTask环境变量。-->
<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<!-- MR ReduceTask环境变量。-->
<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<!------------------------yarn-site.xml------------------------------->

<!-- yarn集群主角色RM运行机器。-->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1.itcast.cn</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MR程序。-->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>
<!-- 每个容器请求的最小内存资源以MB为单位。-->
<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
  <value>512</value>
</property>
<!-- 每个容器请求的最大内存资源以MB为单位。-->
<property>
  <name>yarn.scheduler.maximum-allocation-mb</name>
  <value>2048</value>
</property>
<!-- 容器虚拟内存与物理内存之间的比率。-->
<property>
  <name>yarn.nodemanager.vmem-pmem-ratio</name>
  <value>4</value>
</property>
<!-- 启动history server -->
<property>
  <name>yarn.log.server.url</name>
  <value>http://node1:19888/jobhistory/logs</value>
</property>

(3修改workers文件

node1
node2
node3

6 安装包分发

将安装包分发到其他节点主机

cd /export/servers

scp -r hadoop-3.1.4 root@node2:$PWD
scp -r hadoop-3.1.4 root@node3:$PWD 

hadoop环境变量配置

vim /etc/proflie
# 将以下内容追加到配置文件
	export HADOOP_HOME=/export/server/hadoop-3.1.4
	export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

将配置文件分发到其他节点并刷新使其生效。

cd /etc/
scp -r profile root@node2:$PWD
scp -r profile root@node3:$PWD 
source /etc/profile # m每个节点都需要执行

7 启动Hadoop

1启动hadoop

hdfs namenode -format注意只有首次启动格式化namenode

start-dfs.sh 
#Starting namenodes on [node1]
#Last login: Thu Nov  5 10:44:10 CST 2020 on pts/0
#Starting datanodes
#Last login: Thu Nov  5 10:45:02 CST 2020 on pts/0
#Starting secondary namenodes [node2]
#Last login: Thu Nov  5 10:45:04 CST 2020 on pts/0

start-yarn.sh 
#Starting resourcemanager
#Last login: Thu Nov  5 10:45:08 CST 2020 on pts/0
#Starting nodemanagers
#Last login: Thu Nov  5 10:45:44 CST 2020 on pts/0

2查看启动结果

jps

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8 测试

1上传文件,然后在浏览器打开http://node1.itcast.cn:9870/ 查看结果

#在/export/data/目录中创建helloworld.txt文件并写入数据
cd /export/data/
touch helloworld.txt
echo "hello hadoop" > helloworld.txt 

#将a.txt上传到HDFS的根目录
hadoop fs -put helloworld.txt  /

2运行mapreduce程序测试

#计算圆周率
 yarn jar /export/servers/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.4.jar pi 2 5

结果如下
在这里插入图片描述
在这里插入图片描述
3读写io测试

# 写入
hadoop jar /export/servers/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar  TestDFSIO -write -nrFiles 10  -fileSize 10MB
# 读取
hadoop jar /export/servers/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar  TestDFSIO -read -nrFiles 10 -fileSize 10MB

#删除测试数据
hadoop jar /export/servers/hadoop-3.1.4/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.1.4-tests.jar   TestDFSIO -clean

测试结果,测试结果也可以在http://node1:8088中查看
写入
在这里插入图片描述
在这里插入图片描述
本文根据传智教程和自己实际操作经验撰写结束撒花

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: Hadoop