Hadoop:YARN、MapReduce、Hive操作

news2024/11/27 9:41:02

目录

分布式计算概述

YARN概述

YARN架构

核心架构

辅助架构

MapReduce 概述

配置相关文件

提交MapReduce到YARN

Hive

Hive架构

Hive在VMware部署

Hive的启动

数据库操作

 数据表操作

内部表操作 

 外部表操作

数据加载和导出

数据加载LOAD

数据加载 - INSERT SELECT 语法 

hive表数据导出 - insert overwrite 方式

分区表


分布式计算概述

分散->汇总模式:MapReduce就是这种模式)

1. 将数据分片,多台服务器各自负责一部分数据处理

2. 然后将各自的结果,进行汇总处理

3. 最终得到想要的计算结果

中心调度->步骤执行模式:(大数据体系的SparkFlink等是这种模式)

1. 由一个节点作为中心调度管理者

2. 将任务划分为几个具体步骤

3. 管理者安排每个机器执行任务

4. 最终得到结果数据

YARN概述

YARN Hadoop内提供的进行分布式资源调度的组件

 一般来说,MapReduce最好是在YARN的管控下进行

Map任务喝Reduce任务分别向YARN申请资源,然后YARN根据现存的资源进行任务分配

YARN架构

核心架构

主从架构,有两个角色  ResourceManager(主),NodeManager(从)

  • ResourceManager:整个集群的资源调度者, 负责协调调度各个程序所需的资源。
  • NodeManager:单个服务器的资源调度者,负责调度单个服务器上的资源提供给应用程序使用

 当任务发起时,ResourceManager进行总的资源调度(每个服务器分配多少内存),然后NodeManager使用容器Container,预先占用这一部分资源,然后将这一部分资源提供给程序使用

辅助架构

除了这两个角色,还可以搭配两个辅助角色使得YARN更加稳定

  • 代理服务器(ProxyServer)Web Application Proxy Web应用程序代理
  • 历史服务器(JobHistoryServer) 应用程序历史信息记录服务

 Web应用代理(Web Application Proxy)

代理服务器,即Web应用代理是 YARN 的一部分。默认情况下,它将作为资源管理器(RM)的一部分运行,但是可以配置为在独立模式下运行。使用代理的原因是为了减少通过 YARN 进行基于网络的攻击的可能性。

JobHistoryServer历史服务器

历史服务器的功能很简单: 记录历史运行的程序的信息以及产生的日志并提供WEB UI站点供用户使用浏览器查看。

一般来说,日志运行在容器中,如果想查看日志则需要去不同的服务器调用不同意的容器,比较麻烦,于是就可以统一收集到HDFS,由历史服务器托管为WEB UI供用户在浏览器统一查看

  

MapReduce 概述

MapReduce Hadoop 中的分布式计算组件
MapReduce 可以以分散 -> 汇总(聚合)模式执行分布式计算任务,提供两个接口

map 接口,主要提供 分散 功能,由服务器分布式处理数据
reduce 接口,主要提供 汇总 功能,进行数据汇总统计得到结果

以一个统计问题为例子,例如要统计一个很长的字符串A里面有多少个字母a,那么假设我有四个服务器

设置三个服务器为分散服务器,一个服务器为汇总服务器,那么会把A map成三分,然后分别计算,最后把结果reduce到汇总服务器

配置相关文件

$HADOOP_HOME/etc/hadoop 文件夹内,修改:

mapred-env.sh 文件,添加如下环境变量
#设置JDK路径
export JAVA_HOME=/export /server /jdk
#设置JobHistoryServer进程内存为1G
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
#设置日志级别为INFO
export HADO0P_MAPRED_ROOT_LOGGER=INFO,RFA

mapred-site.xml文件,添加如下配置信息

  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description></description>
  </property>

  <property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/data/mr-history/tmp</value>
    <description></description>
  </property>


  <property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/data/mr-history/done</value>
    <description></description>
  </property>
<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>

$HADOOP_HOME/etc/hadoop 文件夹内,修改:

