大数据处理从零开始————3.Hadoop伪分布式和分布式搭建
1.伪分布式搭建(不会用,了解就好不需要搭建)
这里接上一节。
1.1 伪分布式集群概述
伪分布式集群就是只有⼀个服务器节点的分布式集群。在这种模式中,我们也是只需要⼀台机器。 但与本地模式不同,伪分布式采⽤了分布式的思想,具有完整的分布式⽂件存储和分布式计算的特 点。在进⾏存储和计算时,将涉及到的相关守护进程都运⾏在同⼀台机器上,它们都是独⽴的 Java进程,因⽽称为“伪分布式集群”。 伪分布式集群模式,⽐本地模式多了代码调试功能,允许检查内存的使⽤、HDFS输⼊输出、以及 其他的守护进程交互情况。
1.2 关闭selinux
把selinux关闭掉,这是Linux系统的⼀个安全机制,可以进⼊⽂件中将SELINUX设置为 disabled。
vim /etc/selinux/config
把代码中SELINUX修改或添加为:
SELINUX=disabled
1.3 修改配置⽂件
cd /opt/module/hadoop/etc/hadoop/
ll #查看目录文件
下面这些文件都会有。
1.3.1 core-site.xml⽂件(记住修改下方主机名)
<configuration> <!-- 设置namenode节点 --> <!-- 注意: hadoop1.x时代默认端口是9000;hadoop2.x时代默认端口是8020; hadoop3.x时代默认端口是9820 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop100:9820</value> </property> <!-- hdfs的基础路径,被其他属性所依赖的一个基础路径 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop/tmp</value> </property>
</configuration>
1.3.2 hdfs-site.xml⽂件(记住修改下方主机名)
<configuration><property><name>dfs.replication</name><value>1</value></property><!-- secondarynamenode守护进程的http地址:主机名和端口号。参考守护进程布局 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop100:9868</value></property><!-- namenode守护进程的http地址:主机名和端口号。参考守护进程布局 --><property><name>dfs.namenode.http-address</name><value>hadoop100:9870</value></property>
</configuration>
1.3.3 hadoop-env.sh⽂件(记住修改下方主机名)
export JAVA_HOME=/opt/module/jdk# Hadoop3中,需要添加如下配置,设置启动集群⻆⾊的⽤户是哪个。
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
1.4 格式化集群
要注意,如果我们在core-site.xml中配置过hadoop.tmp.dir路径,在集群格式化时要保证这个路 径不存在!如果之前存在过数据,要先将其删除,再进⾏格式化!
hdfs namenode -format
执⾏效果如下图所示:(注意对比下方点)
1.5 启动集群
start-dfs.sh
执⾏该命令后,⼀般会有如下提示:(这个一个不能少)!!!
Starting namenodes on [MyBigData]
Starting datanodes
Starting secondary namenodes [MyBigData]
1.6 查看进程
jps
执⾏该命令后,⼀般会有如下提示:(这个一个不能少)!!!
11090 Jps
10595 NameNode
10938 SecondaryNameNode
10763 DataNode
1.7 启动WebUI界⾯
Hadoop伪集群模式给我们提供了⼀个WebUI界⾯,我们可以在浏览器中输⼊虚拟机的IP地址。如 果我们做过主机名映射,也可以直接使⽤主机名,⽐如http://192.168.10.100:9870。
1.8 演示案例-统计单词个数
1.8.1 准备数据
接下来我们准备⼀些数据,在hadoop⽂件夹下创建⼀个myinput⽬录并进⼊。
mkdir myinput && cd myinput
然后在该⽬录下创建两个file⽂件,并在其中输⼊⼀些内容:
echo "hello world hadoop linux hadoop" >> file1
echo "hadoop linux hadoop linux hello" >> file1
echo "hadoop linux mysql linux hadop" >> file1
echo "hadoop linux hadoop linux hello" >> file1
echo "linux hadoop good programmer" >> file2
echo "good programmer yyg good" >> file2
1.8.2 上传集群
接下来我们需要将数据⽂件file1和file2上传到集群,以后我们再进⾏任务处理的数据就是HDFS数 据,不是Linux本地存储的了。
hdfs dfs -put ./myinput/ /
# 检查是否已经上传成功
hdfs dfs -ls -R /
执⾏结果⼀般如下所示:
1.8.3 执⾏任务
我们切换到⾃⼰的hadoop⽬录下,在该⽬录中执⾏如下命令:
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount ./myinput ./myoutput
在运⾏该命令时,也可能会出现以下问题:
以上问题则表明我们的Hadoop服务器虽然启动成功,但缺少了⼀个/user/root/input⽂件夹,我 们可以⼿动创建出来。
解决过程如下:
# 确认该路径是否存在hdfs dfs -ls /user/root/input
如果该路径确实不存在,则创建之:
# 创建input⽂件夹
hdfs dfs -mkdir -p /user/root/input
# 将file1和file2中的⽂件put到input中
[root@hd01 hadoop]# hdfs dfs -put ./input/file* /user/root/input
接着我们重新执⾏如下命令即可:
# hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount ./input ./output
2.完全分布式搭建(需要做!!!)
2.1 完全分布式概述
在真实的企业环境中,服务器集群会使⽤到多台机器共同配合,来构建⼀个完整的分布式⽂件系 统。⽽在这样的分布式⽂件系统中,HDFS相关的守护进程也会分布在不同的机器上,例如:
● NameNode守护进程,尽可能单独部署在⼀台硬件性能较好的机器中;
● 其他每台机器上都会部署⼀个DataNode守护进程,⼀般的硬件环境即可;
● SecondaryNameNode的守护进程最好不要和NameNode在同⼀台机器上。
2.2 集群规划部署
2.3 配置集群核⼼⽂件
2.3.1 core-site.xml⽂件
[root@hd01 ~]# cd $HADOOP_HOME/etc/hadoop
[root@hd01 hadoop]# vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定NameNode的地址 --><property><name>fs.defaultFS</name><value>hdfs://hd01:8020</value></property><!-- 指定hadoop数据的存储目录 --><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop/tmp</value></property><!-- 配置HDFS网页登录使用的静态用户为root --><property><name>hadoop.http.staticuser.user</name><value>root</value></property>
</configuration>
2.3.2 hdfs-site.xml⽂件
打开该⽂件:
[root@hd01 hadoop]# vim hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> <!-- nn web端访问地址 --> <property> <name>dfs.namenode.http-address</name> <value>hd01:9870</value> </property> <!-- 2nn web端访问地址,注意这的机器名称是hd03!!!--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hd03:9868</value> </property>
</configuration>
2.3.3 yarn-site.xml⽂件
打开yarn-site.xml:
[root@hd01 hadoop]# vim yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration> <!-- 指定MR⾛shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定ResourceManager的地址, 注意这⾥的机器名称是hd02!!!--> <property> <name>yarn.resourcemanager.hostname</name> <value>hd02</value> </property> <!-- 环境变量的继承 --> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property> <!-- 不验证虚拟内存⼤⼩ --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> <description>Whether virtual memory limits will be enforced for containers</description> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>4</value> <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description> </property>
</configuration>
2.3.4 mapred-site.xml⽂件
[root@hd01 hadoop]# vim mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration><!-- 指定MapReduce程序运行在Yarn上 --><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
2.3.5 hadoop-env.sh⽂件
[root@hd01 hadoop]# vim hadoop-env.sh
增加如下内容:!!!!这里是增加
export JAVA_HOME=/opt/module/jdk# Hadoop3中,需要添加如下配置,设置启动集群⻆⾊的⽤户是谁
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.3.6 works⽂件
打开works⽂件:
root@hd01 hadoop]# vim /opt/module/hadoop/etc/hadoop/workers
hd01
hd02
hd03
注意: 该⽂件中添加的内容,其结尾不允许有空格,⽂件中不允许有空⾏!
2.3.7 分发配置⽂件
在配置好了以上核⼼⽂件之后,我们要在集群上分发配置好的这些Hadoop配置⽂件。
[root@hd01 hadoop]# xsync /opt/module/hadoop/etc/hadoop/
2.4 格式化集群
如果集群是第⼀次启动,需要在hd01节点上格式化NameNode。
[root@hd01 hadoop]# hdfs namenode -format
2.5 集群启动⽅式
在这⾥启动的⽅式有两种,⼀种是⼀个节点⼀个节点的启动,⼀种是 编写⼀个启动脚本
2.5.1 单节点启动/关闭⽅式
1 启动HDFS
[root@hd01 hadoop]# /opt/module/hadoop/sbin/start-dfs.sh
2. 启动YARN
我们可以在在配置了ResourceManager的节点(hd02)上启动yarn:
[root@hd02 hadoop]# /opt/module/hadoop/sbin/start-yarn.sh
启动节点后,我们就可以在Web端查看HDFS的NameNode了。我们在浏览器中输⼊: http://192.168.10.104:9870。然后我们查看Datanodes选项下,看看启动的个数是否为3,不为 3则说明环境配置有问题。
我 们 也 可 以 在 Web 端 查 看 YARN 的 ResourceManager , 在 浏 览 器 中 输 ⼊ : http://192.168.10.105:8088。查看⾸⻚Active Nodes是否为3,不为3则说明环境配置有问题。
3. 关闭单节点
我们可以将各个模块分开启动,也可以分开停⽌,前提是⼤家已经配置了ssh。
# 停⽌HDFS
[root@hd01 ~]# stop-dfs.sh
#停⽌YARN
start-yarn.sh/stop-yarn.sh
或者我们将各个服务组件逐⼀启动/停⽌。
# 分别启动/停⽌HDFS组件
[root@hd01 ~]# hdfs --daemon start/stop namenode/datanode/secondarynamenode
# 启动/停⽌YARN
[root@hd01 ~]# yarn --daemon start/stop resourcemanager/nodemanager
2.5.2 脚本启动⽅式(重点)
如果我们⼀个节点⼀个节点的启动,会很麻烦,后续进⾏关闭时更麻烦,所以⽐较好的启动与关闭 ⽅式是编写⼀个启动和关闭脚本。
1.编写脚本
我们先编写⼀个Hadoop集群的启停脚本,包含HDFS、Yarn、Historyserver,脚本⽂件名为 myhadoop.sh。
[root@hd01 ~]# cd /root
[root@hd01 ~]# vim myhadoop.sh
#!/bin/bash if [ $# -lt 1 ]; then echo "No Args Input..." exit
fi case $1 in "start") echo " =================== 启动 hadoop集群 ===================" echo " --------------- 启动 hdfs ---------------" ssh hd01 "/opt/module/hadoop/sbin/start-dfs.sh" echo " --------------- 启动 yarn ---------------" ssh hd02 "/opt/module/hadoop/sbin/start-yarn.sh" ;; "stop") echo " =================== 关闭 hadoop集群 ===================" echo " --------------- 关闭 yarn ---------------" ssh hd02 "/opt/module/hadoop/sbin/stop-yarn.sh" echo " --------------- 关闭 hdfs ---------------" ssh hd01 "/opt/module/hadoop/sbin/stop-dfs.sh" ;; *) echo "Input Args Error..." ;;
esac
2. 添加执⾏权限
chmod +x myhadoop.sh
3 关闭/开启所有hadoop进程
# 停⽌集群
[root@hd01 ~]# ./myhadoop.sh stop
# 开启集群
[root@hd01 ~]# ./myhadoop.sh start
2.6 编写查看集群进程的脚本
我们通常是通过jps命令来查看hadoop的进程。
# 查看单个进程
[root@hd01 ~]# jps
1. 编写脚本
这种⽅式只能查看单个节点上的进程,并不是很⽅便,我们可以编写⼀个⽤来查看集群进程的脚 本。我们先创建⼀个jpsall⽂件:
[root@hd01 ~]# vim jpsall
#!/bin/bash for host in hd01 hd02 hd03; do echo "=============== $host ===============" ssh "$host" jps
done
2. 添加执⾏权限
保存后退出,然后赋予该脚本执⾏权限。
[root@hd01 bin]# chmod +x jpsall
3. 查看进程
[root@hd01 bin]# ./jpsall
2.7 分发脚本
最后,我们把上⾯编写的脚本进⾏分发,以保证⾃定义的脚本可以在三台机器上都能使⽤。
[root@hd01 ~]# xsync /root/myhadoop.sh
[root@hd01 ~]# xsync /root/jpsall
2.8 集群测试
2.8.1 上传⽂件到集群
1.上传⼩⽂件
[root@hd01 ~]# hadoop fs -mkdir /input
[root@hd01 ~]# hadoop fs -put $HADOOP_HOME/wcinput/word.txt /input
2. 上传⼤文件
[root@hd01 ~]# hadoop fs -put /opt/software/jdk-8u421-linux-x64.tar.gz /
2.8.2 查看结果
上传⽂件后,我们可以来查看⽂件存放在什么位置。查看HDFS⽂件的存储路径,标红部分每台电 脑可能不同,需要根据实际情况修改。
[root@hd01 ~]# cd /opt/module/hadoop/tmp/dfs/data/current/BP-35375740-192.168.10.104-1726820702869
这个文件:BP-35375740-192.168.10.104-1726820702869 每个机器不一样需要自己转到相应这个位置,进入后接着下一步。进入下放完整路径。
[root@hd01 subdir0]# pwd
/opt/module/hadoop/tmp/dfs/data/current/BP-35375740-192.168.10.104-1726820702869/current/finalized/subdir0/subdir0
2.8.3 拼接⽂件
我们可以利⽤hadoop中的命令,将多个⽂件拼接在⼀起,⽐如:
# ⽐如现在有如下多个⽂件:
总用量 144424
-rw-r--r--. 1 root root 49 9月 20 17:13 blk_1073741825
-rw-r--r--. 1 root root 11 9月 20 17:13 blk_1073741825_1001.meta
-rw-r--r--. 1 root root 134217728 9月 20 17:15 blk_1073741826
-rw-r--r--. 1 root root 1048583 9月 20 17:15 blk_1073741826_1002.meta
-rw-r--r--. 1 root root 12512099 9月 20 17:15 blk_1073741827
-rw-r--r--. 1 root root 97759 9月 20 17:15 blk_1073741827_1003.meta
# 我们可以将其拼接在⼀起
[root@hd01 subdir0]# cat blk_1073741826>>tmp.tar.gz
[root@hd01 subdir0]# cat blk_1073741827>>tmp.tar.gz
[root@hd01 subdir0]# tar -zxvf tmp.tar.gz
2.8.4 下载⽂件
[root@hd01 ~]# hadoop fs -get /jdk-8u212-linux-x64.tar.gz ./
2.8.5 执⾏wordcount程序
[root@hd01 ~]# cd /opt/module/hadoop
[root@hd01 hadoop]# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
[root@hd01 hadoop]# cat wcoutput/part-r-00000
2.9 统计单词格式
2.9.1 准备数据
[root@hd01 hadoop]# cd /root
[root@hd01 ~]# mkdir input && cd input
[root@hd01 input]# echo "hello world hadoop linux hadoop" >> file1
[root@hd01 input]# echo "hadoop linux hadoop linux hello" >> file1
[root@hd01 input]# echo "hadoop linux mysql linux hadop" >> file1
[root@hd01 input]# echo "hadoop linux hadoop linux hello" >> file1
[root@hd01 input]# echo "linux hadoop programmer" >> file2
[root@hd01 input]# echo "programmer jiayadong good" >> file2
2.9.2 上传到集群
# 将数据上传到HDFS
[root@hd01 input]# hdfs dfs -put ~/input/ /
# 检查是否已经上传成功
[root@hd01 input]# hdfs dfs -ls -R /
drwxr-xr-x - root supergroup 0 2022-01-28 13:11 /input
-rw-r--r-- 1 root supergroup 127 2022-01-28 13:11 /input/file1
-rw-r--r-- 1 root supergroup 59 2022-01-28 13:11 /input/file2
2.9.3 执⾏任务
hdfs dfs -rm -r /outputhadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.3.jar wordcount /input /output
相关文章:

大数据处理从零开始————3.Hadoop伪分布式和分布式搭建
1.伪分布式搭建(不会用,了解就好不需要搭建) 这里接上一节。 1.1 伪分布式集群概述 伪分布式集群就是只有⼀个服务器节点的分布式集群。在这种模式中,我们也是只需要⼀台机器。 但与本地模式不同,伪分布式采⽤了分布式…...

跟着问题学12——GRU详解
1 GRU 1. 什么是GRU GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆 和反向传播中的梯度等问题…...

内核是如何接收网络包的
1、数据如何从网卡到网络协议栈 1.1内核收包的过程 1、数据帧从外部网络到达网卡 2、网卡把数据帧从自己的缓存DMA(拷贝到)和内核共有的RingBuffer上 3、网卡发出硬中断通知CPU 4、CPU响应硬中断,简单处理后发出软中断 5、k’softirqd线程处理软中断,调…...

计算机毕业设计之:基于微信小程序的电费缴费系统(源码+文档+讲解)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

【leetcode】环形链表、最长公共前缀
题目:环形链表 解法一:哈希表 创建一个哈希表,遍历链表先判断哈希表中是否含有要放入哈希表中的节点,如果该节点已在哈希表中出现那么说明该链表是环形的;如果链表节点出现nullptr那么就退出循环,该链表是…...

