当前位置: 首页 > news >正文

Hadoop集群部署

目录

一、简介

二、知识点

三、环境准备

1. 规划节点

2. 基础准备

四、模块内容

4.1安装java环境(三台虚拟机均操作)

 4.2配置免密登录

4.3修改时区并配置自动时间同步

4.4分布式安装Hadoop

4.5启动集群

4.6HDFS的应用

4.7 实例:wordcount示例程序


一、简介

Hadoop集群是一种基于Java开发的分布式计算框架,它允许用户在物理分布的大量数据中进行高速的数据处理。Hadoop集群的核心部分是HDFS(Hadoop Distributed File System),HDFS提供了高容错性和高并发访问的大数据存储。总的来说,Hadoop集群是一个强大的大数据处理工具,能够处理PB级别的数据。他是由一个node1和2个以上的slave节点组成。

二、知识

  1. 安装java环境并验证
  2. 配置免密登录并验证
  3. 分布式安装Hadoop
  4. 启动Hadoop集群

三、环境准备

1. 规划节点

  节点分配,配置,要求等

主机名称

Ip

说明

node1

192.168.20.50

主节点

node2

192.168.20.51

计算节点

node3

192.168.20.52

计算节点2.

2. 基础准备

  • 本实验在CentOS-7-x86_64-DVD-1804.iso 环境下操作
  • 本实验需要用到hadoop-3.3.4.tar.gz,jdk-8u361-linux-x64.tar.gz环境资源包
  • 本次实训机器均为4核8g的机器(内存至少要在2g以上)硬盘80g

四、模块内容

4.1安装java环境(三台虚拟机均操作)

给三台虚拟主机修改名称,分别为node1 node2 node3