yarn-env.sh 文件,添加如下 4 行环境变量内容:
#设置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=$HADO0P_HOME/logs
yarn-site.xml 文件,配置如图属性
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
    <description></description>
</property>

  <property>
    <name>yarn.web-proxy.address</name>
    <value>node1:8089</value>
    <description>proxy server hostname and port</description>
  </property>


  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>

  <property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <description>Configuration to enable or disable log aggregation</description>
  </property>


<!-- Site specific YARN configuration properties -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
    <description></description>
  </property>

  <property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    <description></description>
  </property>

  <property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/nm-local</value>
    <description>Comma-separated list of paths on the local filesystem where intermediate data is written.</description>
  </property>


  <property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
    <description>Comma-separated list of paths on the local filesystem where logs are written.</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>Shuffle service that needs to be set for Map Reduce applications.</description>
  </property>

然后复制到另外两个节点中去 

scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node2: `pwd`/
scp mapred-env.sh mapred-site.xml yarn-env.sh yarn-site.xml node3: `pwd`/

 最后启动:

一键启动YARN 集群 $HADOOP_HOME/sbin/start-yarn.sh
会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动resourcemanager
会基于 workers 文件配置的主机启动 NodeManager
一键停止YARN 集群 $HADOOP_HOME/sbin/stop-yarn.sh
在当前机器,单独启动或停止进程
        $HADOOP_HOME/bin/yarn --daemon  start|stop  resourcemanager|nodemanager|proxyserver
        start和stop决定启动和停止
        可控制resourcemanager、nodemanager、proxyserver三种进程
历史服务器启动和停止
        $HADOOP_HOME/bin/mapred --daemon start|stop historyserver

一般来说,运行下面就可以了

start-yarn.sh
mapred --daemon start historyserver

 可以通过 node1:8088这个端口检测yarn运行情况

提交MapReduce到YARN

一般来说不会直接写MapReduce代码,但是Hadoop官方内置了一些预置的MapReduce程序代码,我们无需编程,只需要通过命令即可使用。

这些内置的示例 MapReduce 程序代码,都在:

 $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar 这个文件内

可以通过 hadoop jar 命令来运行它,提交 MapReduce 程序到 YARN 中。

语法: hadoop jar 程序文件 java类名 [程序参数] ... [程序参数]

 这里举一个例子:

hadoop jar /export/server/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /data/test.txt /data/wc

使用wordcount这个方法,对test.txt进行运算,意思就是统计单词的数量,把结果存储到wc文件夹中:

也可以进入node1:8088查看状态 

Hive

MapReduce支持程序开发(JavaPython等)但不支持SQL开发,Apache Hive是一款分布式SQL计算的工具, 其主要功能是:将SQL语句 翻译成MapReduce程序运行

Hive架构

要实现分布式SQL计算,起码需要两种过程:

元数据管理:管理数据的位置,数据结构,数据描述,例如select age from table1,这样一条语句,需要存储table1的位置,age列对应的数据等等

SQL解析器SQL分析,SQL到MapReduce程序的转换,提交MapReduce程序运行并收集执行结果

 元数据存储

通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

-- Hive提供了 Metastore 服务进程提供元数据管理功能

Driver驱动程序,包括语法解析器、计划编译器、优化器、执行器

完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。

这部分内容不是具体的服务进程,而是封装在Hive所依赖的Jar文件即Java代码中

用户接口

包括 CLIJDBC/ODBCWebGUI。其中,CLI(command line interface)shell命令行;Hive中的Thrift服务器允许外部客户端通过网络与Hive进行交互,类似于JDBCODBC协议。WebGUI是通过浏览器访问Hive

-- Hive提供了 Hive Shell ThriftServer等服务进程向用户提供操作接口

Hive在VMware部署

Hive是一个单机工具,只需要部署到一台服务器即可

以下步骤来自:第四章-04-[实操]Hive在VMware虚拟机中部署_哔哩哔哩_bilibili

1、在node1节点上配置Mysql

# 更新密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

# 安装Mysql yum库
rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm

# yum安装Mysql
yum -y install mysql-community-server

# 启动Mysql设置开机启动
systemctl start mysqld
systemctl enable mysqld

# 检查Mysql服务状态
systemctl status mysqld

# 第一次启动mysql,会在日志文件中生成root用户的一个随机密码,使用下面命令查看该密码
grep 'temporary password' /var/log/mysqld.log

# 修改root用户密码
mysql -u root -p -h localhost
Enter password:
 
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root!@#$';

# 如果你想设置简单密码,需要降低Mysql的密码安全级别
set global validate_password_policy=LOW; # 密码安全级别低
set global validate_password_length=4;	 # 密码长度最低4位即可

# 然后就可以用简单密码了(课程中使用简单密码,为了方便,生产中不要这样)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

/usr/bin/mysqladmin -u root password 'root'

grant all privileges on *.* to root@"%" identified by 'root' with grant option;  
flush privileges;

2、配置hadoop

配置如下内容在Hadoopcore-site.xml中,并分发到其它节点,且重启HDFS集群

 

3:下载解压Hive

切换到 hadoop 用户

su - hadoop

下载 Hive 安装包:

http://archive.apache.org/dist/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz

解压到 node1 服务器的: /export/server/

tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/

设置软连接

ln -s /export/server/apache-hive-3.1.3-bin /export/server/hive

4:提供MySQL Driver

下载 MySQL 驱动包:

https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.34/mysql-connector-java-5.1.34.jar

将下载好的驱动 jar 包,放入: Hive 安装文件夹的 lib 目录内

mv mysql-connector-java-5.1.34.jar /export/server/hive/lib/

5:配置Hive

Hive conf 目录内,新建 hive-env.sh 文件,填入以下环境变量内容:

export HADOOP_HOME=/export/server/hadoop

export HIVE_CONF_DIR=/export/server/hive/conf

export HIVE_AUX_JARS_PATH=/export/server/hive/lib

 •Hiveconf目录内,新建hive-site.xml文件,填入以下内容:

<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
  </property>

  <property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node1</value>
  </property>

  <property>
    <name>hive.metastore.uris</name>
    <value>thrift://node1:9083</value>
  </property>

  <property>
    <name>hive.metastore.event.db.notification.api.auth</name>
    <value>false</value>
  </property>

</configuration>

 步骤6:初始化元数据库

支持,Hive的配置已经完成,现在在启动Hive前,需要先初始化Hive所需的元数据库。

MySQL 中新建数据库: hive

CREATE DATABASE hive CHARSET UTF8;

执行元数据库初始化命令:

cd /export/server/hive

bin/schematool -initSchema -dbType mysql -verbos

# 初始化成功后,会在MySQ Lhive库中新建74元数据管理的表。

步骤7:启动Hive(使用Hadoop用户) 

确保 Hive 文件夹所属为 hadoop 用户
创建一个 hive 的日志文件夹:

mkdir /export/server/hive/logs

启动元数据管理服务(必须启动,否则无法工作)

前台启动:bin/hive --service metastore

后台启动:nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &

启动客户端,二选一(当前先选择 Hive Shell 方式)

Hive Shell方式(可以直接写SQL): bin/hive

Hive ThriftServer方式(不可直接写SQL,需要外部客户端链接使用): bin/hive --service hiveserver2

. Hive中创建的库和表的数据,存储在HDFS中,默认存放在:hdfs://node1:8020/user/hive/warehouse中。

Hive的启动

上面说到启动hive有两种方式,即前台方式和后台方式

bin/hive这种就是直接 HiveShell客户端,写mysql代码

HiveServer2这种方式就是给第三方软件一个接口,可以使用第三方软件连接到hive,从而更方便的写mysql代码

HiveServer2Hive内置的一个ThriftServer服务,提供Thrift端口(默认10000)供其它客户端链接

可以连接ThriftServer的客户端有:

Hive 内置的 beeline 客户端工具(命令行工具)

第三方的图形化SQL工具,如DataGripDBeaverNavicat

启动方法:

#先启动metastore服务 然后启动hiveserver2服务
nohup bin/hive --service metastore 
nohup bin/hive --service hiveserver2 

测试一下接口:

 netstat -anp|grep 10000

说明 HiveServer2位于71625端口,且提供了端口号为10000的thrift端口

数据库操作

创建数据库

create database if not exists myhive;

use  myhive;

查看数据库详细信息

desc  database  myhive;

创建数据库并指定hdfs存储位置

create database myhive2 location '/myhive2';

使用location关键字,可以指定数据库在HDFS的存储路径。

删除一个空数据库,如果数据库下面有数据表,那么就会报错

drop  database  myhive;

强制删除数据库,包含数据库下面的表一起删除

drop  database  myhive2  cascade;

 数据表操作

创建表的语法:

  • EXTERNAL,创建外部表
  • PARTITIONED BY 分区表
  • CLUSTERED BY,分桶表
  • STORED AS,存储格式
  • LOCATION,存储位置

内部表操作 

hive中的表可以分为  内部表  外部表 分区表  分桶表

内部表( CREATE TABLE table_name ......

未被external关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse),删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。

外部表 CREATE EXTERNAL TABLE table_name ......LOCATION......

external关键字修饰的即是外部表, 即关联表。

外部表是指表数据可以在任何位置,通过LOCATION关键字指定。 数据存储的不同也代表了这个表在理念是并不是Hive内部管理的,而是可以随意临时链接到外部数据上的。

所以,在删除外部表的时候, 仅仅是删除元数据(表的信息),不会删除数据本身

在创建完内部表并赋值后,可以查看内容,一半默认是存储在/user/hive/warehouse中,也可使用location替换:

 

可以看到列之间没有分割,其实只是我们看不到,默认的数据分隔符是:”\001”是一种特殊字符,是ASCII值,键盘是打不出来

在某些文本编辑器中是显示为SOH的。

当然,分隔符我们是可以自行指定的。

在创建表的时候可以自己决定:

create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t';
row format delimited fields terminated by '\t' :表示以 \t 分隔
查看表的信息:
desc formatted table;

 外部表操作

外部表的数据和表是独立的,可以分别建立

比如先建立表,再建立数据文件

1、现在linux上建立文件date\test.txt:

vim test.txt
1    qqqq
2    wwww
3    eeee

2、 创建外部表,这里必须规定分隔符,且必须跟上述文件中的分隔符一样

create external table test_ext1(id int, name string)
row format delimited fields terminated by ‘\t’ location ‘/tmp/test_ext1’;

3、把linux的文件放入hive的表对应的文件夹中

 hdfs dfs -put -f test.txt /tmp/test_ext1/

此时查看表test_ext1就可以看到对应内容了

4、但是如果此时修改test.txt文件,表的数据也会变化

  

但是在hive中删除表,不会删除数据文件

同理 先有数据文件再有表也可以

内部表和外部表可以相互转换

alter table stu set tblproperties('EXTERNAL'='TRUE');
alter table stu set tblproperties('EXTERNAL'='FALSE');

数据加载和导出

数据加载LOAD

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename;

1、[LOCAL]:数据如果在linux本地,使用LOCAL,如果在hdfs中不使用

2、[OVERWRITE] 是否覆盖

 基于HDFS进行load加载数据,源数据文件会消失(本质是被移动到表所在的目录中)

数据加载 - INSERT SELECT 语法 

我们也可以通过SQL语句,从其它表中加载数据。

INSERT [OVERWRITE | INTO] TABLE tablename1 
[PARTITION (partcol1=val1, partcol2=val2 ...) 
[IF NOT EXISTS]] select_statement1 FROM from_statement;

例如想要数据翻倍:

insert into test_ext1 select * from test_ext1

这种方式会执行mapreduce,小数据下会比较慢

hive表数据导出 - insert overwrite 方式

insert overwrite [local] directory ‘path’ select_statement1 FROM from_statement;

如果要导出到linux系统,就带local

例如

