基于Docker和YARN的大数据环境部署实践最新版

基于Docker和YARN的大数据环境部署实践

目的

本操作手册旨在指导用户通过Docker容器技术,快速搭建一个完整的大数据环境。该环境包含以下核心组件:

  • Hadoop HDFS/YARN(分布式存储与资源调度)
  • Spark on YARN(分布式计算)
  • Kafka(消息队列)
  • Hive(数据仓库)
  • JupyterLab(交互式开发环境)

通过清晰的步骤说明和验证方法,读者将掌握:

  1. 容器网络的搭建(Weave)
  2. Docker Compose编排文件编写技巧
  3. 多组件协同工作的配置要点
  4. 集群扩展与验证方法

整体架构

spark-submit
资源分配
执行任务
生产/消费
读写数据
元数据查询
Jupyter
RM
NM1
DN1
Kafka
Spark
HDFS
Hive
MySQL

组件功能表

组件名称功能描述依赖服务端口配置数据存储
Hadoop NameNodeHDFS元数据管理9870 (Web UI), 8020Docker卷: hadoop_namenode
Hadoop DataNodeHDFS数据存储节点NameNode9864 (数据传输)本地卷或Docker卷
YARN ResourceManager资源调度与管理NameNode8088 (Web UI), 8032
YARN NodeManager单个节点资源管理ResourceManager8042 (Web UI)
Spark (YARN模式)分布式计算框架YARN ResourceManager集成在YARN中
JupyterLab交互式开发环境Spark, YARN8888 (Web UI)本地目录挂载
Kafka分布式消息队列ZooKeeper9092 (Broker)Docker卷:kafka_data、kafka_logs
Hive数据仓库服务HDFS, MySQL10000 (HiveServer2)MySQL存储元数据
MySQL存储Hive元数据3306Docker卷: mysql_data
ZooKeeper分布式协调服务(Kafka依赖)2181Docker卷:zookeeper_data

关键交互流程

  1. 数据存储

    • HDFS通过NameNode管理元数据,DataNode存储实际数据。
    • JupyterLab通过挂载本地目录访问数据,同时可读写HDFS。
  2. 资源调度

    • Spark作业通过YARN ResourceManager申请资源,由NodeManager执行任务。
  3. 数据处理

    • Kafka接收实时数据流,Spark消费后进行实时计算。
    • Hive通过HDFS存储表数据,元数据存储在MySQL。

环境搭建步骤

1. 容器网络准备(Weave)

# 安装Weave网络插件
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod +x /usr/local/bin/weave
# 启动Weave网络
weave launch
# 验证网络状态
weave status
#在其他节点上运行
weave launch 主节点IP

2. Docker Compose编排文件

创建 docker-compose.yml,核心配置如下:

version: "3.8"services:# ZooKeeperzookeeper-1:image: bitnami/zookeeper:3.8.0privileged: true  #使用二进制文件安装的docker需要开启特权模式,每个容器都需要开启该模式container_name: zookeeper-1hostname: zookeeper-1ports:- "2181:2181"environment:- ALLOW_ANONYMOUS_LOGIN=yes- TZ=Asia/Shanghaivolumes:- zookeeper_data:/bitnami/zookeepernetworks:- bigdata-netdns:- 172.17.0.1restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"# Kafkakafka-1:image: bitnami/kafka:3.3.1container_name: kafka-1hostname: kafka-1environment:- KAFKA_BROKER_ID=1- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-1:2181- ALLOW_PLAINTEXT_LISTENER=yes- TZ=Asia/Shanghaiports:- "9092:9092"volumes:- kafka_data:/bitnami/kafka    # Kafka数据持久化- kafka_logs:/kafka-logs  # 独立日志目录depends_on:- zookeeper-1networks:- bigdata-netdns:- 172.17.0.1restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"# Hadoop HDFShadoop-namenode:image: bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8container_name: hadoop-namenodehostname: hadoop-namenodeenvironment:- CLUSTER_NAME=bigdata- CORE_CONF_fs_defaultFS=hdfs://hadoop-namenode:8020- HDFS_CONF_dfs_replication=2- TZ=Asia/Shanghaiports:- "9870:9870"- "8020:8020"networks:- bigdata-netdns:- 172.17.0.1volumes:- hadoop_namenode:/hadoop/dfs/namerestart: alwayshadoop-datanode:image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8container_name: hadoop-datanodehostname: hadoop-datanodeenvironment:- CORE_CONF_fs_defaultFS=hdfs://hadoop-namenode:8020- HDFS_CONF_dfs_replication=2- TZ=Asia/Shanghaidepends_on:- hadoop-namenodenetworks:- bigdata-netdns:- 172.17.0.1restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"# YARNhadoop-resourcemanager:image: bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8container_name: hadoop-resourcemanagerhostname: hadoop-resourcemanagerports:- "8088:8088"  # YARN Web UIenvironment:- CORE_CONF_fs_defaultFS=hdfs://hadoop-namenode:8020- YARN_CONF_yarn_resourcemanager_hostname=hadoop-resourcemanager- TZ=Asia/Shanghaidepends_on:- hadoop-namenodenetworks:- bigdata-netdns:- 172.17.0.1restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"hadoop-nodemanager:image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8container_name: hadoop-nodemanagerhostname: hadoop-nodemanagerenvironment:- CORE_CONF_fs_defaultFS=hdfs://hadoop-namenode:8020- YARN_CONF_yarn_resourcemanager_hostname=hadoop-resourcemanager- TZ=Asia/Shanghaidepends_on:- hadoop-resourcemanagernetworks:- bigdata-netdns:- 172.17.0.1volumes:- ./hadoop-conf/yarn-site.xml:/etc/hadoop/yarn-site.xml  # 挂载主节点的Hadoop配置文件,用于上报内存与cpu核心数restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"# Hivehive:image: bde2020/hive:2.3.2container_name: hivehostname: hiveenvironment:- HIVE_METASTORE_URI=thrift://hive:9083- SERVICE_PRECONDITION=hadoop-namenode:8020,mysql:3306- TZ=Asia/Shanghaiports:- "10000:10000"- "9083:9083"depends_on:- hadoop-namenode- mysqlnetworks:- bigdata-netdns:- 172.17.0.1restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"# MySQLmysql:image: mysql:8.0container_name: mysqlenvironment:- MYSQL_ROOT_PASSWORD=root- MYSQL_DATABASE=metastore- TZ=Asia/Shanghaiports:- "3306:3306"networks:- bigdata-netdns:- 172.17.0.1volumes:- mysql_data:/var/lib/mysqlrestart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"# JupyterLab(集成Spark on YARN)jupyter:image: jupyter/all-spark-notebook:latestcontainer_name: jupyter-labenvironment:- JUPYTER_ENABLE_LAB=yes- TZ=Asia/Shanghai- SPARK_OPTS="--master yarn --deploy-mode client"  # 默认使用YARN模式- HADOOP_CONF_DIR=/etc/hadoop/conf  # 必须定义- YARN_CONF_DIR=/etc/hadoop/conf    # 必须定义ports:- "8888:8888"volumes:- ./notebooks:/home/jovyan/work- /path/to/local/data:/data- ./hadoop-conf:/etc/hadoop/conf  # 挂载Hadoop配置文件,./hadoop-conf代表在docker-compose.yml同目录下的hadoop-confnetworks:- bigdata-netdns:- 172.17.0.1depends_on:- hadoop-resourcemanager- hadoop-namenoderestart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "7"volumes:hadoop_namenode:mysql_data:zookeeper_data:kafka_data:kafka_logs:hadoop-nodemanager:networks:bigdata-net:external: truename: weave

Hadoop配置文件

yarn-site.xml:

<configuration><property><name>yarn.resourcemanager.hostname</name><value>hadoop-resourcemanager</value></property><property><name>yarn.resourcemanager.address</name><value>hadoop-resourcemanager:8032</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property>
</configuration>

core-site.xml:

<configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop-namenode:8020</value></property>
</configuration>

将这两个文件放置到hadoop-conf目录下。

3. 启动服务

# 启动容器
docker-compose up -d# 查看容器状态
docker-compose ps

4. 验证服务是否可用

验证HDFS
(1) 访问HDFS Web UI
  • 操作:浏览器打开 http://localhost:9870

  • 预期结果

    Overview 页面显示HDFS总容量。

    Datanodes 显示至少1个活跃节点(对应 hadoop-datanode 容器)。

(2) 命令行操作HDFS
docker exec -it hadoop-namenode bash
# 创建测试目录
hdfs dfs -mkdir /test
# 上传本地文件
echo "hello hdfs" > test.txt
hdfs dfs -put test.txt /test/
# 查看文件
hdfs dfs -ls /test
#解除安全模式
hdfs dfsadmin -safemode leave
  • 预期结果:成功创建目录、上传文件并列出文件。