[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# hostnamectl set-hostname node3

       配置映射文件

[root@node1 ~]# vi /etc/hosts
192.168.20.50  node1
192.168.20.51  node2
192.168.20.52  node3

        关闭防火墙以及开放所有端口

[root@node1 ~]# systemctl disable firewalld && systemctl stop  firewalld 
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

        注册hadoop用户,密码为123456

[root@node1 ~]# useradd hadoop
passwd:123456

        将jdk-8u361-linux-x64.tar.gz软件包上传到root目录,并解压到/export/server,配置软连接

[root@node1~]# mkdir -p /export/server 
[root@node1~]# tar xvf jdk-8u361-linux-x64.tar.gz -C /export/server/
[root@node1 ~]# ln -s /export/server/jdk1.8.0_361/ /export/server/jdk

        在 /etc/profile 下写入如下配置文件(写入末尾)

[root@node1 ~]# vi /etc/profile
export JAVA_HOME=/export/server/jdk
export PATH=$JAVA_HOME/bin:$PATH#使文件立即生效
[root@node1 ~]# source /etc/profile

        配置java执行程序的软连接

#删除系统自带的java程序
[root@node1 ~]# rm -f /usr/bin/java
#软链接我们自己安装的java程序
[root@node1 ~]# ln -s /export/server/jdk/bin/java /usr/bin/java

        验证java是否安装成功

[root@node1 ~]# java -version
[root@node1 ~]# javac -version

 4.2配置免密登录

        在node1上面配置免密登录,使node1可以登录到node2 node3

root用户和hadoop用户均配置

[root@node1 ~]# ssh-keygen -t rsa
连续输入三次回车
[root@node1 ~]# ssh-copy-id node1
输入yes回车
密码为node2主机的密码(密码输入时候不显示)
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node2's password: 
Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'node1"
and check to make sure that only the key(s) you wanted were added.
[root@node1 ~]# ssh-copy-id node2
输入yes回车
密码为node3主机的密码(密码输入时候不显示)
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node2's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'node2'"
and check to make sure that only the key(s) you wanted were added.[root@node1 ~]# ssh-copy-id node3
输入yes回车
密码为node2主机的密码(密码输入时候不显示)
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@node2's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'node2'"
and check to make sure that only the key(s) you wanted were added.

        验证免密登录是否配置成功

[root@node1 ~]# ssh node2
不需要输入密码直接登录进去node2就为配置成功
[root@node2 ~]# logout
Connection to node2 closed.
[root@node1 ~]# ssh node3

4.3修改时区并配置自动时间同步

        安装ntp软件

#前提是已经配置yum源,我已配置完
[root@node1 ~]# yum install -y ntp

        更新时区

[root@node1 ~]# rm -f /etc/localtime;sudo ln -s /usr/share/zoneinfo/Asia/shanghai /etc/localtime

        同步时间

[root@node1 ~]# ntpdate -u ntp.aliyun.com

        开启ntp服务并设置开机自启

[root@node1 ~]# systemctl start ntpd
[root@node1 ~]# systemctl enable ntpd

4.4分布式安装Hadoop

        上传hadoop-3.3.4.tar.gz安装包到/root/,解压到/export/server/并构建软连接。(仅在node1节点执行)

[root@node1 ~]# tar xvf hadoop-3.3.4.tar.gz -C /export/server/
[root@node1 ~]# cd /export/server/
[root@node1 server]# ln -s /export/server/hadoop-3.3.4 hadoop
[root@node1 server]# cd hadoop

        创建环境目录并添加环境变量,依次写入如下文件

[root@node1 ~]# mkdir -p /data/nn
[root@node1 ~]# mkdir /data/dn
[root@node2 ~]# mkdir -p /data/dn
[root@node2 ~]# mkdir -p /data/dn
[root@node1 ~]# mkdir /data/nm-local
[root@node1 ~]# mkdir /data/nm-log
[root@node2 ~]# mkdir /data/nm-local
[root@node2 ~]# mkdir /data/nm-log
[root@node3 ~]# mkdir /data/nm-local
[root@node3 ~]# mkdir /data/nm-log#进入Hadoop目录依次配置环境变量
[root@node1 ~]# cd /export/server/hadoop/etc/hadoop/
[root@node1 hadoop]#
[root@node1 hadoop]# vi hadoop-env.sh
export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

解析:

  • JAVA HOME,指明JDK环境的位置在哪
  • HADOOP HOME,指明Hadoop安装位置
  • HADOOP CONF DIR,指明Hadoop配置文件目录位置
  • HADOOP LOG DIR,指明Hadoop运行日志目录位置。通过记录这些环境变量,来指明上述运行时的重要信息

        在node1里面编写hadoop-env.sh、core-site.xml、hdfs- site.xml和workers配置文件

                编写core-site.xml

[root@node1 hadoop]# vi core-site.xml
<configuration><property><name>fs.defaultFS</name><value>hdfs://node1:8020</value>    </property><property><name>io.file.buffer.size</name><value>131072</value></property>
</configuration>

                编写hdfs-site.xml

[root@node1 hadoop]# vi hdfs-site.xml
<configuration><property><name>dfs.datanode.data.dir.perm</name><value>700</value></property><property><name>dfs.namenode.name.dir</name><value>/data/nn</value></property><property><name>dfs.namenode.hosts</name><value>node1,node2,node3</value></property><property><name>dfs.blocksize</name><value>268435456</value></property><property><name>dfs.namenode.handler.count</name><value>100</value></property><property><name>dfs.datanode.data.dir</name><value>/data/dn</value></property>
</configuration>

                配置Hadoop工作目录

[root@node1 hadoop]# vi workers 
#localhost
node1
node2
node3

                配置mapred-env.sh配置文件

[hadoop@node1 hadoop]$ cat mapred-env.sh
#设置JDK路径...
export JAVA_HOME=/export/server/jdk
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA

                配置mapred-site.xml配置文件

[hadoop@node1 hadoop]$ cat mapred-site.xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value><description>MapReduce的运行框架设置为YARN</description></property><property><name>mapreduce.jobhistory.address</name><value>node1:10020</value><description>历史服务器通讯端口为node1:10020</description></property><property><name>mapreduce.jobhistory.webapp.address</name><value>node1:19888</value><description>历史服务器web端口为node1的19888</description></property><property><name>mapreduce.jobhistory.intermediate-done-dir</name><value>/data/mr-history/tmp</value><description>历史信息在HDFS的记录临时路径</description></property><property><name>mapreduce.jobhistory.done-dir</name><value>/data/mr-history/done</value><description>历史信息在HDFS的记录路径</description></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value><description>MapReduce HOME 设置为HADOOP_HOME</description></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value><description>MapReduce HOME 设置为HADOOP_HOME</description></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value><description>MapReduce HOME 设置为HADOOP_HOME</description></property>
</configuration>

                配置yarn-env.sh配置文件

[hadoop@node1 hadoop]$ cat yarn-env.sh
#设置JDK路径的环境变量
export JAVA_HOME=/export/server/jdk
#设置HADOOP HOME的环境变量
export HADOOP_HOME=/export/server/hadoop
#设置配置文件路径的环境变量
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
#设置日志文件路径的环境变量
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

                配置yarn-site.xml配置文件

[hadoop@node1 hadoop]$ cat yarn-site.xml
<configuration><!-- Site specific YARN configuration properties -->
<property><name>yarn.resourcemanager.hostname</name><value>node1</value><description>ResourceManager设置在node1节点</description>
</property><property><name>yarn.nodemanager.local-dirs</name><value>/data/nm-local</value><description>NodeManager中间数据本地存储路径</description>
</property><property><name>yarn.nodemanager.log-dirs</name><value>/data/nm-log</value><description>NodeManager数据日志本地存储路径</description>
</property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value><description>为MapReduce程序开启Shuffle服务</description>
</property><property><name>yarn.log.server.url</name><value>http://node1:19888/jobhistory/logs</value><description>历史服务器URL</description>
</property><property><name>yarn.web-proxy.address</name><value>node1:8089</value><description>代理服务器主机和端口</description>
</property><property><name>yarn.log-aggregation-enable</name><value>true</value><description>开启日志聚合</description>
</property><property><name>yarn.nodemanager.remote-app-log-dir</name><value>/tmp/logs</value><description>程序日志HDFS的存储路径</description>
</property><property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value><description>选择公平调度器</description>
</property>
</configuration>

4.5启动集群

        将node1文件分发到node2 node3

#回到/root目录执行下面命令分发文件到node2 node3
root@node1 hadoop]# cd /root
[root@node1 ~]# scp -r /export/server/hadoop-3.3.4/ node2:/export/server/
[root@node1 ~]# scp -r /export/server/hadoop-3.3.4/ node3:/export/server/
[root@node2 ~]# cd /export/server/
#设置node2和node3的软连接
[root@node2 server]# ln -s /export/server/hadoop-3.3.4 hadoop
[root@node3 ~]# cd /export/server/
[root@node3 server]# ln -s /export/server/hadoop-3.3.4 hadoop

        分发完成后需/etc/profile配置环境变量操作如下,三台虚拟机均操作