insert overwrite local directory '/home/hadoop/export1' select * from test_load ;

此处导出时的分隔符还是默认的,也可以自己定义分隔符

insert overwrite local directory '/home/hadoop/export2' 
row format delimited fields terminated by '\t' select * from test_load;

分区表

在hive中可以把大的数据进行分类,放置在不同的文件夹中进行存储,那么在操作时就会变得更加快速和简便

比如要存储不同月份的销售数据,那么可以根据月份进行分区,不同的月份创建不同的文件夹存放数据

 语句:

create table tablename(...) partitioned by (分区列 列类型, ......) 
row format delimited fields terminated by '';

实例:创建 partition_test表并按照month分区

create table partition_test(id int,name string) partitioned by (month string)
row format delimited fields terminated by '\t';

提前准备好test.txt文件:

 

上传数据并设置月份: 

load data local inpath '/export/server/hive/date/test.txt' 
into table partition_test partition(month='202208');

最终: 

 

又上传一遍 ,设置为202209: 

load data local inpath '/export/server/hive/date/test.txt' 
into table partition_test partition(month='202209');

 

 但是在文件中,会按照月份进行分别存放

当然也可以创建多级分区

create table partition_test(id int,name string) 
partitioned by (year int,month int,day int)
row format delimited fields terminated by '\t';

这样就会按照年月日进行分区了

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

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

相关文章

生物的神经系统与机器的人工神经网络

生物的神经系统与机器的人工神经网络 文章目录 前言一、人工神经网络二、生物的神经系统三、关系四、相似与区别4.1. 相似&#xff1a;4.2. 区别: 总结 前言 因为本人是学生物的&#xff0c;并且深度学习的核心——人工神经网络与生物的神经系统息息相关&#xff0c;故想要在本…

单片机测量任务运行时间

前言 1.之前是直接看定时器的计数值来粗略估计&#xff0c;可能会存在一些差错&#xff0c;也不够方便&#xff1b;所以做一个比较通用的计算任务运行时间的小Demo。 2.用定时器的计数值查看开始的Tick和结束的Tick&#xff0c;然后定时器每隔1毫秒溢出一次&#xff0c;通过简…

QML 碰到的奇怪问题

