搭建Hadoop分布式集群

news/2025/1/12 7:02:20/

软件和操作系统版本

Hadoop框架是采用Java语言编写,需要java环境(jvm) JDK版本:JDK8版本 ,本次使用的是 Java: jdk-8u431-linux-x64.tar.gz

Hadoop: hadoop-3.3.6.tar.gz

三台Linux虚拟节点: CentOS-7-x86_64-DVD-2009.iso

通过虚拟机设置共享文件夹将需要的安装包复制到linux虚拟机中。(/opt/software/)

[root@localhost1 software]# ll
total 912972
-rwxrwxrwx. 1 root root 730107476 Dec 23 20:43 hadoop-3.3.6.tar.gz
-rwxrwxrwx. 1 root root 148362647 Dec 23 22:10 jdk-8u431-linux-x64.tar.gz
-rwxrwxrwx. 1 root root      1068 Dec 24 11:29 LICENSE
-rwxrwxrwx. 1 root root  56405224 Dec 24 11:29 VMwareTools-10.3.21-14772444.tar.gz

集群规划

LinuxLocalhost1Localhost2Localhost3
HDFSNameNode、DataNodeDataNodeSecondaryNameNode、DataNode
YARNNodeManagerNodeManager,  ResourceManagerNodeManager

安装JDK

tar -zxvf jdk-8u431-linux-x64.tar.gz -C /usr/local/java/

配置环境变量:

vi /etc/profile# java environment
JAVA_HOME=/usr/local/java/jdk1.8.0_431
JRE_HOME=${JAVA_HOME}/jre
CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
PATH=$PATH:${JAVA_HOME}/bin:${JRE_HOME}/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

让环境变量生效:

source /etc/profile 

安装Hadoop

tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/applications

添加Hadoop到环境变量

vi /etc/profile#HADOOP
HADOOP_HOME=/usr/local/applications/hadoop-3.3.6
PATH=$PATH:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
export HADOOP_HOME PATH

让环境变量生效:

source /etc/profile 

验证hadoop

hadoop version

集群配置

cd  /usr/local/applications/hadoop-3.3.6/etc/hadoop/

HDFS集群配置

配置:hadoop-env.sh

export JAVA_HOME=/usr/local/java/jdk1.8.0_431

指定NameNode节点以及数据存储目录(修改core-site.xml)

<!-- 指定HDFS中NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://localhost1:9000</value></property><!-- 指定Hadoop运行时产生文件的存储目录 --><property><name>hadoop.tmp.dir</name><value>/usr/local/applications/hadoop-3.3.6/data/tmp</value></property>

指定secondarynamenode节点(修改hdfs-site.xml)

    <!-- 指定Hadoop辅助名称节点主机配置 --><property><name>dfs.namenode.secondary.http-address</name><value>localhost3:50090</value></property><!--副本数量 --><property><name>dfs.replication</name><value>3</value></property>

指定datanode从节点(修改workers文件,每个节点配置信息占一行)

localhost1
localhost2
localhost3

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。

MapReduce集群配置

指定MapReduce使用的jdk路径(修改mapred-env.sh)

export JAVA_HOME=/usr/local/java/jdk1.8.0_431

指定MapReduce计算框架运行Yarn资源调度框架(修改mapred-site.xml)

    <!-- 指定MR运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property>

Yarn集群配置

指定JDK路径 

vi yarn-env.sh

export JAVA_HOME=/usr/local/java/jdk1.8.0_431

指定ResourceMnager的master节点信息(修改yarn-site.xml)

    <!-- 指定YARN的ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><value>localhost2</value></property><!-- Reducer获取数据的方式 --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>

分发配置

远程复制文件夹:将localhost1 配置好的Hadoop 复制到localhost2 和localhost3

scp -r /usr/local/applications/hadoop-3.3.6 root@localhost2:/usr/local/applications/hadoop-3.3.6
scp -r /usr/local/applications/hadoop-3.3.6 root@localhost3:/usr/local/applications/hadoop-3.3.6

配置SSH 密钥登陆

生成Key Pairs

在三台节点分别生成 Key Pairs, 默认名字 id_rsa, 千万不要改。

ssh-keygen -t rsa -C "root@localhost1"
ssh-keygen -t rsa -C "root@localhost2"
ssh-keygen -t rsa -C "root@localhost3"

key pairs 默认生产到 ~/.ssh/

