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

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/

修改以下配置文件
(1)hadoop环境文件修改 。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中查看
写入
在这里插入图片描述
在这里插入图片描述
(本文根据传智教程和自己实际操作经验撰写)结束,撒花

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天码村

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值