text elied属性失效 elied属性就是当Text的文本文字超过Text的宽度时。文字会出现省略的效果。 import QtQuick 2.9 import QtQuick.Window 2.3Window {visible: truewidth: 640height: 480title: qsTr("Hello World")Rectangle{anchors.centerIn: parentwidth: pa…

颜色扩散类dp及其优化:0919T2

http://cplusoj.com/d/senior/p/330 此题前半部分是AGC058B 这是一个颜色扩散类dp&#xff0c;对于这类dp&#xff0c;存在一个性质。 假如一个区间被 i i i 染&#xff0c;一个被 j j j 染&#xff0c;则必然满足 i < j i<j i<j&#xff08;这是下标&#xff09…

基于SSM的智慧城市实验室主页系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

e签宝,再「进化」

基于ePaaS&#xff0c;e签宝不仅打造了电子签领域的生态圈&#xff0c;也正在赋能整个SaaS行业奔向生态化的良性业态&#xff0c;这将使得SaaS厂商的边界愈发清晰&#xff0c;逐渐实现“量产”&#xff0c;奔向规模化。 作者|斗斗 出品|产业家 1957年11月&#xff0c;江苏…

文件字符输出流(FileWriter)(基础流)

1、不追加的情况 package com.csdn.d4_char_stream; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; public class FileWriterDemo01 {public static void main(String[] args) throws IOException {//1、创建一个字符输出流管道与目标文件接…

Android进阶之路 - 盈利、亏损金额格式化

在金融类型的app中&#xff0c;关于金额、数字都相对敏感和常见一些&#xff0c;在此仅记录我在金融行业期间学到的皮毛&#xff0c;如后续遇到新的场景也会加入该篇 该篇大多采用 Kotlin 扩展函数的方式进行记录&#xff0c;尽可能熟悉 Kotlin 基础知识 兄弟 Blog StringUti…

Kafka为什么是高性能高并发高可用架构

目录 1 前言2 顺序写入3 页缓存4 零拷贝5 Broker 性能6 流数据并行7 总结 1 前言 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。小伙伴们是不是有点困惑了&#xff0c;一般认为…

Linux——IO

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——文件系统 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;是不是只有C/C有文件操作呢&#xff1f;python&#xff0c;java&…

Code Ocean :一个用于数据科学和科学研究的在线平台【源码+文章解析】

Code Ocean&#xff08;https://codeocean.com/&#xff09;是一个用于数据科学和科学研究的在线平台&#xff0c;旨在帮助研究人员更轻松地管理、共享和复制研究代码和数据。以下是Code Ocean的主要用途和功能&#xff1a; 代码和数据的管理&#xff1a;Code Ocean允许研究人…

辨析目录表、文件打开表、文件分配表、索引表、FCB、inode、fd等文件系统常见名词

文章目录 1 解释2 形象配图 以下内容仅供简单的辨析这些文件系统最基本的名词&#xff0c;如果需要更深入的了解&#xff0c;请查阅相关转移书籍&#xff0c;如《现代操作系统》、《操作系统概念》 、《操作系统精髓与设计原理》等书籍。 1 解释 2 形象配图 文件打开表 文件分…

工控机连接Profinet转Modbus RTU网关与水泵变频器Modbus通讯

Profinet转Modbus RTU网关是一个具有高性能的通信设备&#xff0c;它能够将工控机上的Profinet协议转换成水泵变频器可识别的Modbus RTU协议&#xff0c;实现二者之间的通信。通过这种方式&#xff0c;工控机可以直接控制水泵变频器的运行状态&#xff0c;改变其工作频率&#…

Windows10下的GTSAM因子图安装与使用

Windows10下的GTSAM因子图安装与使用 一、windows系统预安装1. windows 10安装gcc2.windows 10 安装 boost3.CMake 安装与查看4.CMake 配置boost 二、GTSAM安装与使用三、CMAKE 创建立 使用GTSAM的Visual Studio项目参考文献 一、windows系统预安装 1. windows 10安装gcc htt…

【深度学习框架格式转化】【CPU】Pytorch模型转ONNX模型格式流程详解【入门】

【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习框架格式转化】【GPU】Pytorch模型转ONNX模型格式流程详解【入门】前言PyTorch模型环境搭建(CPU)安装onn…

LCP 50. 宝石补给(每日一题)

欢迎各位勇者来到力扣新手村&#xff0c;在开始试炼之前&#xff0c;请各位勇者先进行「宝石补给」。 每位勇者初始都拥有一些能量宝石&#xff0c; gem[i] 表示第 i 位勇者的宝石数量。现在这些勇者们进行了一系列的赠送&#xff0c;operations[j] [x, y] 表示在第 j 次的赠送…

解决VS Code安装远程服务器插件慢的问题

解决VS Code安装远程服务器插件慢的问题 最近想在服务器上做juypter notebook的代码运行&#xff0c;发现要给服务器安装Jupyter插件&#xff0c;但是安装速度奇慢无比&#xff08;因为服务器不连外网&#xff09;&#xff0c;一开始查看从VS Code插件市场下载插件的博客&…

网络编程day02(socket套接字)

今日任务&#xff1a; TCP\UDP服务端客户端通信 TCP&#xff1a;代码 服务端&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #in…

项目提交按钮没防抖,差点影响了验收

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 前言 一个运行了多年的ToB的项目&#xff0c;由于数据量越来越大&#xff0c;业务越来越复杂&…

【HarmonyOS】【DevEco Studio】盘点DevEco Studio日志获取途径

【关键词】 DevEco Studio、日志获取 【问题背景】 在收到IDE工单的时候&#xff0c;很多时候开发者出现的问题都需要提供一些日志&#xff0c;然后根据日志分析&#xff0c;那么你知道IDE各种日志的获取方式么&#xff1f;往下看 【获取方法】 一、idea.log获取 IDE界面H…