Linux软件安装实践

type
Post
status
Published
summary
Linux 软件安装实践;记录了 zookeeper、Tomcat、Nginx、Hadoop、SQL、Spark、Flink 等软件的安装和遇到的问题,以供学习和参考;均用 Ubuntu 系统安装。
slug
Linux-software-installation
date
Jul 5, 2024
tags
Linux
hadoop安装
spark安装
flink安装
zookeeper安装
集群部署
category
基础知识
password
icon
URL
Property
Jul 8, 2024 09:45 AM
Ubuntu APT 仓库介绍
APT 仓库配置包是一种特殊的 Debian 包(.deb 文件),用于配置Ubuntu 的 APT 包管理器以便它能够从特定的仓库中获取软件包;
配置包通常包含以下内容:
  • APT 源列表: 这些文件位于 /etc/apt/sources.list.d/ 目录中,指定了包管理器应该从哪些地址获取软件包。每个源列表文件包含一个或多个仓库的 URL 和相应的分发版以及组件。
  • GPG 密钥: 包含用于验证仓库中软件包签名的 GPG 公钥。APT 包管理器使用这些密钥来确保从仓库下载的软件包是由官方发布且未被篡改的。GPG 密钥通常位于 /etc/apt/trusted.gpg.d/ 目录中。

MySQL 安装

MySQL 5.x 版本的安装(未成功)

(M1 的 MacOS 中的 PD 虚拟机的 Ubuntu22.04 安装不成功)
apt包管理工具中只有最新版的 MySQL8 的安装包,不包含 5.x 版本的安装包,所以需要额外下载和配置MySQL APT 仓库配置包。
  1. 下载MySQL APT 仓库配置文件
    1. # 任选一条执行 # wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb # wget https://dev.mysql.com/get/mysql-apt-config_0.8.13-1_all.deb wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb # wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb # 没有 5.7 版本的 MySQL
      MySQL APT 仓库配置文件下载地址可以在官网获得:
    2. MySQL Community Downloads
    3. MySQL APT Repository
    4. 点击 download 进入详情页
    5. 直接下载则点击:No thanks, just start my download.
    6. 获取下载链接则在【No thanks, just start my download.】上右键复制下载链接
  1. 安装仓库包
    1. # dpkg -i mysql-apt-config_0.8.12-1_all.deb # dpkg -i mysql-apt-config_0.8.13-1_all.deb dpkg -i mysql-apt-config_0.8.18-1_all.deb dpkg -i mysql-apt-config_0.8.24-1_all.deb # dpkg -i mysql-apt-config_0.8.30-1_all.deb sudo apt update # 安装好之后进行管理器更新
      步骤
      回车进入 MySQL Server
      notion imagenotion image
      选择对应版本,回车确认
      notion imagenotion image
      OK 退出
      notion imagenotion image
      问题
      1. 安装好仓库包之后,对仓库进行更新,提示 MySQL 仓库的签名密钥已经过期
      notion imagenotion image
      最终没有解决,跳过了
      💡
      删除配置
      sudo dpkg -r mysql-apt-config # 删除配置 sudo rm /etc/apt/sources.list.d/mysql.list # 删除 MySQL APT 仓库源文件 sudo rm /etc/apt/trusted.gpg.d/mysql.gpg # 删除 GPG 密钥 sudo apt update # 更新软件包列表
  1. 添加公钥
    1. wget -qO - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | sudo apt-key add -
  1. 检查和更新apt
    1. apt-cache policy mysql-server # 检查是否成功配置MySQL5.7的仓库 sudo apt update # 更新
  1. 安装
    1. apt install -f -y mysql-client=5.7* mysql-community-server=5.7* # 安装mysql客户端和mysql服务端