C#开发记录如何建立虚拟串口,进行串口通信,以及通信模板
记录时间;2024年4月 记录如何开启虚拟串口以及进行基础串口通信。 建立虚拟串口 使用的软件是vspd,建立虚拟串口之后就可以将他们当成实际物理连接的两个串口进行通信。 之后使用我们之前给出的通信模板,建立一个稍微规矩一点的界面。 界面建立 其中…...

电源设计的艺术:从底层逻辑到工程实践
在电子工程的世界里,电源设计是核心中的核心。它不仅是电子设备的能量源泉,更是整个系统稳定运行的基石。随着科技的不断进步,电源设计的要求也越来越高,从效率、稳定性到体积、成本,每一个维度都是工程师们不断追求的…...

软媒市场新探索:软文媒体自助发布,开启自助发稿新篇章
在繁华喧嚣的软媒市场中,每一个声音都在竭力呼喊,每一个品牌都在奋力展现。而软文,作为一种温柔而坚韧的营销力量,正逐渐崭露头角。特别是软文媒体自助发布平台的出现,更是为企业提供了一个全新的、高效的自助发稿渠道。 软媒市场自助发布平台,正如其名,是一个让企业能够自主发…...

【Kubernetes】常见面试题汇总(二十七)
目录 77.假设公司希望在不同的云基础架构上运行各种工作负载,从裸机到公共云。公司将如何在不同界面的存在下实现这一目标? 78.什么是 Google 容器引擎? 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题。 题目 69-1…...

