期末复习-Hadoop综合复习
说明
以下内容仅供参考,提到不代表考到,请结合实际情况自己复习
目录
说明
一、题型及分值
二、综合案例题-部署Hadoop集群 或 部署Hadoop HA集群
案例 1:Hadoop 基础集群部署
案例 2:Hadoop HA 集群部署
案例 3:集群性能优化
案例 4:故障排查与恢复
案例 5:多集群协同
三、名称解释(8选5)
1.什么是大数据
2.大数据的5V特征
3.什么是SSH
4.HDFS(p32)
5.名称节点
6.数据节点
7.元数据
8.倒排索引
9.单点故障
10.高可用
11.数据仓库
四、简答题
1、简述Hadoop的优点及其含义
2.简述独立模式、伪分布式模式和完全分布式模式部署Hadoop的区别
3.简述HDFS的健壮性
4.简述YARN基本架构的组成部分及其作用
5.简述不同类型ZNode的区别
6.简述Hadoop高可用集群初次启动时的步骤
7.简述Hive中分区和桶的作用
五、Hive代码题
题目: 电商订单分析
答案
六、HDFS代码题
课本资料
相关题目
题目 1: 创建目录并上传文件
题目 2: 查看文件信息
题目 3: 数据移动与复制
题目 4: 删除操作
题目 5: 文件权限设置
题目 6: 文件备份与验证
七、MapReduce编程
题目 1: 单词计数 (Word Count)
题目 2: 最大值求解 (Max Value Finder)
题目 3: 平均值计算 (Average Calculation)
题目 4: Top K 单词统计
思路
题目 5: 日志分析
题目 6: 用户购买分析
题目 7: 倒排索引 (Inverted Index)
题目 8: 用户商品共现分析
题目 9: 数据去重
题目 10: 分组统计 (Group By)
一、题型及分值
1.综合案例题(35分)
2.名词解释(每个3分,共15分)
3.简答题(每题6分,共30分)
4.编程题(共3题,共20分)
二、综合案例题-部署Hadoop集群 或 部署Hadoop HA集群
这部分内容建议观看课本
tar -zxvf jdk-8u... -C /export/...
在Linux系统中,tar命令用于打包和解包文件。以下是tar命令中 -zxvf 和 -C 选项的含义:-z:这个选项表示同时通过gzip进行压缩或解压缩。如果.tar文件实际上是一个.tar.gz或.tgz文件,这个选项是必要的。
-x:这个选项代表解包(extract)一个.tar文件。
-v:这个选项用于在处理文件时显示详细信息(verbose),它会列出正在处理的文件,这样用户可以看到解压的进度和具体内容。
-f:这个选项用于指定要处理的文件名。在tar命令中,-f通常是最后一个选项,并且后面直接跟着要操作的文件名。
所以,-zxvf组合起来就是告诉tar命令:解压缩一个用gzip压缩的.tar.gz文件,并在处理过程中显示详细信息。-C:这个选项告诉tar命令在指定的目录中解包文件。在上面的命令中,-C /export/…表示将文件解压到/export/…这个目录下。
综上所述,tar -zxvf jdk-8u... -C /export/…命令的作用是:以详细方式解压名为jdk-8u...的gzip压缩的tar文件,并将其内容解压到/export/…目录中。注意,jdk-8u...是文件名的占位符,你需要替换为实际的文件名。
# 验证Hadoop是否安装成功
bin/hadoop version
# 启动Hadoop
start-dfs.sh
# 启动yarn
start-yarn.sh
# 查看hadoop运行状态
jps# 查看jdk是否安装成功
java -version
案例 1:Hadoop 基础集群部署
背景: 某公司计划部署一个基本的 Hadoop 集群,要求包含一个 NameNode 和多个 DataNode。公司要求能够顺利存储和处理 10 TB 的数据。
问题:
-
设计集群架构,明确节点的数量和角色分配。
-
描述如何配置
core-site.xml
和hdfs-site.xml
,确保集群可以正常启动并运行。 -
为了实现 MapReduce 作业,如何配置
mapred-site.xml
和yarn-site.xml
? -
如果添加一个新的 DataNode,该如何操作?
答案:
-
设计集群架构:
-
1 个 NameNode,2-3 个 DataNode(视服务器性能与数据量调整)。
-
每个节点运行操作系统(推荐 Linux)。
-
Master 节点运行 NameNode 和 ResourceManager,Slave 节点运行 DataNode 和 NodeManager。
-
-
配置
core-site.xml
和hdfs-site.xml
:
配置 mapred-site.xml
和 yarn-site.xml
:
-
添加新的 DataNode 操作:
-
安装 Hadoop,配置
core-site.xml
和hdfs-site.xml
指向 NameNode 的地址。 -
格式化 DataNode 数据目录:
hdfs datanode -format
。 -
启动 DataNode 服务:
hadoop-daemon.sh start datanode
。
-
案例 2:Hadoop HA 集群部署
背景: 为了提高可靠性,公司计划将现有的单点 NameNode 改为高可用(HA)模式。集群中有两台主机分别作为 Active NameNode 和 Standby NameNode,并通过 ZooKeeper 进行管理。
问题:
-
描述如何配置 HDFS 的 HA 功能,包括必要的配置文件和关键参数。
-
配置 JournalNode,解释其作用及最低运行数量要求。
-
如果 Active NameNode 宕机,系统如何实现自动切换到 Standby NameNode?需要哪些关键组件?
-
模拟 NameNode 切换的过程,验证 HA 功能是否正常运行
案例 3:集群性能优化
背景: 集群在运行大规模作业时,经常出现作业延迟或失败。系统管理员需要优化集群性能。
问题:
-
分析可能导致作业延迟的原因(从硬件、网络、配置等角度)。
-
提出三种优化 HDFS 性能的策略(例如 Block 大小调整)。
-
YARN 中如何配置以确保资源分配更加均衡?
-
描述如何使用 Ganglia 或 Prometheus 监控 Hadoop 集群性能。
案例 4:故障排查与恢复
背景: 运行中的 Hadoop 集群出现以下问题:
-
某些 DataNode 状态为
Dead
。 -
Active NameNode 停止响应。
-
某些作业无法正常调度。
问题:
-
针对 DataNode 状态为
Dead
的问题,描述可能的原因和修复方法。 -
Active NameNode 停止响应时,如何手动切换到 Standby NameNode?
-
某些作业无法调度,如何排查和解决 YARN 资源不足的问题?
-
描述如何通过配置快照和备份机制实现 HDFS 数据恢复。
案例 5:多集群协同
背景: 公司计划在两个地理位置上分别部署 Hadoop 集群 A 和 B,并希望能够实现跨集群的数据同步。
问题:
-
描述如何配置 HDFS Federation 实现多集群协同。
-
如果需要在集群 A 和集群 B 之间同步数据,如何利用
DistCp
工具完成? -
为了提高同步效率,可以采取哪些优化措施?
-
讨论跨集群数据传输时的安全性考虑及配置(例如数据加密)。
三、名称解释(8选5)
1.什么是大数据
大数据是指海量、多样、快速流转且价值密度低的数据集合,其核心价值在于通过先进技术加工处理,实现数据增值。
2.大数据的5V特征
大数据的特征包括大量(Volume)、真实(Veracity)、多样(Variety)、低价值密度(Value)和高速(Velocity)
3.什么是SSH
SSH是一种网络协议,主要用于在不安全网络上提供安全的远程登录和其他安全网络服务。它能够加密网络连接,确保在客户端和服务器之间传输的数据不会轻易被窃取或篡改。
4.HDFS(p32)
HDFS是Hadoop Distributed File System的缩写,中文称为Hadoop分布式文件系统,专为大规模数据集的处理而设计,主要用于存储和管理海量数据文件。
5.名称节点
课本解释:NameNode是HDFS集群的名称节点,通常称为主节点。如果NameNode由于故障原因而无法使用,那么用户就无法访问HDFS。也就是说,NameNode作为HDFS的主节点,起着至关重要的部分
gpt解释:名称节点(NameNode)是Hadoop分布式文件系统(HDFS)中的核心组件之一,主要负责存储文件的元数据信息和处理客户端对文件的访问请求
6.数据节点
DataNode是HDFS集群中的数据节点,通常称为从节点,其主要功能如下:
-
存储Block
-
根据NameNode的指令对Block进行创建、复制、删除等操作
-
定期向NameNode汇报自身存储的Block列表及健康状态
-
负责为客户端发起的读写请求提供服务
7.元数据
MetaData用于记录HDFS文件系统的相关信息,这些信息称为元数据,元数据的内容包括文件系统的目录结构、文件名、文件路径、文件大小、文件副本数、文件与Block的映射关系,以及Block与DataNode的映射关系等信息
8.倒排索引
倒排索引是文档检索系统中最常用的数据结构,被广泛应用于全文搜索引擎。倒排索引主要用来存储某个单词或词组在一组文档中的存储位置的映射,提供了可以根据内容查找文档的方式,而不是根据文档确定内容,因此称为倒排索引。
9.单点故障
在HDFS集群中,NameNode是主节点,它的运行状态决定着HDFS集群是否可用。然而在Hadoop设计之初,HDFS集群只能存在一个NameNode节点,这种设计的缺点是NameNode节点一旦发生故障,就会导致HDFS集群不可用,这就是所谓的单点故障问题
10.高可用
Hadoop通过在HDFS集群中配置多个NameNode(一个Active,多个Standby)来确保系统连续运行,当Active NameNode故障时,自动选举新的Active NameNode,防止单点故障。
11.数据仓库
数据仓库是一个面向主题、集成的、相对稳定和反映历史变化的数据集合,用于企业或组织的决策分析。
四、简答题
有的来自于书本,有的来自于AI(因为书本内容过多)
1、简述Hadoop的优点及其含义
(1)低成本,可用多台廉价机组建集群,分布式处理大数据,降低成本。(2)高可靠性,自动保存数据副本,避免数据丢失。(3)高容错性,自动检测并应对故障,通过任务转移,防止任务失败。(4)高效率,Hadoop可高效的执行并行计算,且在各个计算机中动态地移动计算。(5)高扩展性,可随时添加更多的计算机,增加集群存储,计算能力。
2.简述独立模式、伪分布式模式和完全分布式模式部署Hadoop的区别
(1)独立模式:本地独立模式不进行任何配置,是Hadoop的默认工作模式,所有组件都在同一台机器运行,适用于学习和体验。
(2)伪分布模式:也是在一台单机上运行,通过单节点模拟分布式,但部署的Hadoop集群是一个伪分布式系统,适合本地开发和验证。
(3)完全分布模式:是一种在多台计算机JVM进程中运行Hadoop集群的工作模式,所有组件分布在多台机器上,部署的集群是完全分布式系统,适用于生产环境。
3.简述HDFS的健壮性
其健壮性可表现为:在HDFS出现故障的情况下可靠的存储数据,其运用了心跳机制、副本机制、数据完整性校验、安全模式和快照 5 种策略保证了数据存储的可靠性
4.简述YARN基本架构的组成部分及其作用
YARN 基本架构由 ResourceManager、ApplicationMaster、NodeManager 和 Container 组成,其中,ResourceManager 为全局资源管理器,负责整个系统的资源管理和分配;ApplicationMaster每个应用程序特有的,负责单个应用程序的管理;NodeManager 负责在节点上启动和管理;Container(容器);Container 封装了每个应用程序使用的资源。
5.简述不同类型ZNode的区别
ZooKeeper中的ZNode类型主要有以下区别:
-
持久节点:除非手动删除,否则一直存在。
-
临时节点:随客户端会话结束而自动删除,不能有子节点。
-
顺序节点:在持久或临时节点基础上,创建时带唯一递增序号,用于记录创建顺序。
6.简述Hadoop高可用集群初次启动时的步骤
1.启动JournalNode
hdfs -- daemon start journalnode
2.格式化HDFS文件系统
hdfs namenode -format
3.同步NameNode
scp -r /export/data/hadoop/namenode/ hadoop2:/export/data/hadoop/
4.格式化ZKFC
hdfs zkfc -formatZK
5.启动HDFS
start-dfs.sh
6.启动YARN
start-yarn.sh
7.简述Hive中分区和桶的作用
分区:将表数据按规则划分存储在不同目录,减少全表扫描,提高查询效率。
桶:按规则将数据均匀分布在不同文件中,避免数据倾斜,优化查询性能。
五、Hive代码题
Hive实践作业三
7.5 数据库操作
7.6 表操作1.在hadoop1中执行start-dfs.sh和start-yarn.sh分别启动hdfs和yarn,
保证hadoop完全分布式集群正常启动,
hadoop1 jps NameNode ResourceManager
hadoop2 jps NodeManager DataNode SecondaryNameNode
hadoop3 jps NodeManager DataNode
2.在hadoop3中执行systemctl status mysqld验证mysql80正常启动
3.在hadoop3中启动MetaStore服务,hive --service metastore
4.hadoop3复制会话,启动HiveServer2服务,hive --service hiveserver2
5.hadoop3再次复制会话,jps 多了两个RunJar进程,元数据存储系统和HiveServer2正常启动
6.在hadoop2中,执行 hive 登录
7.hadoop2复制会话,执行 beeline -u jdbc:hive2://hadoop3:10000 -n root 登录8.在登录的hive中,输入:show databases;9.数据库操作
创建数据库 create database homework;
查看数据库 describe homework;
切换数据库 use homework;
10.表操作
complex表的创建
create table complex(
col1 array<int>,
col2 map<int,string>,
col3 struct<a:string,b:int,c:double>,
col4 string,
col5 int
);complex表的查看
desc complex;user_p分区表的创建
create table user_p (id int, name string)
partitioned by (gender string)
row format delimited fields terminated by ',';user_p分区表的查看
desc user_p;array_test内部表的创建
create table array_test(
name string,
score array<int>
)
row format delimited fields terminated by '@'
collection items terminated by ',';array_test内部表导入数据zhangshan@89,88,97,80
lisi@90,95,99,97
wangwu@90,77,88,79
zhaoliu@91,79,98,89文本文件array_test.txt需要先创建,在hadoop3上哦load data local inpath '/root/array_test.txt' into table homework.array_test;array_test内部表查询数据
select * from homework.array_test;map_test内部表的创建
create table map_test(
name string,
score map<string,int>
)
row format delimited fields terminated by '@'
collection items terminated by ','
map keys terminated by ':';map_test内部表导入数据zhangshan@math:90,english:89,java:88,hive:80
lisi@math:98,english:79,java:96,hive:92
wangwu@math:88,english:86,java:89,hive:88
zhaoliu@math:89,english:78,java:79,hive:77文本文件map_test.txt需要先创建,在hadoop3上哦load data local inpath '/root/map_test.txt' into table homework.map_test;map_test内部表查询数据
select * from homework.map_test;select name from homework.map_test;select score from homework.map_test;
题目: 电商订单分析
某电商公司需要构建订单管理系统,并在 Hive 中完成以下任务:
数据描述
订单数据由以下信息组成:
-
order_id
(订单ID, INT) -
customer_id
(客户ID, INT) -
order_date
(订单日期, STRING,格式:yyyy-MM-dd) -
order_items
(订单商品,ARRAY<STRUCT<item_id: INT, item_name: STRING, quantity: INT, price: FLOAT>>) -
order_details
(订单详情,MAP<STRING, STRING>,包含键值对如payment_method -> credit_card
,delivery_status -> delivered
)
任务要求:
任务 1: 内部表创建
创建一个内部表 orders_internal
,用于存储上述订单数据。
任务 2: 外部表创建
创建一个外部表 orders_external
,数据存储在 HDFS 的 /data/orders_external/
目录下。
任务 3: 分区表创建
创建一个按 order_date
分区的表 orders_partitioned
,优化按日期范围查询的性能。
任务 4: 数据插入
为三个表分别插入以下样例数据:
订单1:order_id: 101, customer_id: 1, order_date: '2024-12-01'order_items: [{item_id: 201, item_name: 'Laptop', quantity: 1, price: 1000.0},{item_id: 202, item_name: 'Mouse', quantity: 2, price: 25.0}]order_details: {'payment_method': 'credit_card', 'delivery_status': 'delivered'}订单2:order_id: 102, customer_id: 2, order_date: '2024-12-02'order_items: [{item_id: 203, item_name: 'Keyboard', quantity: 1, price: 50.0}]order_details: {'payment_method': 'paypal', 'delivery_status': 'shipped'}
任务 5: 查询操作
-
查询所有已完成(
delivery_status = delivered
)订单的客户ID及商品明细。 -
查询每个客户的总消费金额。
答案
任务 1: 内部表创建
CREATE TABLE orders_internal (order_id INT,customer_id INT,order_date STRING,order_items ARRAY<STRUCT<item_id: INT, item_name: STRING, quantity: INT, price: FLOAT>>,order_details MAP<STRING, STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';
任务 2: 外部表创建
CREATE EXTERNAL TABLE orders_external (order_id INT,customer_id INT,order_date STRING,order_items ARRAY<STRUCT<item_id: INT, item_name: STRING, quantity: INT, price: FLOAT>>,order_details MAP<STRING, STRING>
)
STORED AS TEXTFILE
LOCATION '/data/orders_external/';
任务 3: 分区表创建
CREATE TABLE orders_partitioned (order_id INT,customer_id INT,order_items ARRAY<STRUCT<item_id: INT, item_name: STRING, quantity: INT, price: FLOAT>>,order_details MAP<STRING, STRING>
)
PARTITIONED BY (order_date STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';
任务 4: 数据插入
插入内部表:
INSERT INTO TABLE orders_internal VALUES
(101, 1, '2024-12-01', ARRAY(NAMED_STRUCT('item_id', 201, 'item_name', 'Laptop', 'quantity', 1, 'price', 1000.0),NAMED_STRUCT('item_id', 202, 'item_name', 'Mouse', 'quantity', 2, 'price', 25.0)),MAP('payment_method', 'credit_card', 'delivery_status', 'delivered')
),
(102, 2, '2024-12-02',ARRAY(NAMED_STRUCT('item_id', 203, 'item_name', 'Keyboard', 'quantity', 1, 'price', 50.0)),MAP('payment_method', 'paypal', 'delivery_status', 'shipped')
);
插入外部表: 将数据手动存储在 /data/orders_external/
,格式如下:
101 1 2024-12-01 [{"item_id":201,"item_name":"Laptop","quantity":1,"price":1000.0},{"item_id":202,"item_name":"Mouse","quantity":2,"price":25.0}] {"payment_method":"credit_card","delivery_status":"delivered"}
102 2 2024-12-02 [{"item_id":203,"item_name":"Keyboard","quantity":1,"price":50.0}] {"payment_method":"paypal","delivery_status":"shipped"}
加载数据后,直接查询外部表。
插入分区表:
INSERT INTO TABLE orders_partitioned PARTITION(order_date='2024-12-01') VALUES
(101, 1, ARRAY(NAMED_STRUCT('item_id', 201, 'item_name', 'Laptop', 'quantity', 1, 'price', 1000.0),NAMED_STRUCT('item_id', 202, 'item_name', 'Mouse', 'quantity', 2, 'price', 25.0)),MAP('payment_method', 'credit_card', 'delivery_status', 'delivered')
);INSERT INTO TABLE orders_partitioned PARTITION(order_date='2024-12-02') VALUES
(102, 2, ARRAY(NAMED_STRUCT('item_id', 203, 'item_name', 'Keyboard', 'quantity', 1, 'price', 50.0)),MAP('payment_method', 'paypal', 'delivery_status', 'shipped')
);
任务 5: 查询操作
1. 查询所有已完成(delivery_status = delivered
)订单的客户ID及商品明细:
SELECT customer_id, order_items
FROM orders_internal
WHERE order_details['delivery_status'] = 'delivered';
2. 查询每个客户的总消费金额:
SELECT customer_id, SUM(total_price) AS total_spent
FROM (SELECT customer_id, item.quantity * item.price AS total_priceFROM orders_internal LATERAL VIEW EXPLODE(order_items) exploded_items AS item
) t
GROUP BY customer_id;
六、HDFS代码题
课本资料
dfs常用的子命令选项
子命令选项 | 功能描述 |
---|---|
-ls | 查看指定目录信息 |
-du | 查看指定目录下每个文件和子目录的大小,子目录也可以看作单独的目录,因为它也可 以存在于目录 |
-mv | 移动到指定文件或目录 |
-cp | 复制指定文件或目录 |
-rm | 删除指定文件或目录 |
-put | 将本地文件系统中的指定文件传到 HDFS 指定目录 |
-cat | 查看指定文件的内容 |
-help | 查看帮助文档 |
-mkdir | 创建目录 |
-get | 将 HDFS 的指定文件下载到本地文件系统 |
1.查看目录 /data的信息
hdfs dfs -ls -S /data
-S 按照由大到小的顺序显示指定目录的内容根据文件内容大小,按照由小到大的顺序显示目录 /data的内容,并将默认的文件大小格式化为便于查看的格式进行显示
hdfs dfs -ls -r -h /data
-r 根据文件大小按照由小到大的顺序显示目录
-h 将默认文件大小(字节数)格式化为便于查看的格式进行显示递归显示目录/data及其子目录的信息,信息中仅显示文件和子目录的路径
hdfs dfs -ls -R -C /data
-R 递归显示目录/data及其子目录的信息
-C 信息中仅显示文件和子目录的路径2.在HDFS的目录/data中创建子目录/dataChild1。并在子目录/dataChild1中创建子目录/dataChild2
hdfs dfs -mkdir -p /data/dataChild1/dataChild23.查看/data中每个文件和子目录的大小,并将默认的文件和子目录大小格式化为便于查看的格式进行显示
hdfs dfs -du -h /data4.将目录/data中的子目录/dataChild1 移动到目录/data/dataChild中
hdfs dfs -mv /dataChild1 /data/dataChild将目录/data中的文件dataA 重命名为dataA_New
hdfs dfs -mv /data/dataA /data/dataA_New5.将目录/data下的文件dataA_New 和 dataB复制到目录/data/dataChild
hdfs dfs -cp /data/dataA_New /data/dataB_New /data/dataChild将目录/data下的文件 dataA_New复制到子目录/dataChild,并将其重命名为dataA
hdfs dfs -cp /data/dataA_New /data/dataChild/dataA6.删除目录/data的子目录/dataChild
hdfs dfs -rm -r /data/dataChild7.将本地文件系统中/export/data目录下文件a.txt 和 b.txt上传到HDFS的目录/data
hdfs dfs -put /export/data/a.txt /export/data/b.txt /data8.查看目录/data中的文件a.txt的内容
hdfs dfs -cat /data/a.txt9.将HDFS中目录/data中的文件a.txt和b.txt 下载到本地文件系统/opt目录下
hdfs dfs -get /data/a.txt /data/b.txt /opt
相关题目
题目 1: 创建目录并上传文件
描述: 假设你在 HDFS 的根目录下,需要完成以下操作:
-
在 HDFS 中创建一个名为
/user/yourname/data
的目录。 -
将本地目录
/local/data/input.txt
中的文件上传到刚创建的 HDFS 目录中。
要求: 编写 Shell 命令完成以上任务。
题目 2: 查看文件信息
描述: 假设 HDFS 中已经存在目录 /user/yourname/data/input.txt
,需要完成以下操作:
-
查看该文件的详细信息(包括文件权限、大小等)。
-
显示该文件的内容。
要求: 写出相应的 HDFS Shell 命令。
题目 3: 数据移动与复制
描述:
-
将文件
/user/yourname/data/input.txt
移动到 HDFS 中的/user/yourname/archive/
目录下。 -
将文件
/user/yourname/archive/input.txt
复制回/user/yourname/data/
目录。
要求: 提供具体的 HDFS Shell 命令。
题目 4: 删除操作
描述: 删除 HDFS 中的 /user/yourname/data
目录及其内容,并验证该目录是否被成功删除。
要求: 写出执行以上操作的 Shell 命令。
题目 5: 文件权限设置
描述: 假设 /user/yourname/data/input.txt
文件需要满足以下权限要求:
-
文件所有者可以读写;
-
文件所在组成员只能读取;
-
其他用户无权限。
要求: 提供修改文件权限的 HDFS Shell 命令。
题目 6: 文件备份与验证
描述:
-
将 HDFS 中的
/user/yourname/data/input.txt
备份到/user/yourname/backup/input.txt
。 -
验证备份文件与原文件的内容是否一致。
要求: 写出完整的 Shell 命令。
七、MapReduce编程
题目 1: 单词计数 (Word Count)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WordCount {public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] tokens = value.toString().split("\\s+");for (String token : tokens) {word.set(token);context.write(word, one);}}}public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "word count");job.setJarByClass(WordCount.class);job.setMapperClass(TokenizerMapper.class);job.setCombinerClass(IntSumReducer.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 2: 最大值求解 (Max Value Finder)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class MaxValue {public static class MaxMapper extends Mapper<Object, Text, Text, IntWritable> {private final static Text keyOut = new Text("Max");public void map(Object key, Text value, Context context) throws IOException, InterruptedException {int num = Integer.parseInt(value.toString());context.write(keyOut, new IntWritable(num));}}public static class MaxReducer extends Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int max = Integer.MIN_VALUE;for (IntWritable val : values) {max = Math.max(max, val.get());}context.write(key, new IntWritable(max));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "max value");job.setJarByClass(MaxValue.class);job.setMapperClass(MaxMapper.class);job.setReducerClass(MaxReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 3: 平均值计算 (Average Calculation)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class AverageCalculation {public static class AvgMapper extends Mapper<Object, Text, Text, IntWritable> {private final static Text keyOut = new Text("Average");public void map(Object key, Text value, Context context) throws IOException, InterruptedException {int num = Integer.parseInt(value.toString());context.write(keyOut, new IntWritable(num));}}public static class AvgReducer extends Reducer<Text, IntWritable, Text, Text> {public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0, count = 0;for (IntWritable val : values) {sum += val.get();count++;}double average = (double) sum / count;context.write(key, new Text(String.format("%.2f", average)));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "average calculation");job.setJarByClass(AverageCalculation.class);job.setMapperClass(AvgMapper.class);job.setReducerClass(AvgReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 4: Top K 单词统计
答案:通过两阶段 MapReduce 实现:第一阶段统计单词频率,第二阶段从中找出频率最高的 K 个单词。
第一阶段:统计单词频率
这部分代码与常规单词计数类似。
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class WordFrequency {public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] tokens = value.toString().split("\\s+");for (String token : tokens) {word.set(token);context.write(word, one);}}}public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {private IntWritable result = new IntWritable();public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}result.set(sum);context.write(key, result);}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "word frequency");job.setJarByClass(WordFrequency.class);job.setMapperClass(TokenizerMapper.class);job.setReducerClass(IntSumReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
第二阶段:提取 Top K
思路
第二阶段通过输入第一阶段的输出结果,将频率和单词对交换,按频率降序排序,选出频率最高的 K 个单词
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
import java.util.TreeMap;public class TopKWords {public static class SwapMapper extends Mapper<Object, Text, IntWritable, Text> {private IntWritable frequency = new IntWritable();private Text word = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] parts = value.toString().split("\\s+");if (parts.length == 2) {word.set(parts[0]);frequency.set(Integer.parseInt(parts[1]));context.write(frequency, word); // 倒置键值对,频率作为 key}}}public static class TopKReducer extends Reducer<IntWritable, Text, Text, IntWritable> {private TreeMap<Integer, String> topKMap = new TreeMap<>();private int K = 10; // 设置需要的 Top K 值public void reduce(IntWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException {for (Text val : values) {topKMap.put(key.get(), val.toString());if (topKMap.size() > K) {topKMap.remove(topKMap.firstKey()); // 保持大小为 K}}}protected void cleanup(Context context) throws IOException, InterruptedException {for (Integer freq : topKMap.descendingKeySet()) {context.write(new Text(topKMap.get(freq)), new IntWritable(freq));}}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "top k words");job.setJarByClass(TopKWords.class);job.setMapperClass(SwapMapper.class);job.setReducerClass(TopKReducer.class);job.setOutputKeyClass(IntWritable.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 5: 日志分析
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class LogAnalysis {public static class LogMapper extends Mapper<Object, Text, Text, IntWritable> {private final static IntWritable one = new IntWritable(1);public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] parts = value.toString().split(" ");if (parts.length > 0) {String ip = parts[0]; // 提取 IPcontext.write(new Text(ip), one);}}}public static class LogReducer extends Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}context.write(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "log analysis");job.setJarByClass(LogAnalysis.class);job.setMapperClass(LogMapper.class);job.setReducerClass(LogReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 6: 用户购买分析
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.DoubleWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class UserPurchaseAnalysis {public static class PurchaseMapper extends Mapper<Object, Text, Text, DoubleWritable> {public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] parts = value.toString().split(" ");if (parts.length == 2) {String userId = parts[0];double amount = Double.parseDouble(parts[1]);context.write(new Text(userId), new DoubleWritable(amount));}}}public static class PurchaseReducer extends Reducer<Text, DoubleWritable, Text, DoubleWritable> {public void reduce(Text key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {double sum = 0.0;for (DoubleWritable val : values) {sum += val.get();}context.write(key, new DoubleWritable(sum));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "user purchase analysis");job.setJarByClass(UserPurchaseAnalysis.class);job.setMapperClass(PurchaseMapper.class);job.setReducerClass(PurchaseReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(DoubleWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 7: 倒排索引 (Inverted Index)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
import java.util.HashSet;public class InvertedIndex {public static class IndexMapper extends Mapper<Object, Text, Text, Text> {private Text word = new Text();private Text documentId = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] line = value.toString().split("\t", 2); // 输入格式: 文档ID \t 文本内容if (line.length < 2) return;documentId.set(line[0]);String[] words = line[1].split("\\s+");for (String w : words) {word.set(w);context.write(word, documentId);}}}public static class IndexReducer extends Reducer<Text, Text, Text, Text> {public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {HashSet<String> docIds = new HashSet<>();for (Text docId : values) {docIds.add(docId.toString());}context.write(key, new Text(String.join(", ", docIds)));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "inverted index");job.setJarByClass(InvertedIndex.class);job.setMapperClass(IndexMapper.class);job.setReducerClass(IndexReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 8: 用户商品共现分析
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
import java.util.ArrayList;public class CoOccurrence {public static class CoOccurrenceMapper extends Mapper<Object, Text, Text, Text> {private Text user = new Text();private Text itemList = new Text();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] parts = value.toString().split("\\s+");if (parts.length < 2) return;user.set(parts[0]);itemList.set(String.join(",", parts, 1, parts.length));context.write(user, itemList);}}public static class CoOccurrenceReducer extends Reducer<Text, Text, Text, Text> {public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {ArrayList<String> items = new ArrayList<>();for (Text val : values) {String[] parts = val.toString().split(",");for (String item : parts) {items.add(item);}}for (int i = 0; i < items.size(); i++) {for (int j = i + 1; j < items.size(); j++) {String pair = items.get(i) + " " + items.get(j);context.write(new Text(pair), new Text("1"));}}}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "co-occurrence");job.setJarByClass(CoOccurrence.class);job.setMapperClass(CoOccurrenceMapper.class);job.setReducerClass(CoOccurrenceReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 9: 数据去重
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class Deduplication {public static class DedupMapper extends Mapper<Object, Text, Text, Text> {public void map(Object key, Text value, Context context) throws IOException, InterruptedException {context.write(value, new Text(""));}}public static class DedupReducer extends Reducer<Text, Text, Text, Text> {public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {context.write(key, new Text(""));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "data deduplication");job.setJarByClass(Deduplication.class);job.setMapperClass(DedupMapper.class);job.setReducerClass(DedupReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
题目 10: 分组统计 (Group By)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;public class GroupBy {public static class GroupMapper extends Mapper<Object, Text, Text, IntWritable> {public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] parts = value.toString().split("\\s+");if (parts.length == 2) {String group = parts[0];int number = Integer.parseInt(parts[1]);context.write(new Text(group), new IntWritable(number));}}}public static class GroupReducer extends Reducer<Text, IntWritable, Text, IntWritable> {public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (IntWritable val : values) {sum += val.get();}context.write(key, new IntWritable(sum));}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "group by");job.setJarByClass(GroupBy.class);job.setMapperClass(GroupMapper.class);job.setReducerClass(GroupReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);FileInputFormat.addInputPath(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}
相关文章:
期末复习-Hadoop综合复习
说明 以下内容仅供参考,提到不代表考到,请结合实际情况自己复习 目录 说明 一、题型及分值 二、综合案例题-部署Hadoop集群 或 部署Hadoop HA集群 案例 1:Hadoop 基础集群部署 案例 2:Hadoop HA 集群部署 案例 3ÿ…...
禁用SAP Hana错误密码锁定用户功能
背景 公司项目适配多种数据库其中包含SAP Hana,由于有同事的数据库连接工具保存了某个在用的数据库的旧密码,导致时不时会被锁用户。通过查询官方文档已解决,这里统一记录一下。 禁用密码锁定方法 以下按系统管理员和普通用户的解法分别列…...
Ubuntu 22.04加Windows AD域
说明: Ubuntu 22.04系统通过realmd,sssd加入到 Active Directory 域,并为域用户配置sudo权限。同时为方便用户使用为Ubuntu系统安装wps与sogou中文输入法。 1. Ubuntu 22.04加入Windows AD域 1.1 首先配置网络,Ubuntu系统能…...
qt实现窗口的动态切换
先说一下整体思路。页面布局两个widget然后再将定时器和按钮关联起来。 定时器发出信号的时候,随着信号,不断地重新设置widget的宽度,实现窗口的动态切换。 具体操作如下: class QtWidgetsApplication4 : public QMainWindow {…...
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题②
第十七届山东省职业院校技能大赛 中职组“网络安全”赛项资源任务书样题② 模块A 基础设施设置与安全加固(200分)A-1 登录安全加固(Windows, Linux)A-2 Nginx安全策略(Linux)A-3日志监控(Windows)A-4中间件…...
【Vulkan入门】09-CreateFrameBuffer
目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同,其他文章基本上都使用窗口框架(X11、GLFW、WSL等)提供的surface来显示Vulkan渲染出的图像。我认为那样会…...
FPGA设计-Vivado的Off-Chip Termination设置问题
目录 简介: 设置规则: output strength(输出驱动器的电流驱动能力) slew rate(输出电压压摆率) Pull type(上下拉类型) On-chip termination(输入端/输出端的内置片上端接电阻) 输出端接电阻配置 简介: 经常遇到在FPGA设计时,很多人很迷惑这些关于硬件的终…...
GC常见垃圾回收算法,JVM分代模型
如何判断是垃圾?引用计数器和Root可达性算法 如何进行清除?标记清除、复制、标记整理 堆分代模型?Eden,Surevivor,Tenuring 一个对象从创建到消亡的过程? 对象什么时候进入老年代? 一、GC&a…...
面试题整理(三)
芯冰乐知识星球入口:...
可视化建模以及UML期末复习----做题篇
一、单项选择题。(20小题,每小题2分,共40分) 1、UML图不包括( ) A、用例图 B、状态机图 C、流程图 D、类图 E、通信图 答案:C、流程图 UML中不包括传统意义上的流程图,流程图通常是指B…...
PostGIS分区表学习相关
在Postgresql中对空间数据进行表分区的实践_postgresql空间数据-CSDN博客文章浏览阅读1.4k次,点赞26次,收藏21次。Postgresql的分区功能允许将一个大表按照特定的规则拆分成多个小的分区表。这样做的好处在于,在查询数据时,可以只…...
JavaEE 【知识改变命运】03 多线程(3)
文章目录 多线程带来的风险-线程安全线程不安全的举例分析产出线程安全的原因:1.线程是抢占式的2. 多线程修改同一个变量(程序的要求)3. 原子性4. 内存可见性5. 指令重排序 总结线程安全问题产生的原因解决线程安全问题1. synchronized关键字…...
Flash操作 原子写 非原子写
原子和非原子操作 读、修改、写操作 对一个变量 A 1或上0x01,C语言写法: A 1| 0x01; 通过编译转成汇编后: LOAD R1,[#A 1] ; Read a value from A 1 into R1 MOVE R2,#0x01 ; Move the absolute constant 1 into R2 OR R1,R2 ; Bitwise O…...
厦门凯酷全科技有限公司怎么样?
随着短视频和直播带货的兴起,抖音电商平台迅速崛起,成为众多品牌和商家争夺的新战场。在这个竞争激烈的市场中,如何抓住机遇、实现销售增长,成为了每个企业面临的挑战。厦门凯酷全科技有限公司(以下简称“凯酷全”&…...
ubuntu 18.04设置命令行历史记录并同时显示执行命令的时间
以下相关详细信息请参考ubuntu官网。 在Ubuntu 18.04中,查看特定用户(例如用户broko)的命令行历史记录,并同时显示执行命令的时间,可以通过修改用户的shell配置文件来实现: • 设置HISTTIMEFORMAT环境变量…...
推荐系统里面的多任务学习概述
1. 概述 多任务学习(multi-task learning),本质上是希望使用一个模型完成多个任务的建模,在推荐系统中,多任务学习一般即指多目标学习(multi-label learning),不同目标输入相同的fe…...
解决uview ui赋值后表单无法通过验证
微信小程序中 主要还是文档有这样一段话://如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。 添加即可通过 onReady() {//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过…...
【GL010】C/C++总结(二)
C部分 1. C中类成员的访问权限 无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部 (定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 p…...
【合作原创】使用Termux搭建可以使用的生产力环境(五)
前言 在上一篇【合作原创】使用Termux搭建可以使用的生产力环境(四)-CSDN博客我们讲到了如何让proot-distro中的Debian声音驱动正常,将我们的系统备份后,通过VNC客户端连接到VNC服务器,这一篇我们来讲一下xfce桌面的美…...
初始数据结构
程序数据结构算法 数据结构研究计算机数据(元素)间关系 包括数据的逻辑结构和存储结构及其(数据间)操作 一、基本概念 1.1数据 数据即信息的载体,能被输入到计算机中并且能被它识别、存储和处理的符号总称 1.2数据…...
给我的小程序加了个丝滑的搜索功能,踩坑表情包长度问题
前言 最近在用自己的卡盒小程序的时候,发现卡片越来越多,有时候要找到某一张来看看笔记要找半天,于是自己做了一个搜索功能,先看效果: 怎么样,是不是还挺不错的,那么这篇文章就讲讲这样一个搜索…...
MATLAB中的合并分类数组
目录 创建分类数组 串联分类数组 创建具有不同类别的分类数组 串联具有不同类别的数组 分类数组的并集 此示例演示了如何合并两个分类数组。 创建分类数组 创建分类数组 A,其中包含教室 A 中的 25 个学生的首选午餐饮料。 rng(default) A randi(3,[25,1]); …...
ShardingSphere-JDBC
1. 什么是分库分表? 分库分表是一种数据库扩展技术,通过将数据拆分到多个数据库(分库)或多个表(分表)中来解决单一数据库或表带来的性能瓶颈。分库分表可以有效提升系统的可扩展性、性能和高并发处理能力&…...
企业如何选择远程控制软件来远程IT运维?
在当今企业的日常运作中,IT运维无疑是核心环节之一,它对于保持企业信息系统的稳定运行和数据安全至关重要。随着科技的快速进步,远程控制软件在IT运维中的应用变得越来越重要。今天,我们就来探讨一下远程控制软件如何助力企业IT运…...
Meta Llama 3.3 70B:性能卓越且成本效益的新选择
Meta Llama 3.3 70B:性能卓越且成本效益的新选择 引言 在人工智能领域,大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B,这是一个具有70亿参数的生成式AI模型,它在性能上与4050…...
【银河麒麟高级服务器操作系统】修改容器中journal服务日志存储位置无效—分析及解决方案
了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 服务器环境以及配置 【机型】 整机类型/架构&am…...
go语言zero框架对接阿里云消息队列MQ的rabbit的配置与调用
在 Go 语言中对接阿里云消息队列(MQ)的 RabbitMQ 配置与调用,首先需要安装和配置相关的 Go 库,并了解如何通过 RabbitMQ 与阿里云消息队列进行交互。 ### 步骤一:安装 RabbitMQ Go 客户端库 阿里云的消息队列&#x…...
《Vue进阶教程》第四课:reactive()函数详解
往期内容: 《Vue零基础入门教程》合集(完结) 《Vue进阶教程》第一课:什么是组合式API 《Vue进阶教程》第二课:为什么提出组合式API 《Vue进阶教程》第三课:Vue响应式原理 通过前面的学习, 我们了解到r…...
【开源】A065—基于SpringBoot的库存管理系统的设计与实现
🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看项目链接获取⬇️,记得注明来意哦~🌹 赠送计算机毕业设计600个选题ex…...
memmove函数(带图详解)
c语言系列 文章目录 c语言系列一、memmove函数介绍1.1、函数基本功能1.2、函数参数2.3、函数返回值 二、memmove的使用2.1、拷贝字节不可大于目标空间2.2、同一空间拷贝 三、函数功能的模拟实现3.1、函数参数及其返回值的设定3.2、函数体实现 四、代码实现 一、memmove函数介绍…...
wordpress上线apache/百度竞价推广计划
Vue.js 安装 1、独立版本 我们可以在 Vue.js 的官网上直接下载 vue.min.js 并用 <script> 标签引入。 2、使用 CDN 方法 以下推荐国外比较稳定的两个 CDN,国内还没发现哪一家比较好,目前还是建议下载到本地。 BootCDN(国内)…...
软件工程技术学什么/网站性能优化的方法有哪些
效果图 静态图 动态图 代码及详解: 代码很简单,让我们直接来看代码和注释 varying vec2 texcoord;// uniform float iGlobalTime; // uniform vec2 iResolution;...
网站设计培训哪里好/山东服务好的seo公司
大家好,我在洛谷办了一场比赛,欢迎来参加。题目并不难,基本上都是红题,20分钟就写完了! 欢迎来报名参加嗷! [NOIP1999 普及组] 导弹拦截 题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹…...
网站开发书/中国职业技能培训中心官网
文章目录一、新建一个自己的Git仓库二、将本地项目上传到自己的Git仓库中1. 快速步骤分解2. 图文步骤详解跟着文章一步一步来, 最后去你的码云仓库刷新一下就有项目内容了 一、新建一个自己的Git仓库 如果没有注册账号的朋友,可以先去注册一个Gitee的账…...
珠海网站外包/二级不死域名购买
本文介绍Spring框架如何解析外部资源文件,仅参考官方文档《第7章 Resources》。 ***************************以下是正文的部分*************************** 通过Spring框架提供的对象可以获取诸如Http,Ftp,File,InputStream&…...
关于工装设计的网站/公司怎么建立自己的网站
今天又搞了下jsp servlet 的代码样例,感觉虽然搭了好多次,可是每次还是不记得那些参数,都要去网上搜索,索性自己把这次的简单demo给记录下来,供下次使用的时候直接复制吧。这个web逻辑 input.jsp ---->ReportServle…...