MySQL 8 版本的安装

  1. 如果已经安装过MySQL5.7版本,需要卸载仓库信息
    1. # 卸载MySQL5.7版本 apt remove -y mysql-client=5.7* mysql-community-server=5.7* # 卸载5.7的仓库信息 dpkg -l | grep mysql | awk '{print $2}' | xargs dpkg -P
  1. 更新apt仓库信息
    1. apt update
  1. 安装mysql
    1. apt install -y mysql-server
  1. 启动MySQL
    1. /etc/init.d/mysql start # 启动 /etc/init.d/mysql stop # 停止 /etc/init.d/mysql status # 查看状态
  1. 登陆MySQL设置密码
    1. # 直接执行:mysql mysql
  1. 设置密码
    1. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  1. 退出MySQL控制台
    1. exit
  1. 对MySQL进行初始化
    1. # 执行如下命令,此命令是MySQL安装后自带的配置程序 mysql_secure_installation # 可以通过which命令查看到这个自带程序所在的位置 which mysql_secure_installation # /usr/bin/mysql_secure_installation
    2. 输入密码:
    3. 是否开启密码验证插件,如果需要增强密码安全性,输入y并回车,不需要直接回车(课程中选择直接回车)
    4. 是否更改root密码,需要输入y回车,不需要直接回车(课程不更改)
    5. 是否移除匿名用户,移除输入y回车,不移除直接回车(课程选择移除)
    6. 是否进制root用户远程登录,禁止输入y回车,不禁止直接回车(课程选择不禁止)
    7. 是否移除自带的测试数据库,移除输入y回车,不移除直接回车(课程选择不移除)
    8. 是否刷新权限,刷新输入y回车,不刷新直接回车(课程选择刷新)
  1. 重新登陆MySQL(用更改后的密码)
    1. mysql -uroot -p

Tomcat安装

Tomcat是一个WEB应用程序的托管平台,可以让用户编写的WEB应用程序,被Tomcat所托管,并提供网站服务。
Tomcat的安装主要分为2部分:

安装JDK

  1. 这里下载 jdk(无需Oracle 登录)
  1. 上传文件
  1. 创建文件夹,用来部署JDK,将JDK和Tomcat都安装部署到:/export/server 内
    1. mkdir -p /export/server
  1. 解压缩JDK安装文件
    1. tar -zxvf jdk-8u351-linux-x64.tar.gz -C /export/server
  1. 配置JDK的软链接
    1. ln -s /export/server/jdk1.8.0_351 /export/server/jdk
  1. 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中,编辑/etc/profile文件
    1. export JAVA_HOME=/export/server/jdk export PATH=$PATH:$JAVA_HOME/bin
  1. 生效环境变量
    1. source /etc/profile
  1. 配置java执行程序的软链接
    1. # 删除系统自带的java程序 rm -f /usr/bin/java # 软链接我们自己安装的java程序 ln -s /export/server/jdk/bin/java /usr/bin/java
  1. 执行验证:
    1. java -version javac -version

安装Tomcat

  1. 这里下载tomcat,或者直接 wget 下载
    1. # 使用root用户操作 wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.1.25.tar.gz # 如果出现https相关错误,可以使用--no-check-certificate选项 wget --no-check-certificate https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.27/bin/apache-tomcat-10.0.27.tar.gz
  1. 解压Tomcat安装包
    1. # 使用root用户操作,否则无权限解压到/export/server内,除非修改此文件夹权限 tar -zxvf apache-tomcat-10.0.27.tar.gz -C /export/server
  1. 创建Tomcat软链接
    1. # 使用root用户操作 ln -s /export/server/apache-tomcat-10.0.27 /export/server/tomcat
  1. 修改tomcat安装目录权限
    1. # 使用root用户操作,同时对软链接和tomcat安装文件夹进行修改,使用通配符*进行匹配 chown -R tomcat:tomcat /export/server/*tomcat*
  1. 创建并切换到tomcat用户
    1. su - tomcat
  1. 启动tomcat
    1. /export/server/tomcat/bin/startup.sh
  1. tomcat启动在8080端口,可以检查是否正常启动成功
    1. netstat -anp | grep 8080
  1. 放行tomcat需要使用的8080端口的外部访问权限
    1. 系统默认开启了防火墙,阻止外部网络流量访问系统内部所以,如果想要Tomcat可以正常使用,需要对Tomcat默认使用的8080端口进行放行,放行有2种操作方式:
      1. 关闭防火墙
      1. 配置防火墙规则,放行端口
      # 以下操作2选一即可 # 方式1:关闭防火墙 systemctl stop firewalld # 关闭防火墙 systemctl disable firewalld # 停止防火墙开机自启 # 方式2:放行8080端口的外部访问 firewall-cmd --add-port=8080/tcp --permanent # --add-port=8080/tcp表示放行8080端口的tcp访问,--permanent表示永久生效 firewall-cmd --reload # 重新载入防火墙规则使其生效
  1. 访问 Tomcat 主页:
    1. 用服务器的 IP 地址加上端口号即可访问,如我的 IP 是10.211.55.6,那么访问地址是:http://10.211.55.6:8080/