[root@node1 ~]# vi /etc/profile
export HADOOP_HOME=/export/server/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

        使文件立即生效

[root@node1 ~]# source /etc/profile

        以root身份,在node1,node2,node3三台服务器上均执行如下命令

[root@node1 ~]# chown -R hadoop:hadoop /data
[root@node1 ~]# chown -R hadoop:hadoop /export

        初始化和启动Hadoop,hdfs服务

[root@node1 ~]# su - hadoop
#格式化namenode
[root@node1 ~]# hdfs namenode -format
这里我们输入Y
………….
2024-02-01 23:54:42,653 INFO namenode.FSImage: FSImageSaver clean checkpoint: txid = 0 when meet shutdown.
2024-02-01 23:54:42,654 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at node1/192.168.20.50
************************************************************/
#一键启动hdfs集群、yarn集群
[root@node1 ~]# start-dfs.sh
[root@node1 ~]# start-yarn.sh

        验证Hadoop以及hdfs

#node1节点
[hadoop@node1 hadoop]$ jps
31509 ResourceManager
31637 NodeManager
32568 Jps
53116 SecondaryNameNode
16349 DataNode
16207 NameNode
4044 NodeManager
#node2节点:
[root@node2 ~]# jps
81265 NodeManager
54017 DataNode
54406 Jps
#node3节点:
[root@node3 ~]# jps
8126 NodeManager
6221 DataNode
6224 Jps
#添加历史服务器
[hadoop@node1 ~]$ mapred --daemon start historyserver
WARNING: HADOOP_MAPRED_ROOT_LOGGER has been replaced by HADOOP_ROOT_LOGGER. Using value of HADOOP_MAPRED_ROOT_LOGGER.

        查看YARN的WEB UI页面

        打开 http://node1:8088 即可看到YARN集群的监控页面(ResourceManager的WEB UI)