基于单片机巡迹避障智能小车系统
文章目录 前言资料获取设计介绍设计程序具体实现截图设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们…...

Python163邮箱发送:提升发送效率的技巧?
python163邮箱发送邮件教程?python怎么使用163邮箱? Python163邮箱发送作为一种自动化邮件发送方式,越来越受到开发者和企业的青睐。AokSend将探讨如何通过多种技巧提升Python163邮箱发送的效率,从而更好地满足用户需求。 Pytho…...

springboot中的异步任务
在springboot项目中可以通过EnableAsyncAsync的方式简化异步操作,下文使用springboot:3.2.1 源码分析 若一个bean中的公共方法上标注了Async,在系统启动时,会给这个类创建一个代理对象,并将该代理对象作为bean注册到spring容器中 …...

Linux学习笔记8 理解Ubuntu网络管理,做自己网络的主人
本文讲解了Ubuntu下网络由什么管理,介绍了临时ip和路由的设置方法,介绍了静态持久化网络配置的方法以及各网络管理软件之间的关系。 来看看Ubuntu网络管理。 序言 原本学习ubuntu网络管理就是为了检查nginx安装过程中使用wget获取压缩包为什么解析不出…...

理解线程的三大特性:原子性、可见性和有序性
在并发编程中,保护线程安全是一个重要课题。要实现线程安全,我们必须理解并掌握三个核心概念:原子性、可见性和有序性。下面将详细介绍这三个特性及其解决方案。 一、原子性 原子性是指一个操作要么全部完成,要么完全不执行。在多…...