[root@localhost1 .ssh]# ll
total 16
-rw-------. 1 root root 1191 Jan  5 20:22 authorized_keys
-rw-------. 1 root root 1679 Jan  5 20:04 id_rsa
-rw-r--r--. 1 root root  397 Jan  5 20:04 id_rsa.pub
-rw-r--r--. 1 root root  564 Jan  5 10:40 known_hosts

把三个节点的公钥互相发送到每个节点

添加公钥到远程服务器

ssh-copy-id root@localhost2
ssh-copy-id root@localhost3

添加公钥到本地

cat localhost1.pub >> authorized_keys

添加完成以后三个节点都有了所有节点的公钥

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDTmy6v6Xsv4893ofLyMVyct439T4ePv/OfEtpMPtBqLsobyiDV1Ih0H17oxI8Mk4UvZIEgokyLDq8lz8n3v4Vr5RfaCLRvbFEmn7SEzV+tBeRd9tO9rccaSjBT5NfOlFpLecucbA1JP3sS1PgVmyGvD6xE490gD1EGKWDi04fxifwvrEJPxkIRS/FKKik1fB4IRtReKQlAkh/JwE3mvBdNbL0jeOKiB01ofQfV2xoOgooBJSkQNhRqxtPccWuH6GrKK3uTTpPZWZvCoW1vHKOaOH59AGFuRlrO6yobLdQueS/VE8jx7VdlZonICorgQuxUwQsCR9Ys+xKRwcpTtWin root@localhost1
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDdRLWUfYgCZ5KS2yC6BaOtCz/nsnb6EjO8jt6q8o9deen3+/jN/hnqhHFAEPRFGKq4WwPy4awYlo1sqDxgc8GrpzUUUnkIsnERhXp9L0df99X360t9QgNwNiz3ayTa40oAT0Zg1GbftjRH/foJIReEUA1IjGTAphTQYnKwWMsTOXeIqI7A2QeUUQvxVkNWJ/lTO59vCxIA0NJUkgdMgXImfGlb23gtX/RlJ0NCqdoOm83qrNLHcC+iIwOrKpFx9v88qdajiDi+pI1AqWz1fQD6LpIx9OojM9ZPb2VYvCSt4smvCECxH+r3/HOB68+bumynm2w26XQumZA/utpQgJaH root@localhost2
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAZ36gymNo4jmEkeS9fuwSlZ5mceFPOQcmgKnfSEi4LWzRdg1hmHK3bOzFabnRLaKGZvtK1GBFtZFHF8LAmP4/BXyDAxpU2/kFkWjn+z/Cu4bfAUl98M1Gqj7L3iv360wpGLz/VB65YIBxn88sac4hEZZUSFNMZxbRm2MIdN05YVgN7z84nLph3VNLzfpdfqnn6fLP8Fu6qwd8NaE91M95Lf7xBIdO1k0+/4/RLjTWfnpo4pKw1YM1CgGQEuz0JW6+yNuDyDwtlgNXDZeOni9JBjda/UQckguQMDDFrRzgsFTK9j5tywJQSlE0TDXIqyIUSgiajO6V//XGFP1weVLP root@localhost3

关闭防火墙

三个linux节点都需要关闭防火墙,这个Hadoop集群才能互相访问。

临时关闭

systemctl stop firewalld

永久关闭

systemctl stop firewalldsystemctl disable firewalld

查看防火墙状态

systemctl status firewalld

启动集群

1,Namenode执行格式化

hadoop namenode -format

注意:如果集群是第一次启动,需要在Namenode所在节点格式化NameNode,非第一次不用执行格 式化Namenode操作!!

2, 启动HDFS

在namenode 节点执行:

cd /usr/local/applications/hadoop-3.3.6/sbin/start-dfs.sh

3, 启动YARN

在ResouceManager节点执行:

cd /usr/local/applications/hadoop-3.3.6/sbin/start-yarn.sh

4, 启动完成后

查看三台节点进程

[root@localhost1 hadoop-3.3.6]# jps
5232 Jps
4775 DataNode
4623 NameNode
5119 NodeManager[root@localhost2 hadoop-3.3.6]# jps
3001 ResourceManager
3161 NodeManager
3514 Jps
2796 DataNode[root@localhost3 ~]# jps
2793 DataNode
2907 SecondaryNameNode
3115 Jps
2991 NodeManager

5, web端查看Hdfs界面

http://localhost1:9870/dfshealth.html#tab-overview

集群测试

1, HDFS 分布式存储