Nginx安装

Nginx 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。它由俄罗斯程序员伊戈尔·赛索耶夫开发,最初发布于2004年。Nginx 以其高性能、稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名。以下是 Nginx 的一些主要特点:
  1. 高性能:Nginx 能够处理大量的并发连接,同时保持较低的内存使用率。
  1. 反向代理:Nginx 可用作反向代理服务器,提供负载均衡、缓存等功能,以提高后端服务器的性能和稳定性。
  1. 负载均衡:支持多种负载均衡策略,如轮询、最少连接等。
  1. 静态内容服务:非常适合用于提供静态内容,如图片、视频等。
  1. 模块化设计:Nginx 的功能可以通过动态加载模块来扩展,用户可以根据需要选择和配置不同的模块。

Ubuntu 安装

  1. 更新软件包列表:
    1. sudo apt update
  1. 安装 Nginx:
    1. sudo apt install nginx
  1. 启动 Nginx 服务:
    1. sudo systemctl start nginx
  1. 设置 Nginx 开机自启动:
    1. sudo systemctl enable nginx
  1. 配置防火墙放行
    1. # 方式1(推荐),关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启 # 方式2,放行80端口 firewall-cmd --add-port=80/tcp --permanent # 放行tcp规则下的80端口,永久生效 firewall-cmd --reload # 重新加载防火墙规则
  1. 访问 Nginx:10.211.55.6:80

集群化环境部署

环境准备

  1. 需要多个 Linux 环境(多台服务器),PD 的克隆功能,需要关机Ubuntu 镜像
  1. 修改克隆 Linux 的 IP 地址,方法详解《Linux 基础》中的【IP】部分
  1. 将多台服务器的主机名和 IP 进行互相映射,方法详解《Linux 基础》中的【域名解析】部分
  1. 多个服务器之间实现 ssh 密钥免密登录,方法详见《Linux 基础》中的 【SSH 服务】
  1. 为多台服务器安装 JDK,方法详见本文【Tomcat】部分

Zookeeper集群安装部署

Zookeeper介绍

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。除了为Hadoop和HBase提供协调服务外,Zookeeper也被其它许多软件采用作为其分布式状态一致性的依赖,比如Kafka,又或者一些软件项目中,也经常能见到Zookeeper作为一致性协调服务存在。

Zookeeper安装步骤