如图所示:
在这里插入图片描述


** 验证YARN**
(1) 访问YARN ResourceManager Web UI
  • 操作:浏览器打开 http://localhost:8088
  • 预期结果
    • Cluster Metrics 显示总资源(如内存、CPU)。
    • Nodes 显示至少1个NodeManager(对应 hadoop-nodemanager 容器)。
(2) 提交测试作业到YARN
# 进入Jupyter容器提交Spark作业
docker exec -it jupyter-lab bash
# 提交Spark Pi示例作业
spark-submit --master yarn --deploy-mode client --class org.apache.spark.examples.SparkPi /usr/local/spark/examples/jars/spark-examples_*.jar 10
  • 预期结果
    • 作业输出中包含 Pi is roughly 3.14
    • 在YARN Web UI (http://localhost:8088) 中看到作业状态为 SUCCEEDED

如图所示:
在这里插入图片描述

若是出现报错:Permission denied: user=jovyan, access=WRITE, inode=“/user”:root:supergroup:drwxr-xr-x

报错原因:

当前运行 Spark 的用户是:jovyan(Jupyter 默认用户);

Spark 提交任务后,会自动尝试在 HDFS 上创建目录 /user/jovyan

但是:这个目录不存在,或者 /user 目录不允许 jovyan 写入;

所以 HDFS 拒绝创建临时目录,导致整个作业提交失败;

解决方法

创建目录并赋权

进入NameNode 容器:

docker exec -it hadoop-namenode bash

然后执行 HDFS 命令:

hdfs dfs -mkdir -p /user/jovyan
hdfs dfs -chown jovyan:supergroup /user/jovyan

这一步允许 jovyan 用户有权写入自己的临时目录。

提示:可以先执行 hdfs dfs -ls /user 看是否有 jovyan 子目录。


最后:再次执行 spark-submit 后,可以看到

  1. 控制台打印:

    Submitting application application_xxx to ResourceManager
    
  2. YARN 8088 页面:

    • 出现作业记录;
    • 状态为 RUNNINGFINISHED
验证Spark on YARN(通过JupyterLab)
(1) 访问JupyterLab
  • 操作:浏览器打开 http://localhost:8888,使用Token登录(通过 docker logs jupyter-lab 获取Token)。
  • 预期结果:成功进入JupyterLab界面。
(2) 运行PySpark代码

在Jupyter中新建Notebook,执行以下代码:

from pyspark.sql import SparkSession
spark = SparkSession.builder \.appName("jupyter-yarn-test") \.getOrCreate()# 测试Spark Context
print("Spark Version:", spark.version)
print("YARN Cluster Mode:", spark.sparkContext.master)# 读取HDFS文件
df = spark.read.text("hdfs://hadoop-namenode:8020/test/test.txt")
df.show()# 读取数据
local_df = spark.read.csv("/data/example.csv", header=True)  # 替换为实际文件路径
local_df.show()
  • 预期结果
    • 输出Spark版本和YARN模式(如 yarn)。
    • 成功读取HDFS文件并显示内容 hello hdfs
    • 成功读取CSV文件(需提前放置测试文件)。

如图所示:
在这里插入图片描述

验证Hive
(1) 创建Hive表并查询
#使用docker cp命令将jdbc驱动放入容器内部,示例:
docker cp mysql-connector-java-8.0.12.jar 容器ID或容器名称:/opt/hive/lib
docker exec -it hive bash
#重新初始化 Hive Metastore
schematool -dbType mysql -initSchema --verbose
#查询MetaStore运行状态
ps -ef | grep MetaStore
# 启动Hive Beeline客户端
beeline -u jdbc:hive2://localhost:10000 -n root

//驱动下载链接:https://downloads.mysql.com/archives/c-j/

若是执行上述命令报错,可以按照以下步骤来进行更改

1、配置hive-site.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?><!--Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements.  See the NOTICE file distributed withthis work for additional information regarding copyright ownership.The ASF licenses this file to You under the Apache License, Version 2.0(the "License"); you may not use this file except in compliance withthe License.  You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License.
--><configuration>
<property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://192.168.0.78:3306/metastore_db?createDatabaseIfNotExist=true</value><description>JDBC connect string for a JDBC metastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.cj.jdbc.Driver</value></property> <property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>root</value></property><!-- Metastor-->rash<property> <name>hive.metastore.uris</name><value>thrift://localhost:9083</value></property><property><name>hive.metastore.warehouse.dir</name><value>/user/hive/warehouse</value></property><property><name>hive.server2.thrift.bind.host</name><value>0.0.0.0</value></property><property><name>hive.server2.thrift.port</name><value>10000</value></property></configuration>

//将此配置使用docker cp命令拷贝至hive容器内的/opt/hive/conf目录下。

2、配置core-site.xml文件:

<?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 athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed 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 andlimitations under the License. See accompanying LICENSE file.
--><!-- Put site-specific property overrides in this file. --><configuration>
<property><name>fs.defaultFS</name><value>hdfs://hadoop-namenode:8020</value></property>
</configuration>

//hadoop-namenode容器IP可以在宿主机执行weave ps 命令获取,配置文件修改完毕后通过docker cp命令将文件拷贝至hive容器内的/opt/hadoop-2.7.4/etc/hadoop目录与/opt/hive/conf目录。

启动metastore

#在hive容器内部执行
hive --service metastore &

启动hiveserver2

#在hive容器内部执行(执行此命令需要先关闭hadoo-namenode的安全模式)
hive --service hiveserver2 --hiveconf hive.root.logger=DEBUG,console

执行HQL:

CREATE TABLE test_hive (id INT, name STRING);
INSERT INTO test_hive VALUES (1, 'hive-test');
SELECT * FROM test_hive;
  • 预期结果:输出 1, hive-test
(2) 验证MySQL元数据
docker exec -it mysql mysql -uroot -proot
use metastore_db;
SELECT TBL_NAME FROM TBLS;
  • 预期结果:显示 test_hive 表名。

如图所示:
在这里插入图片描述

验证Kafka
(1) 生产与消费消息
docker exec -it kafka-1 bash
# 创建主题
kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092
# 生产消息
echo "hello kafka" | kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092
# 消费消息(需另开终端)
kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092
  • 预期结果:消费者终端输出 hello kafka

如图所示:
在这里插入图片描述

** 验证本地数据挂载**

在JupyterLab中:

  1. 左侧文件浏览器中检查 /home/jovyan/work(对应本地 ./notebooks 目录)。
  2. 检查 /data 目录是否包含本地挂载的文件(例如 /path/to/local/data 中的内容)。
子节点设置
version: "3.8"services:# HDFS DataNode 服务hadoop-datanode:image: bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8privileged: true  #使用二进制文件安装的docker需要开启特权模式,每个容器都需要开启该模式container_name: hadoop-datanode-2  # 子节点容器名称唯一(例如按编号命名)hostname: hadoop-datanode-2environment:- CORE_CONF_fs_defaultFS=hdfs://hadoop-namenode:8020  # 指向主节点NameNode- HDFS_CONF_dfs_replication=2- TZ=Asia/Shanghainetworks:- bigdata-netdns:- 172.17.0.1volumes:- ./hadoop-conf:/etc/hadoop/conf  # 挂载主节点的Hadoop配置文件restart: always
#    extra_hosts:
#      - "hadoop-namenode:10.32.0.32"logging:driver: "json-file"options:max-size: "100m"max-file: "5"# YARN NodeManager 服务hadoop-nodemanager:image: bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8privileged: true  #使用二进制文件安装的docker需要开启特权模式,每个容器都需要开启该模式container_name: hadoop-nodemanager-2  # 子节点容器名称唯一hostname: hadoop-nodemanager-2environment:- YARN_CONF_yarn_resourcemanager_hostname=hadoop-resourcemanager  # 指向主节点ResourceManager- CORE_CONF_fs_defaultFS=hdfs://hadoop-namenode:8020- TZ=Asia/Shanghainetworks:- bigdata-netdns:- 172.17.0.1volumes:- ./hadoop-conf/yarn-site.xml:/etc/hadoop/yarn-site.xml  # 挂载主节点的Hadoop配置文件,用于上报内存与cpu核心数depends_on:- hadoop-datanode  # 确保DataNode先启动(可选)restart: alwayslogging:driver: "json-file"options:max-size: "100m"max-file: "5"# 共享网络配置(必须与主节点一致)
networks:bigdata-net:external: truename: weave  # 使用主节点创建的Weave网络

yarn配置文件

<configuration><property><name>yarn.resourcemanager.hostname</name><value>hadoop-resourcemanager</value></property><property><name>yarn.resourcemanager.address</name><value>hadoop-resourcemanager:8032</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><name>yarn.nodemanager.resource.memory-mb</name><value>4096</value></property><property><name>yarn.nodemanager.resource.cpu-vcores</name><value>8</value></property>
</configuration>

Ps:内存大小和cpu核心数需要按照实际情况填写。
#######################################################################################
今日推荐
小说:《异种的营养是牛肉的六倍?》
简介:【异种天灾】+【美食】+【日常】 变异生物的蛋白质是牛肉的几倍? 刚刚来到这个世界,刘笔就被自己的想法震惊到了。 在被孢子污染后的土地上觉醒了神厨系统,是不是搞错了什么?各种变异生物都能做成美食吗? 那就快端上来罢! 安全区边缘的特色美食饭店,有点非常规的温馨美食日常。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式之中介者模式详解

Java设计模式之中介者模式详解 一、中介者模式核心思想 核心目标&#xff1a;通过中介对象封装一组对象间的交互&#xff0c;将网状的对象关系转变为星型结构。如同机场控制塔协调所有飞机的起降&#xff0c;避免飞机之间直接通信导致的混乱。 二、中介者模式类图&#xff08;…

ArcGIS应用指南:基于网格与OD成本矩阵的交通可达性分析

随着城市化进程的加速,交通系统的效率和公平性日益成为影响居民生活质量的关键因素之一。在这一背景下,如何科学评估城市区域内的交通可达性,成为了城市规划、交通管理和公共政策制定中的重要议题。作为中国东南沿海的重要港口城市,厦门以其独特的地理优势和快速的城市发展…

基于NXP例程学习CAN UDS刷写流程

文章目录 前言1.概述1.1 诊断报文 2.协议数据单元(N_PDU)2.1 寻址信息&#xff08;N_AI&#xff09;2.1.1 物理寻址2.1.2 功能寻址2.1.3 常规寻址&#xff08;Normal addressing&#xff09;2.1.4 常规固定寻址&#xff08;Normal fixed addressing&#xff09;2.1.5 扩展寻址&…

近期手上的一个基于Function Grap(类AWS的Lambda)小项目的改造引发的思考

函数式Function是云计算里最近几年流行起来的新的架构和模式&#xff0c;因为它不依赖云主机&#xff0c;非常轻量&#xff0c;按需使用&#xff0c;甚至是免费使用&#xff0c;特别适合哪种数据同步&#xff0c;数据转发&#xff0c;本身不需要保存数据的业务场景&#xff0c;…

什么是 SQL 注入?如何防范?

什么是 SQL 注入?如何防范? 1. SQL 注入概述 1.1 基本定义 SQL 注入(SQL Injection)是一种通过将恶意SQL 语句插入到应用程序的输入参数中,从而欺骗服务器执行非预期SQL命令的攻击技术。攻击者可以利用此漏洞绕过认证、窃取数据甚至破坏数据库。 关键结论:SQL 注入是O…

高德地图应用OceanBase单元化构建下一代在线地图服务

IEEE International Conference on Data Engineering (ICDE) 是数据库和数据工程领域的顶级学术会议之一&#xff08;与SIGMOD、VLDB并成为数据库三大顶会&#xff09;&#xff0c;自1984年首次举办以来&#xff0c;每年举办一次。ICDE涵盖广泛的主题&#xff0c;包括数据库系统…

Vue3中Element-Plus中el-input及el-select 边框样式

如果不需要显示下边框&#xff0c;纯无边框直接将 【border-bottom: 1px solid #C0C4CC; 】注掉或去掉即可。 正常引用组件使用即可&#xff0c;无须自定义样式&#xff0c;最终效果CSS样式。 <style scoped> /* 输入框的样式 */ :deep(.el-input__wrapper) { box-sha…

如何做好一份技术文档:从信息孤岛到知识图谱的进阶之路

如何做好一份技术文档&#xff1a;从信息孤岛到知识图谱的进阶之路 在软件开发的漫长征程中&#xff0c;技术文档如同隐藏在代码丛林中的路标&#xff0c;不仅指引着开发团队的前行方向&#xff0c;更在产品迭代的岁月里构筑起知识传承的桥梁。一份优质的技术文档&#xff0c;既…

Docker Compose使用自定义用户名密码启动Redis

通常我们使用下面的命令来启动 redis 容器&#xff0c;此时连接 Redis 的时候是不需要用户认证的 sudo docker run -d --name my-redis -p 6379:6379 redis此时我们可以使用 redis-server --requirepass "mypassword" 来指定默认用户&#xff08;default&#xff09…

1.什么是node.js、npm、vue

一、Node.js 是什么&#xff1f; &#x1f63a; 定义&#xff1a; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;让你可以在浏览器之外运行 JavaScript 代码&#xff0c;主要用于服务端开发。 &#x1f63a;从计算机底层说&#xff1a;什么是“运…

如何在 Vue.js 中集成 Three.js —— 创建一个旋转的 3D 立方体

在这篇文章中&#xff0c;我将向大家展示如何将 Three.js 与 Vue.js 结合&#xff0c;创建一个简单的 3D 场景&#xff0c;并展示一个旋转的立方体。通过这个简单的示例&#xff0c;你将学习到如何在 Vue 项目中集成 Three.js&#xff0c;以及如何创建动态的 3D 内容。 1. 安装…

DeepSeek‑R1-0528 重磅升级:蚂蚁百宝箱免费、无限量调用

DeepSeek‑R1-0528 重磅升级&#xff1a;蚂蚁百宝箱免费、无限量调用 端午假期前一天&#xff0c;DeepSeek‑R1 更新到了 0528 版本&#xff01; 官方说明&#xff1a;0528 版本在深度思考与推理能力方面显著增强——在数学、编程与通用逻辑等多项基准测评中&#xff0c;表现已…

RS232转Profinet网关在检漏仪与西门子PLC里的应用

RS232转Profinet网关在检漏仪与西门子PLC里的应用 在工业自动化和控制领域&#xff0c;设备间的高效通信至关重要。RS232转Profinet网关作为一种关键的转换工具&#xff0c;能够将传统的RS232接口设备接入现代化的Profinet网络&#xff0c;从而实现数据的无缝传输和设备的远程…

jenkins-jenkins简介

一、简介 jenkins是一个可扩展的持续集成引擎。持续集成&#xff0c;也就是通常所说的CI&#xff08;Continues Integration&#xff09;&#xff0c;可以说是现代软件技术开发的基础。持续集成是一种软件开发实践&#xff0c; 即团队开发成员经常集成他们的工作&#xff0c;通…

vue发版html 生成打包到docker镜像进行发版

将Vue项目打包成Docker镜像部署主要分为以下几个步骤&#xff1a; 1. Vue项目打包‌ 执行npm run build生成dist文件夹&#xff0c;包含静态资源文件 注意检查index.html中资源引用路径是否正确&#xff08;避免绝对路径问题&#xff09; 2. 编写Dockerfile Copy Code FROM…

扫地机器人苦寻新引擎,大疆们却已攻入腹地

原创 科技新知 前沿科技组 作者丨江篱 编辑丨樱木、九黎 竞争激烈的扫地机器人赛道&#xff0c;迎来了新玩家。 据近日相关报道&#xff0c;大疆扫地机器人产品已开始量产&#xff0c;预计将于6月份发布。消息称大疆研发扫地机器人已超过四年&#xff0c;即将上市的产品是扫…

【C++】22. 红黑树封装实现Mymap和Myset

上一章节我们实现了红黑树&#xff0c;这一章节我们就用红黑树封装来实现一个我们自己的map和set 1. 源码及框架分析 SGI-STL 3.0版本的源代码中&#xff0c;map和set的实现主要分布在若干头文件中&#xff0c;这些头文件构成了这两个容器的完整实现架构&#xff1a; 核心头文…

02_redis分布式锁原理

文章目录 一、redis如何实现分布式锁1. 使用 SETNX 命令2. 设置过期时间3. 释放锁4. 注意事项5. 示例代码二、Java中分布式锁如何设置超时时间1. Redis分布式锁2. 基于Zookeeper的分布式锁3. 基于数据库的分布式锁注意事项一、redis如何实现分布式锁 Redis 实现分布式锁是一种…

酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法

酷派Cool系列主打低端市场&#xff0c;系统无任何GMS程序&#xff0c;也不支持直接开启或者安装谷歌服务等功能&#xff0c;对于国内部分经常使用谷歌服务商店的小伙伴非常不友好。涉及机型有酷派Cool20/Cool20S /30/40/50/60等旗下多个设备。好在这些机型运行的系统都是安卓11…

技术为器,服务为本:AI时代的客服价值重构

在智能化浪潮中&#xff0c;大语言模型的出现为客户服务行业注入了全新动能。然而技术创新的价值不在于技术本身&#xff0c;而在于其赋能服务的深度与广度。AI对于我们来说&#xff0c;如同发动机之于汽车&#xff0c;重要的不是引擎参数&#xff0c;而是整车带给用户的驾驶体…