在locahost1创建并上传文件
#创建hdfs 文件夹
hdfs dfs -mkdir -p /test/input#本地hoome目录创建一个文件
cd /root/tmp
vi test.txt
hello world
#上传linxu文件到Hdfs
hdfs dfs -put /root/tmp/test.txt /test/input
在localhost2 尝试下载
#从Hdfs下载文件到linux本地
hdfs dfs -get /test/input/test.txt
去hdfs文件目录页面去查看

http://localhost1:9870/explorer.html#/

2, MapReduce 分布式计算

在HDFS文件系统根目录下面创建一个wcinput文件夹

hdfs dfs -mkdir /wcinput

在/root/tmp 目录下创建一个wc.txt文件(本地文件系统)

vi wc.txthadoop mapreduce yarn
hdfs hadoop mapreduce
mapreduce yarn jack
jack
jack neil neil neil

上传wc.txt到Hdfs目录/wcinput下

hdfs dfs -put wc.txt /wcinput

执行程序

执行程序之前,/wcinput必须存在, /wcoutput必须不存在。

cd $HADOOP_HOMEhadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /wcinput /wcoutput

执行程序的时候可能回报错,

需要修改 /usr/local/applications/hadoop-3.3.6/etc/hadoop/mapred-site.xml

加入以下配置。不需要重启服务。

<property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

然后再次执行程序

查看结果

[root@localhost1 hadoop-3.3.6]# hdfs dfs -cat /wcoutput/part-r-00000
hadoop	2
hdfs	1
jack	3
mapreduce	3
neil	3
yarn	2

也可以到页面上下载结果

YARN  RESOURCE MANAGER 页面 查看程序执行情况
http://localhost2:8088/cluster


http://www.ppmy.cn/news/1562434.html

相关文章

LeetCode hot100-96

136. 只出现一次的数字 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空间。这题的解答挺有意…

Streamlit+Selenium快速构建一个网络爬虫应用

项目需要从网上爬取数据&#xff0c;用了八爪鱼来进行测试&#xff0c;可以通过自定义任务&#xff0c;不需要编程即可实现对于数据的爬取&#xff0c;但是缺点是免费版本自定义任务有数量限制&#xff0c;另外在采集过程的控制上还不够便利&#xff0c;对于熟悉Python编程的人…

【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的爱家园管理系统

开题报告 随着社会的不断发展&#xff0c;人们对于生育、婚姻的观念也在不断变化。然而&#xff0c;这些观念的变化往往伴随着一些问题和挑战。例如&#xff0c;一些年轻夫妇对于生育和婚姻感到迷茫和焦虑&#xff0c;而一些中年人则面临着婚姻危机或情感困扰。此外&#xff0…

C#使用OpenTK绘制一个着色矩形

OpenTK介绍 OpenTK是一个开源、跨平台的游戏开发库&#xff0c;由MonoGame团队创建。它为C#开发者提供了一个简单易用的接口&#xff0c;以便使用OpenGL、OpenAL和OpenCL进行3D渲染、音频处理和并行计算。OpenTK的目标是提供一个一致且高效的框架&#xff0c;让开发者能够专注…

DDD - 如何运用 DDD 进行数据库设计

文章目录 Pre概述领域对象持久化的思想领域模型的设计传统的 4 种关系1. 一对一关系2. 多对一关系3. 一对多关系4. 多对多关系 继承关系的 3 种设计1. 继承关系的第一种方案&#xff1a;整个父类与子类都写入一张表2. 继承关系的第二种方案&#xff1a;各子类各自对应各自的表3…

分享:osgb倾斜数据转cesium-3dtiles 小工具.

背景: 很多知识殊途同归,在三维软件这块,少不了要和各种各样的数据格式打交道.osgb,stl,obj,3dtiles,3ds等等..虽然里面本质核心基本都是几何数据拓扑数据材质纹理数据等等,但是由于其组织方式不同和特殊的应用场景,导致很多模型需要转来转去...相信很多人在这方面都或多或少吃…

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据

文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据&#xff0c;页面卡死&#xff0c;如何优化&#xff1f;&#xff1f;这里使用 分页 虚拟列表&#xff08;vue-virtual-scroll-list&#xff09;&#xff0c;去模拟一个下拉的内容…

本地缓存:Guava Cache

这里写目录标题 一、范例二、应用场景三、加载1、CacheLoader2、Callable3、显式插入 四、过期策略1、基于容量的过期策略2、基于时间的过期策略3、基于引用的过期策略 五、显示清除六、移除监听器六、清理什么时候发生七、刷新八、支持更新锁定能力 一、范例 LoadingCache<…