Zookeeper是一款分布式的集群化软件,可以在多台服务器上部署,并协同组成分布式集群一起工作。
  1. 首先,要确保已经完成了环境准备全部内容
  1. 【node1上操作】下载Zookeeper安装包,并解压
    1. # 下载 wget http://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/apache-zookeeper-3.5.9-bin.tar.gz # 确保如下目录存在,不存在就创建 mkdir -p /export/server # 解压 tar -zxvf apache-zookeeper-3.5.9-bin.tar.gz -C /export/server
  1. 【node1上操作】创建软链接
    1. ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper
  1. 【node1上操作】修改配置文件
    1. vim /export/server/zookeeper/conf/zoo.cfg tickTime=2000 # zookeeper数据存储目录 dataDir=/export/server/zookeeper/data clientPort=2181 initLimit=5 syncLimit=2 # 新增配置,node改为自己的主机名 server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888
  1. 【node1上操作】配置myid
    1. # 1. 创建Zookeeper的数据目录 mkdir /export/server/zookeeper/data # 2. 创建文件,并填入1 vim /export/server/zookeeper/data/myid # 在文件内填入1即可
  1. 【在node2和node3上操作】,创建文件夹
    1. mkdir -p /export/server
  1. 【node1上操作】将Zookeeper 复制到node2和node3
    1. cd /export/server scp -r apache-zookeeper-3.5.9 node2:`pwd`/ scp -r apache-zookeeper-3.5.9 node3:`pwd`/
  1. 【在node2上操作】
    1. # 1. 创建软链接 ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper # 2. 修改myid文件 vim /export/server/zookeeper/data/myid # 修改内容为2
  1. 【在node3上操作】
    1. # 1. 创建软链接 ln -s /export/server/apache-zookeeper-3.5.9 /export/server/zookeeper # 2. 修改myid文件 vim /export/server/zookeeper/data/myid # 修改内容为3
  1. 【在node1、node2、node3上分别执行】启动Zookeeper
    1. # 启动命令 /export/server/zookeeper/bin/zkServer.sh start # 启动Zookeeper /export/server/zookeeper/bin/zkServer.sh stop # 停止Zookeeper服务 /export/server/zookeeper/bin/zkServer.sh status # 查看Zookeeper状态,有一个主机的为leader,其他的为follower /export/server/zookeeper/bin/zkServer.sh restart # 重启Zookeeper
      💡
      关于集群的 leader
      在 ZooKeeper 集群中,Leader 是通过选举过程选出来的,如果想更换 leader 则需要关闭现在的 leader 的 zookeeper 服务,触发其他服务器重新选举,选举结束后重启之前关闭的节点
  1. 【在node1、node2、node3上分别执行】检查Zookeeper进程是否启动
    1. jps # 结果中找到有:QuorumPeerMain 进程即可
  1. 【node1上操作】验证Zookeeper
    1. # 需要在leader主机上执行 /export/server/zookeeper/bin/zkCli.sh # 进入到Zookeeper控制台中后,执行 ls / # 如无报错即配置成功

大数据集群(Hadoop生态)安装部署

Hadoop介绍

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决,海量数据的存储和海量数据的分析计算问题。
  • Hadoop HDFS 提供分布式海量数据存储能力
  • Hadoop YARN 提供分布式集群资源管理能力
  • Hadoop MapReduce 提供分布式海量数据计算能力