英特尔®以太网网络适配器E810-CQDA1 / E810-CQDA2 网卡 规格书 e810 网卡 规格书 Intel100G E810 网卡 白皮书
英特尔以太网800系列网络适配器 英特尔以太网网络适配器E810-CQDA1 / CQDA2 在10到100Gbps的以太网速度下实现高效的工作负载优化性能 关键特性 •单、双端口QSFP28 •应用设备队列(ADQ) •PCI Express (PCIe) 4.0 x16 •动态设备个性化(DDP) •以太网端口配置工具(EPC…...

好用的idea方法分隔符插件
好用的idea方法分隔符插件...

通过 Xshell 无法连接到 Ubuntu
无法通过 Xshell 连接到 Ubuntu 服务器,通常与 SSH 服务、网络连接、主机防火墙设置问题有关。以下是排查并解决这个问题的步骤: 1. 确保 SSH 服务正在运行 在 Ubuntu 上,SSH 服务必须启动才能连接。如果你有虚拟机或物理机的访问权限&…...

Java面试篇基础部分-Synchronized关键字详解
Synchronized关键字用于对Java对象、方法、代码块等提供线程安全操作。Synchronized属于独占式的悲观锁机制,同时也是可重入锁。我们在使用Synchronized关键字的时候,可以保证同一时刻只有一个线程对该对象进行访问;也就是说它在同一个JVM中是线程安全的。 Java中的每个…...

数据结构之线性表——LeetCode:67. 二进制求和,27. 移除元素,26. 删除有序数组中的重复项
67. 二进制求和 题目描述 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 运行代码(javaC) class Solution {public String addBinary(String a, String b) {StringBuilder ansnew StringBuilder();int ca0;for(i…...

SQL_HAVING小例子
例一 求众数的sql语句1: select income,count(*) as cnt from graduates group by income having count(*) > all(select count(*) from graduates group by income);这段SQL语句的作用是从一个名为graduates的表中找出income(收入)字段…...

Avalonia第三方UI库Semi.Avalonia用法详解
文章目录 简介一、安装Semi Avalonia二、基本项目结构三、使用基本控件1 按钮控件2 输入框控件3 选择框控件四、自定义样式和主题五、使用布局控件六、数据绑定七、事件处理八、使用图标和其他资源九、响应式设计十、交互与导航总结简介 Semi是一个基于Avalonia的UI库,旨在提供…...

宠物智能化听诊器的健康管理!
智能听诊器在宠物健康领域的应用正逐渐普及,它通过创新技术为宠物医疗保健带来革新。以下是智能听诊器如何影响宠物健康管理的概述: 数据分析与机器学习 智能听诊器利用深度学习算法,识别宠物心脏和呼吸模式,提供健康分析和诊断建…...

MyBatis-Plus 实体类注解
MyBatis-Plus 实体类注解详解 MyBatis-Plus 是 MyBatis 的增强版,旨在简化开发者的 CRUD 操作。它通过丰富的特性和注解,简化了数据库与 Java 实体类之间的映射。MyBatis-Plus 提供了一系列的实体类注解,帮助开发者更轻松地映射数据库表、字…...

如何写一个自动化Linux脚本去进行等保测试--引言
#我的师兄喜欢给我的休闲实习生活加活,说是让我在实习期间写一个自动化脚本去进行等保测试。呵呵哒。 怎么办呢,师兄的指令得完成,师兄说让我使用Python完成任务。 设想如下: 1、将Linux指令嵌入到python脚本中 2、调试跑通 …...

美团测开OC!
大家好,我是洋子,最近测试社区里面的一个25届同学参加秋招,已经拿到美团测开offer,今天来分享一下他的求职经历,文末附面经 他求职目前的进展如下: 互联网大厂:字节,阿里ÿ…...

HyperWorks的实体几何创建与六面体网格剖分
创建和编辑实体几何 在 HyperMesh 有限元前处理环境中,有许多操作是针对“实体几何”的,例如创建六面体网格。在创建实体网格的工作中,我们既可以使用闭合曲面创建实体网格,也可以使用完整的实体几何创建实体网格。与闭合曲面相比…...

项目实战:Ingress搭建Nginx+WP论坛+MariaDB
1. 网站架构 本次部署形式完全舍弃 Docker,将所有应用都置于Kubernetes,采用 Deployment 而非单 Pod 部署,稳定性得到升级。 2. 部署 MariaDB [rootk8s-master ~]# mkdir tdr [rootk8s-master ~]# cd tdr/ (1)定义 …...

UWA支持鸿蒙HarmonyOS NEXT
华为在开发者大会上,宣布了鸿蒙HarmonyOS NEXT将仅支持鸿蒙内核和鸿蒙系统的应用,不再兼容安卓应用,这意味着它将构建一个全新且完全独立的生态系统。 为此,UWA也将在最新版的UWA SDK v2.5.0中支持鸿蒙HarmonyOS NEXT,…...

【齐家网-注册/登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…...

MyBatis 基本概念
MyBatis 基本概念详解 MyBatis 是一个优秀的持久层框架,它支持定制 SQL、存储过程以及高级映射,用于将 Java 对象与数据库中的记录进行映射。作为 ORM(对象关系映射)框架,MyBatis 的主要优势在于灵活性高,…...