4.6HDFS的应用

        登入HDFS

        在4.4启动的Hadoop集群基础上,通过浏览器进入hdfs网页端http://IP:9870(端口号默认、node1节点IP)。结果如图1-5-1。

图1-5-1 

        查看目录

        在node1节点下查看HDFS根目录下的内容。命令如下,结果如图1-5-2。

[root@node1 ~]# hdfs dfs -ls /
Found 1 items
drwxrwx---   - root supergroup          0 2024-02-21 06:04 /tmp
[root@node1 ~]# hdfs dfs -mkdir /tmp
[root@node1 ~]# hdfs dfs -mkdir /data

图1-5-2

        创建目录

        在node1节点的HDFS根目录下创建内容。命令如下。

[root@node1 ~]# hdfs dfs -mkdir /tmp
[root@node1 ~]# hdfs dfs -mkdir /data

4.7 实例:wordcount示例程序

        提交wordcount示例程序

单词计数示例程序:

  1. 给定数据输入的路径(HDFS)、给定结果输出的路径(HDFS)
  2. 将输入路径内的数据中的单词进行计数,将结果写到输出路径

        我们可以准备一份数据文件,并上传到HDFS中。

[root@node1 server]# vi words.txt
itheima itcast itheima itcast
hadoop hdfs hadoop hdfs
hadoop mapreduce hadoop yarn
itheima hadoop itcast hadoop
itheima itcast hadoop yarn mapreduce

        将words.txt文件上传到HDFS

[root@node1 server]# hadoop fs -mkdir -p /input/wordcount
[root@node1 server]# hadoop fs -mkdir /output
[root@node1 server]# hadoop fs -put words.txt /input/wordcount/

        执行如下命令,提交示例MapReduce程序WordCount到YARN中执行

[root@node1 server]# hadoop jar $HADOOP HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount hdfs://node1:8020/input/wordcount/ hdfs://node1:8020/output/wc1

注意:

  • 参数wordcount,表示运行jar包中的单词计数程序(Javaclass)
  • 参数1是数据输入路径(hdfs://node1:8020/input/wordcount/)
  • 参数2是结果输出路径(hdfs://node1:8020/output/wc1),需要确保输出的文件夹不存在

        验证

点击http://node1:8088/cluster/app/application_1747876169007_0001访问web页面

相关文章:

  • 如何解决大模型返回的JSON数据前后加上```的情况
  • OpenGL Chan视频学习-7 Writing a Shader inOpenGL
  • 使用队列实现栈和使用栈实现队列
  • vue + ant-design + xlsx 实现表格导出进度提示功能
  • 牛客round94E
  • vue3 数值计算 保留小数位
  • 嵌入式学习之系统编程(五)进程(2)
  • day8补充(中断驱动和队列缓冲实现高效数据处理)
  • 文件管理(第八章、九)
  • PDF处理控件Aspose.PDF教程:以编程方式合并PDF文档
  • 一文带你彻底理清C 语言核心知识 与 面试高频考点:从栈溢出到指针 全面解析 附带笔者手写2.4k行代码加注释
  • DP KVM 为何更难实现 EDID 模拟器?
  • day38python打卡
  • 主流Agent Memory工具or框架对比(Mem0、LangMem、Letta)
  • 若依框架中返回自定义实体类分页数据和总记录数的实现方法
  • 【鸿蒙开发】Hi3861学习笔记-雨滴传感器
  • 433M射频接收芯片 XL520 产品特性,空旷环境下通讯距离可达200米
  • liunx、ubantu22.04安装neo4j数据库并设置开机自启
  • 【多智能体系统开发框架AutoGen解析与实践】
  • 【关于C++跨平台开发的挑战】
  • 网站开发自学网/色盲测试图数字
  • 厦门网站制作网页/百度竞价排名魏则西事件分析
  • 佛山app开发公司/seo快速推广
  • 企业网站建设策划书方案范文/昆明seo关键字推广
  • 香港网站建设 深圳分公司/seo日常工作内容
  • 谁家网站用户体验做的好/太原seo推广