Hadoop生态体系中总共会出现如下进程角色:
  1. Hadoop HDFS的管理角色:Namenode进程(仅需1个即可(管理者一个就够)
  1. Hadoop HDFS的工作角色:Datanode进程(需要多个(工人,越多越好,一个机器启动一个)
  1. Hadoop YARN的管理角色:ResourceManager进程(仅需1个即可(管理者一个就够)
  1. Hadoop YARN的工作角色:NodeManager进程(需要多个(工人,越多越好,一个机器启动一个)
  1. Hadoop 历史记录服务器角色:HistoryServer进程(仅需1个即可(功能进程无需太多1个足够)
  1. Hadoop 代理服务器角色:WebProxyServer进程(仅需1个即可(功能进程无需太多1个足够)
  1. Zookeeper的进程:QuorumPeerMain进程(仅需1个即可(Zookeeper的工作者,越多越好)
节点分配:
  1. node1:Namenode、Datanode、ResourceManager、NodeManager、HistoryServer、WebProxyServer、QuorumPeerMain
  1. node2:Datanode、NodeManager、QuorumPeerMain
  1. node3:Datanode、NodeManager、QuorumPeerMain

Hadoop安装部署步骤

  1. 下载Hadoop安装包、解压、配置软链接
    1. # 1. 下载 wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6-src.tar.gz # 官方新镜像 wget https://mirrors.aliyun.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz # 阿里云镜像 # 2. 解压 # 请确保目录/export/server存在 tar -zxvf hadoop-3.3.6.tar.gz -C /export/server/ # 3. 构建软链接 ln -s /export/server/hadoop-3.3.6 /export/server/hadoop
  1. 修改配置文件:hadoop-env.sh
    1. Hadoop的配置文件要修改的地方很多,请细心
      cd 进入到/export/server/hadoop/etc/hadoop,文件夹中,配置文件都在这里
      修改hadoop-env.sh文件
      此文件是配置一些Hadoop用到的环境变量
      这些是临时变量,在Hadoop运行时有用
      如果要永久生效,需要写到/etc/profile中
      # 在文件开头加入: # 配置Java安装路径 export JAVA_HOME=/export/server/jdk # 配置Hadoop安装路径 export HADOOP_HOME=/export/server/hadoop # Hadoop hdfs配置文件路径 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # Hadoop hdfs 日志文件夹 export HADOOP_LOG_DIR=$HADOOP_HOME/logs/hdfs # Hadoop的使用启动用户配置,不建议使用 # 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 # export YARN_PROXYSERVER_USER=root
  1. 修改配置文件:core-site.xml
    1. 清空文件,填入如下内容;注意:其中的 node1 需要改成自己的主机用户名
      <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!--  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at    http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration>  <property>    <name>fs.defaultFS</name>    <value>hdfs://node1:8020</value>    <description></description>  </property>  <property>    <name>io.file.buffer.size</name>    <value>131072</value>    <description></description>  </property> </configuration>
  1. 配置:hdfs-site.xml文件
    1. 注意:其中的 node1,node2,node3 需要改成自己的主机用户名
      <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!--  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at    http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <configuration>    <property>        <name>dfs.datanode.data.dir.perm</name>        <value>700</value>    </property>  <property>    <name>dfs.namenode.name.dir</name>    <value>/data/nn</value>    <description>Path on the local filesystem where the NameNode stores the namespace and transactions logs persistently.</description>  </property>  <property>    <name>dfs.namenode.hosts</name>    <value>node1,node2,node3</value>    <description>List of permitted DataNodes.</description>  </property>  <property>    <name>dfs.blocksize</name>    <value>268435456</value>    <description></description>  </property>  <property>    <name>dfs.namenode.handler.count</name>    <value>100</value>    <description></description>  </property>  <property>    <name>dfs.datanode.data.dir</name>    <value>/data/dn</value>  </property> </configuration>
  1. 配置:mapred-env.sh文件
    1. 在文件的开头加入如下环境变量设置
      # 设置 jdk 路径 export JAVA_HOME=/export/server/jdk # 设置历史服务器的进程内存大小 1G export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000 # 设置日志级别 export HADOOP_ROOT_LOGGER=INFO,RFA
  1. 配置:mapred-site.xml文件
    1. 注意:其中的 node1 需要改成自己的主机用户名
      <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!--  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at    http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License. See accompanying LICENSE file. --> <!-- Put site-specific property overrides in this file. --> <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>Hadoop home 设置</description> </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> </configuration>
  1. 配置:yarn-env.sh文件
    1. 在文件的开头加入如下环境变量设置
      # 设置 jdk 路径 export JAVA_HOME=/export/server/jdk # 设置Hadoop路径 export HADOOP_HOME=/export/server/hadoop # 设置Hadoop配置文件路径 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop # 设置Hadoop日志路径 export HADOOP_LOG_DIR=$HADOOP_HOME/logs
  1. 配置:yarn-site.xml文件
    1. 注意:其中的 node1 需要改成自己的主机用户名
      <?xml version="1.0"?> <!--  Licensed under the Apache License, Version 2.0 (the "License");  you may not use this file except in compliance with the License.  You may obtain a copy of the License at    http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License. See accompanying LICENSE file. --> <configuration> <!-- Site specific YARN configuration properties --> <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> 代理服务器 URL</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>日志聚合路径</description>  </property> <!-- Site specific YARN configuration properties -->  <property>    <name>yarn.resourcemanager.hostname</name>    <value>node1</value>    <description>设置resourcemanager开启的节点</description>  </property>  <property>    <name>yarn.resourcemanager.scheduler.class</name>    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>    <description>yarn调度器:公平调度</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.log.retain-seconds</name>    <value>10800</value>    <description>Default time (in seconds) to retain log files on the NodeManager Only applicable if log-aggregation is disabled.</description>  </property>  <property>    <name>yarn.nodemanager.aux-services</name>    <value>mapreduce_shuffle</value>    <description>为 mapreduce 开启 shuffle 服务</description>  </property> </configuration>
  1. 修改workers文件
    1. 注意:其中的 node1,node2,node3 需要改成自己的主机用户名
      # 全部内容如下 node1 node2 node3
  1. 分发hadoop到其它机器
    1. # 在node1执行 cd /export/server # 方式一 scp -r hadoop-3.3.6 node2:`pwd`/ scp -r hadoop-3.3.6 node3:`pwd`/ # 方式二 scp -r hadoop-3.3.6 node2:%PWD scp -r hadoop-3.3.6 node3:%PWD
  1. 在node2、node3执行
    1. # 创建软链接 ln -s /export/server/hadoop-3.3.6 /export/server/hadoop
  1. 创建所需目录
      • 在node1执行:
      mkdir -p /data/nn mkdir -p /data/dn mkdir -p /data/nm-log mkdir -p /data/nm-local
      • 在node2执行:
      mkdir -p /data/dn mkdir -p /data/nm-log mkdir -p /data/nm-local
      • 在node3执行:
      mkdir -p /data/dn mkdir -p /data/nm-log mkdir -p /data/nm-local
  1. 配置环境变量
    1. 在node1、node2、node3修改/etc/profile
      export HADOOP_HOME=/export/server/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
      执行source /etc/profile生效
  1. 格式化NameNode,在node1执行
    1. hadoop namenode -format
      hadoop这个命令来自于:$HADOOP_HOME/bin中的程序
      由于配置了环境变量PATH,所以可以在任意位置执行hadoop命令哦
  1. 启动hadoop的hdfs集群,在node1执行即可
    1. start-dfs.sh # 如需停止可以执行 stop-dfs.sh
      notion imagenotion image
      start-dfs.sh这个命令来自于:$HADOOP_HOME/sbin中的程序
      由于配置了环境变量PATH,所以可以在任意位置执行start-dfs.sh命令哦
      启动时遇到问题:
      • 不能连接到主机,原因是配置文件中的 node1 没改成我自己的 anjhon
        • Starting namenodes on [node1] node1: ssh: Could not resolve hostname node1: Temporary failure in name resolution Starting datanodes anjhon: Warning: Permanently added 'anjhon' (ED25519) to the list of known hosts. anjhon: root@anjhon: Permission denied (publickey,password). anjhon2: WARNING: /export/server/hadoop/logs/hdfs does not exist. Creating. anjhon3: WARNING: /export/server/hadoop/logs/hdfs does not exist. Creating. Starting secondary namenodes [anjhon] anjhon: root@anjhon: Permission denied (publickey,password). 2024-07-04 17:27:07,550 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
      • 权限问题,原因是 ssh 没有为本机分发公钥,导致在本机上运行时没有权限
        • Starting namenodes on [anjhon] anjhon: root@anjhon: Permission denied (publickey,password). Starting datanodes anjhon: root@anjhon: Permission denied (publickey,password). anjhon2: datanode is running as process 48301. Stop it first and ensure /tmp/hadoop-root-datanode.pid file is empty before retry. anjhon3: datanode is running as process 123358. Stop it first and ensure /tmp/hadoop-root-datanode.pid file is empty before retry. Starting secondary namenodes [anjhon] anjhon: root@anjhon: Permission denied (publickey,password). 2024-07-04 18:36:56,276 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
      • 警告:表示 Hadoop 没有找到本地库,它会使用内置的 Java 类,这通常不会影响功能
        • 2024-07-04 18:36:56,276 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
  1. 启动hadoop的yarn集群,在node1执行即可
    1. start-yarn.sh # 如需停止可以执行 stop-yarn.sh
  1. 启动历史服务器
    1. mapred --daemon start historyserver # 如需停止将start更换为stop
  1. 启动web代理服务器
    1. yarn-daemon.sh start proxyserver # 如需停止将start更换为stop

验证Hadoop集群运行情况

  1. 在node1、node2、node3上通过jps验证进程是否都启动成功;node1 上运行了 7 个服务,node2 和 node3 上都只运行了两个
  1. 验证HDFS,浏览器打开:http://yourip:9870
    1. 创建文件test.txt,随意填入内容,并执行:
      hadoop fs -put test.txt /test.txt # 将数据文件上传到 hadoop 根目录 hadoop fs -ls / # 查看 hadoop 根目录文件 hadoop fs -cat /test.txt # 查看test.txt文件内容
  1. 验证YARN,浏览器打开:http://yourip:8088
    1. 执行:
      # 创建文件words.txt,填入如下内容 itheima itcast hadoop itheima hadoop hadoop itheima itcast # 将文件上传到HDFS中 hadoop fs -put words.txt /words.txt # 执行如下命令验证YARN是否正常 hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount -Dmapred.job.queue.name=root.root /words.txt /output

分布式内存计算Spark环境部署

Spark 基于Hadoop集群,所以需要先部署Hadoop集群

Spark简介

Spark是一款分布式内存计算引擎,可以支撑海量数据的分布式计算。Spark在大数据体系是明星产品,作为最新一代的综合计算引擎,支持离线计算和实时计算。在大数据领域广泛应用,是目前世界上使用最多的大数据分布式计算引擎。我们将基于前面构建的Hadoop集群,部署Spark Standalone集群。

Spark安装部署步骤

  1. 【node1执行】下载并解压
    1. 在这里寻找想要的版本:https://archive.apache.org/dist/spark/
      wget https://archive.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz       # 镜像网站 # wget https://archive.apache.org/dist/spark/spark-3.4.3/spark-3.4.3-bin-hadoop3.tgz         # 镜像网站 # wget https://www.apache.org/dyn/closer.lua/spark/spark-3.4.3/spark-3.4.3-bin-hadoop3.tgz   # 官方网站地址 # 解压 tar -zxvf spark-2.4.5-bin-hadoop2.7.tgz -C /export/server/ # 软链接 ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
  1. 【node1执行】修改配置文件名称
    1. # 改名 cd /export/server/spark/conf mv spark-env.sh.template spark-env.sh mv slaves.template slaves
  1. 【node1执行】修改配置文件,spark-env.sh
    1. ## 设置JAVA安装目录 JAVA_HOME=/export/server/jdk ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群 HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop YARN_CONF_DIR=/export/server/hadoop/etc/hadoop ## 指定spark老大Master的IP和提交任务的通信端口 export SPARK_MASTER_HOST=anjhon export SPARK_MASTER_PORT=7077 SPARK_MASTER_WEBUI_PORT=8080 SPARK_WORKER_CORES=1 SPARK_WORKER_MEMORY=1g
  1. 【node1执行】修改配置文件,slaves
    1. anjhon anjhon2 anjhon3
  1. 【node1执行】分发
    1. scp -r spark-2.4.5-bin-hadoop2.7 node2:$PWD scp -r spark-2.4.5-bin-hadoop2.7 node3:$PWD
  1. 【node2、node3执行】设置软链接
    1. ln -s /export/server/spark-2.4.5-bin-hadoop2.7 /export/server/spark
  1. 【node1执行】启动Spark集群
    1. /export/server/spark/sbin/start-all.sh # 如需停止,可以 /export/server/spark/sbin/stop-all.sh
  1. 打开Spark监控页面,浏览器打开:http://anjhon:8080
  1. 【node1执行】提交测试任务
    1. /export/server/spark/bin/spark-submit --master spark://anjhon:7077 --class org.apache.spark.examples.SparkPi /export/server/spark/examples/jars/spark-examples_2.11-2.4.5.jar

分布式内存计算Flink环境部署

Flink介绍

Flink同Spark一样,是一款分布式内存计算引擎,可以支撑海量数据的分布式计算。Flink在大数据体系同样是明星产品,作为最新一代的综合计算引擎,支持离线计算和实时计算。在大数据领域广泛应用,是目前世界上除去Spark以外,应用最为广泛的分布式计算引擎。
我们将基于前面构建的Hadoop集群,部署Flink Standalone集群。Spark更加偏向于离线计算而Flink更加偏向于实时计算。

Flink安装部署教程

  1. 【node1操作】下载安装包
    1. wget https://archive.apache.org/dist/flink/flink-1.10.0/flink-1.10.0-bin-scala_2.11.tgz # 解压 tar -zxvf flink-1.10.0-bin-scala_2.11.tgz -C /export/server/ # 软链接 ln -s /export/server/flink-1.10.0 /export/server/flink
  1. 【node1操作】修改配置文件,conf/flink-conf.yaml
    1. # jobManager 的IP地址 jobmanager.rpc.address: anjhon # JobManager 的端口号 jobmanager.rpc.port: 6123 # JobManager JVM heap 内存大小 jobmanager.heap.size: 1024m # TaskManager JVM heap 内存大小 taskmanager.heap.size: 1024m # 每个 TaskManager 提供的任务 slots 数量大小 taskmanager.numberOfTaskSlots: 2 #是否进行预分配内存,默认不进行预分配,这样在我们不使用flink集群时候不会占用集群资源 taskmanager.memory.preallocate: false # 程序默认并行计算的个数 parallelism.default: 1 #JobManager的Web界面的端口(默认:8081) jobmanager.web.port: 8081
  1. 【node1操作】,修改配置文件,conf/slaves
    1. anjhon anjhon2 anjhon3
  1. 【node1操作】分发Flink安装包到其它机器
    1. cd /export/server scp -r flink-1.10.0 node2:`pwd`/ scp -r flink-1.10.0 node3:`pwd`/
  1. 【node2、node3操作】
    1. # 配置软链接 ln -s /export/server/flink-1.10.0 /export/server/flink
  1. 【node1操作】,启动Flink
    1. /export/server/flink/bin/start-cluster.sh # 开启服务 /export/server/flink/bin/stop-cluster.sh # 关闭服务
  1. 验证Flink启动
    1. # 浏览器打开 http://node1:8081
  1. 提交测试任务
    1. 【node1执行】
      /export/server/flink/bin/flink run /export/server/flink-1.10.0/examples/batch/WordCount.jar

遇到问题

1、在 node1 上执行:/export/server/flink/bin/start-cluster.sh 后无法开启TaskManager,使用 jps 命令智能看到StandaloneSessionClusterEntrypoint任务在运行,在node2 和 node3 上也没有TaskManager任务。
  • 检查日志:cat /export/server/flink-1.10.0/log/flink-root-taskexecutor-0-anjhon.out.4
  • 日志内容:
    • Error: VM option 'UseG1GC' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions. Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
      日志提示Flink 在启动时尝试使用 UseG1GC 选项,但该选项是实验性的,需要通过 -XX:+UnlockExperimentalVMOptions 来启用。这种问题通常与 Java 版本有关。
  • 解决办法:
      1. 编辑 Flink 配置文件 flink-conf.yaml,添加或修改 env.java.opts 选项,启用实验性 VM 选项。其他节点上的文件也需要改
        1. 打开文件:vim /export/server/flink/conf/flink-conf.yaml
          修改或添加:env.java.opts: -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
      1. 如果 flink-conf.yaml 中的配置不起作用,也可以直接在 Flink 环境变量文件 flink-env.sh 中添加相关选项。其他节点上的文件也需要改
        1. 打开 Flink 环境变量文件:vim /export/server/flink/conf/flink-env.sh
          在文件中添加以下内容:export FLINK_ENV_JAVA_OPTS="-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC"
      1. 重启 Flink 集群
        1. /export/server/flink/bin/stop-cluster.sh /export/server/flink/bin/start-cluster.sh
           
If you have any questions, please contact me.