Hadoop 2.0 大家族(一)

news2025/7/19 18:21:08

目录

    • 一、Hadoop 2.0大家族概述
      • (一)分布式组件
      • (二)部署概述
    • 二、ZooKeeper
      • (一)ZooKeeper简介
      • (二)ZooKeeper 入门


在这里插入图片描述

一、Hadoop 2.0大家族概述

(一)分布式组件

1、组件简介

(1)Apache ZooKeeper:分布式、开源的协调服务。主要是用来解决多个分布式应用遇到的互斥协作与通信问题,大大简化分布式应用协调及其管理的难度。

(2)Apache Hbase:分布式存储系统。高可靠性、高性能、面向列、可伸缩。可在廉价PC Server上搭建大规模结构化存储集群。

(3)Apache Pig:基于Hadoop的大规模数据分析工具。提供类SQL类型语言,该语言的编译器会把用户写好的Pig型类SQL脚本转换为一系列经过优化的MR操作并负责向集群提交任务。

(4)Apache Hive:基于Hadoop的一个数据仓库工具。将结构化的数据文件映射为一张数据库表,通过类SQL语句快速实现简单的MR统计,适合数据仓库的统计分析。

(5)Apache Oozie:工作流引擎服务。用于管理和协调运行在Hadoop平台上各种类型任务(HDFS、Pig、MR、Shell,Java等)。

(6)Apache Flume:分布式日志数据聚合与传输工具。可用于日志数据收集、处理和传输,功能类似于Chukwa,但比Chukwa更小巧实用。

(7)Apache Mahout:基于Hadoop的分布式程序库。提供了大量机器学习算法的MR实现,并提供了一系列工具,简化了从建模到测试流程。

(8)Apache Sqoop:数据相互转移的工具。将一个关系型数据库(MySQL 、Oracle 、Postgres等)中的数据导入Hadoop的HDFS中,也可以将HDFS的数据导入关系型数据库中。

(9)Apache Cassandra:一套开源分布式NoSQL数据库系统。用于存储简单格式数据,集Google BigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身。

(10)Apache Avro:数据序列化系统。用于大批量数据实时动态交换,它是新的数据序列化与传输工具,估计会逐步取代Hadoop原有的RPC机制。

(11)Apache Ambari:Hadoop及其组件的Web工具。提供Hadoop集群的部署、管理和监控等功能,为运维人员管理Hadoop集群提供了强大的Web界面。

(12)Apache Chukwa:分布式的数据收集与传输系统。它可以将各种各样类型的数据收集与导入Hadoop。

(13)Apache Hama:基于HDFS的BSP并行计算框架。可用于包括图、矩阵和网络算法在内的大规模、大数据计算。

(14)Apache Giraph:基于Hadoop的分布式迭代图处理系统。灵感来自BSP (Bulk Synchronous Parallel) 和Google 的Pregel。

(15)Apache Crunch:基于Google的FlumeJava库编写的Java库。用于创建MR程序,与Hive、Pig类似,Crunch提供了用于实现如连接数据、执行聚合和排序记录等常见任务的模式库。

(16)Apache Whirr:一套运行于云服务的类库。提供高度的互补性,Whirr支持Amazon EC2和Rackspace服务。

(17)Apache Bigtop:针对Hadoop及其周边组件的打包、分发和测试工具。解决组件间版本依赖、冲突问题,实际上当用户用rpm或yum方式部署时,脚本内部会用到它。

(18)Apache HCatalog:基于Hadoop的数据表和存储管理工具。可用于管理HDFS元数据,它跨越Hadoop和RDBMS,可以利用Pig和Hive提供关系视图。

(19)Cloudera Hue:Hadoop及其生态圈组件的Web编辑工具。实现对HDFS、Yarn、MapReduce、Hbase、Hive、Pig等的Web化操作。

2、组件分类

(1)分布式存储:HDFS

(2)分布式操作系统:Yarn

(3)分布式处理算法:MapReduce

(4)分布式锁服务:ZooKeeper

(5)分布式数据库:Hbase、Cassandra

(6)工作流引擎:Oozie

(7)高层语言:Pig、Hive、Impala、RHadoop

(8)机器学习库:Mahout、Giraph、Hama、RHadoop

(9)元数据与表管理工具:Hcatalog

(10)数据传输工具:Flume、Avro、Chukwa、Sqoop

(11)集群管理工作:Ambari、Cloudera Manager

(12)各组件的Web化编辑器:Hue

(13)组件间版本依赖处理工具:BigTop

在这里插入图片描述

(二)部署概述

1、部署过程

Apache社区版分布式组件部署步骤:
(1)部署前提与规划;
(2)下载与此Hadoop版本兼容版本的Pig;
(3)解压,配置Pig;
(4)按需将解压且配置好的Pig发送到需要部署的机器上;
(5)新建相应用户、文件夹等,并赋予合适权限。

商业版(Cloudera或Hortonworks)部署步骤:
(1)部署前提与规划;
(2)部署,配置Pig;
(3)新建相应存储目录,并赋予合适权限。

  社区版部署须解决版本兼容与本地权限文件的问题,烦琐易错;Cloudera版本身已经解决了版本与权限问题,并且其部署时只要使用标准的Linux安装命令并做些中文配置即可。

2、部署规划

  集群共五台机器,cMaster为主节点,cProxy为主节点代理,其他为Slave节点,注意iClient并不属于集群,用户还须确保集群中所有机器和iClient都可以连网。如下表:部署约定。

系统CentOS-6.4 64bit
JDKjdk-7u45-linux-x64.rpm
集群cMaster、cSlave0、cSlave1、cSlave2、cProxy
客户端iClient
执行例题的机器iClient
执行例题时用户joe

  Hadoop和Hbase均采用Master/Slave架构体系,故其角色有Master、Slave之分;ZooKeeper为对等结构;Pig、Hive、Ooize与Mahout更像是Hadoop的一个客户端;作为一个数据传输工具,Flume必然有数据源和汇的说法,关于各个组件的部署规划,可见集群部署规划表,如下。

在这里插入图片描述
3、商用版Hadoop部署

(1)准备软硬件环境

  主要包括新建CentOS机器、修改机器名、添加域名映射、关闭防火墙、安装JDK。这步很关键,如果CentOS软件环境配置不正确,将不可能部署成功(即使部署成功,重启或过段时间后,集群将依旧会出现各种奇怪问题)。

(2)下载Cloudera的rpm文件

  由于纯净的CentOS并未记录Cloudera仓库位置,因此,须将Cloudera仓库位置信息加入本地yum库,当然有多种方式添加或新建仓库信息,这里介绍简单方式:安装Cloudera rpm。 下面以版本cloudera-cdh-5-0.x86_64.rpm为例,介绍如何下载。
  网页搜索“cIoudera doc”,依次点击“Documentation-Cloudera”→“CDH5 Documentation”→“CDH 5 Installation Guide”→“CDH 5 Installation”→“Installing CDH5”,在此页面中看到类似于“Red Hat/Centos/Oracle 6 link (64-bit)”,打开并确定此链接为cloudera-cdh-5-0.x86_64.rpm,接着下载即可。当然如果存在的话,读者可以下载更新版本,有时中间会有Beta字样,这表明此版本为测试版。

(3)将rpm文件复制到各CentOS

  本例中即将cloudera-cdh-5-0.x86_64.rpm复制到上面集群部署规划表中的6台机器。注意,6台机器必须都复制此文件。

(4)安装rpm文件

  这一步非常关键,它是部署Hadoop和Cloudera所有组件的前提条件。

$ sudo yum--nogpgcheck localinstall cloudera-cdh-5-0.x86_64.rpm    #以root权限、6台机器都要执行

(5)Hadoop部署规划

  Hadoop包含HDFS和Yarn两大服务,其中HDFS主服务称为namenode进程,应当运行在master机上,HDFS从服务运行datanode进程,正常部署在slave机器上,并且每个slave运行一个datanode。

在这里插入图片描述
(6)安装Hadoop

  按照规划表,下面将为每台机器安装合适进程,注意执行命令中的机器名与用户按照规划表,形如[root@cMaster~]表示在cMaster上,以root权限执行。

[root@cMaster ~]# sudo yum install hadoop-hdfs-namenode hadoop-yarn-resourcemanager
[root@cSlave0 ~]# sudo yum install hadoop-yarn-nodemanger hadoop-hdfs-namenode hadoop-mapreduce
[root@cSlave1 ~]# sudo yum install hadoop-yarn-nodemanger hadoop-hdfs-namenode hadoop-mapreduce
[root@cSlave2 ~]# sudo yum install hadoop-yarn-nodemanger hadoop-hdfs-namenode hadoop-mapreduce
[root@cProxy ~]# sudo yum install hadoop-mapreduce-historyserver hadoop-yarn-proxyserver
[root@iClient ~]# sudo yum install hadoop-client

(7)配置HDFS

  6台机器都要执行,且内容相同。
  在/etc/hadoop/conf/core-site.xml文档里configuration标签间加入如下内容:

<property><name>fs.defaultFS</name><value>hdfs://cMaster:8020</value></property>

  在/etc/hadoop/conf/hdfs-site.xml文档里configuration标签间加入如下内容:

<property><name>dfs.permissions.superusergroup</name><value>hadoop</value></property>
<property><name>dfs.namenode.name.dir</name><value>/data/dfs/nn</value></property>
<property><name>dfs.datanode.data.dir</name><value>/data/dfs/dn</value></property>

(8)建立本地目录

  cMaster上执行如下两条命令:

[root@cMaster ~]# sudo mkdir -p /data/dfs/nn
[root@cMaster ~]# sudo chown-R hdfs:hdfs /data/dfs/nn

  cSlave0、cSlave1、cSlave2上以root权限执行如下两条命令:

$ sudo mkdir-p /data/dfs/dn
$ sudo chown -R hdfs:hdfs /data/dfs/dn

(9)格式化存储主节点

[root@cMaster ~]# sudo -u hdfs hadoop namenode -format     #cMaster上以root权限执行

(10)启动HDFS服务

  cMaster上启动HDFS主服务namenode:

[root@cMaster ~]# sudo service hadoop-hdfs-namenode start     #cMaster上以root权限执行

  cSlave0、CSlave1、cSlave2上启动从服务,即以root权限执行如下命令:

$ sudo service hadoop-hdfs-datanode start     #start对应命令为stop、restart

(11)建立HDFS相关目录

  为防止某些进程使用tmp目录时发生权限问题,这里一开始就新建tmp日录并赋予最大权限,而其他目录则在下面Yarn配置中将会使用到,这里一并建立,注意这些目录都是HDFS里的目录。

[root@iClient ~]# sudo -u hdfs hdfs fs -mkdir /tmp                              #iClient上以root权限执行
[root@iClient ~]# sudo -u hdfs hadoop fs-chmod -R 1777 /tmp
[root@iClient ~]# sudo -u hdfs hdfs fs -mkdir -p /user/history
[root@iClient ~]# sudo -u hdfs hdfs fs -chmod-R 1777 /user/history
[root@iClient ~]# sudo -u hdfs hdfs fs -chown yarn /user/history
[root@iClient ~]# sudo -u hdfs hdfs fs -mkdir -p/var/log/hadoop-yarn
[root@iClient ~]# sudo -u hdfs hdfs fs -chown yarn:mapred /var/log/hadoop-yarn

(12)配置Yarn

  6台机器都须配置,且内容相同。
  在/etc/hadoop/conf/mapred-site.xml文档里configuration标签间加入如下内容:

<property><name>mapreduce.framework.name</name><value>yarn</value></property>
<property><name>mapreduce.jobhistory.address</name><value>cProxy:10020</value></property>
<property>
<name>mapreduce.jobhistory.webapp.address</name><value>cProxy:19888</value>
</property>
<property><name>yarn.app.mapreduce.am.staging-dir</name><value>/user</value></property>

  在/etc/hadoopl/conf/yarn-site.xml文档里configuration标签间加入如下内容:

<property><name>yarn.resourcemanager.hostname</name><value>cMaster</value></property>
<property><name>yarn.nodemanager.aux-services</name<value>mapreduce_shuffle</value></property>
<property><name>yarn.nodemanager.local-dirs</name><value>/data/yarn/local</value></property>
<property><name>yarn.nodemanager.log-dirs</name><value>/data/yarn/logs</value></property>
<property><name>yarn.web-proxy.address</name><value>cProxy:56800</value></property>
<property><name>yarn.log-aggregation-enable</name><value>true</value></property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name><value>/var/log/hadoop-yarn/apps</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

(13)建立本地目录

  cSlaveo、cSlavel、cSlave2上以root权限执行如下两条命令:

$ sudo mkdir -p /data/yarn/local /data/yarn/logs
$ sudo chown -R yarn:yarn /data/yarn/local /data/yarn/logs

(14)启动Yarn服务

  cMaster上启动Yarn主服务resourcemanager:

[root@cMaster ~]# sudo service hadoop-yarn-resourcemanager start    #cMaster上以root权限执行

  cSlave0、cSlavel、cSlave2上启动从服务,即root权限执行如下命令:

$ sudo service hadoop-yarn-nodemanager start     #3台slave上以root权限执行

  cProxy上启动RM的代理ProxyServer和MR历史任务管理进程historyserver:

[root@cProxy ~]# sudo service hadoop-yarn-proxyserver start
[root@cProxy ~]# sudo service hadoop-mapreduce-historyserver start

(15)Web界面与进程信息

  HDFS服务Web地址为“cMaster:50070”,Yarn服务Web地址为“cMaster:8088”,JobHistory服务Web地址为“cProxy:19888”,至于Yarn代理,只有当执行任务时才会暴露出来。当各个服务启动后,就可以使用Web界面查看了,当成功执行测试程序grep后,可以通过Web接口查看结果,此外还可以使用jps命令查看本机启动的服务进程名及其进程号,如在cMaster上执行:

[root@cMaster ~]# /usr/java/jdk1.7.0_45/bin/jps
2313 NameNode
2484 ResourceManager

二、ZooKeeper

(一)ZooKeeper简介

1、ZooKeeper工作过程

  Pa产生这条消息后将此消息注册到ZooKeeper中,Pb需要这条消息时直接从ZooKeeper中读取即可。

在这里插入图片描述
  ZooKeeper提供了松耦合交互方式,即交互双方不必同时存在,也不用彼此了解。比如Pa在ZooKeeper中留下一条消息后,进程Pa结束,此后进程Pb才刚开始启动。

在这里插入图片描述
  值得注意的是ZooKeeper服务本身也是不可靠的,比如运行ZooKeeper服务的机器宕机,则此服务将失效,为提高ZooKeeper可靠性,在使用ZooKeeper本身一般都以集群方式部署。

2、ZooKeeper工作原理

在这里插入图片描述
  首先会从中选择一个作为领导者,其他则作为追随者。读操作在各个节点上实现,写操作必须发送到领导者,并经领导者同意才可执行。

  ZooKeeper集群内选取领导时,内部采用的是原子广播协议,此协议是对Paxos算法的修改与实现。集群中ZooKeeper个数必须以奇数出现(3、5、7、9…),并且当构建ZooKeeper集群时,最少需3个节点。

(二)ZooKeeper 入门

1、ZooKeeper部署

  要取得ZooKeeper服务,首先须部署ZooKeeper,其实ZooKeeper可以只使用单机模式,考虑到集群完整性,下面直接进行集群部署,部署步骤如下。

(1)部署前提:集群已安装cloudera-cdh-5-0.x86_64.rpm

(2)部署规划:cSlave0,cSlave1,cSlave2上部署ZooKeeper服务。

(3)下载并安装ZooKeeper服务

$ sudo yum install zookeeper-server     #cSlave0、cSlavel、cSlave2上执行此命令

(4)初始化ZooKeeper

[root@cSlave0 ~]# sudo service zookeeper-server init --myid=1     #cSlave0上执行
[root@cSlave1 ~]# sudo service zookeeper-server init --myid=2     #cSlave1上执行
[root@cSlave2 ~]# sudo service zookeeper-server init --myid=3     #cSlave2上执行

(5)配置ZooKeeper

  将下述内容追加到/etc/zookeeper/conf/zoo.cfg文件中。

server.1=cSlave0:2888:3888
server.2=cSlave2:2888:3888
server.3=cSlave3:2888:3888 

  zoo.cfg是ZooKeeper的配置文档,其中ZooKeeper间正常交换信息时使用2888端口,选举领导时使用3888端口。还须注意的是,cSlave0、cSlave1和cSlave2这三台机器都要执行这个操作,即保持整个集群中ZooKeeper配置相同。

(6)启动ZooKeeper服务

$ sudo service zookeeper-server start      #cSlave0、cSlave1、cSlave2上执行

(7)查看ZooKeeper是否部署成功

$ netstat -an|grep 3888       #cSlave0、cSlave1、cSlave2上执行
$ netstat -an|grep 2888       #cSlave0、cSlave1、cSlave2上执行

  执行此命令后,用户可以看到,各ZooKeeper间正在使用此端口通信(选举领导等),用户还可以使用jps命令查看ZooKeeper服务进程,即:

$ /usr/java/jdk1.7.0_45/bin/jps -l     #cSlave0, cSlave1、cSlave2上执行

  用户能看到org.apache.zookeeper.server.quorum.QuorumPeerMain,表示ZooKeeper服务已经启动。

  虽然在ZooKeeper集群内,各个ZooKeeper有“领导者”和“追随者”之分,但在部署时没有Master/Slave之分,即在部署和使用时,可以将各台机器的ZooKeeper服务看成对等实体,直接部署与使用即可,无须关心ZooKeeper集群内部如何选举领导、谁是领导。

2、ZooKeeper接口

  ZooKeeper主要提供了Shell接口和编程接口,其中Shell接口提供了管理ZooKeeper最常用的操作,编程接口则更加灵活,比如使用ZooKeeper实现上文所述的两进程Pa与Pb通信等。

【例1】 按要求完成问题:①分别使用命令行接口和API接口,在ZooKeeper存储树中新建一节点并存入信息。②假设机器cSlave0上有进程Pa,机器cSlave2上有进程Pb,使用ZooKeeper实现进程Pa与Pb相互协作。

:对于问题①,用ZooKeeper命令行接口,在根目录(/)下新建节点cstorShell,并存入信息chinaCstorShell。

[root@cSlave0 ~]# zookeeper-client                                      #cSlave0上,进入ZooKeeper命令行
[zk: localhost:2181(CONNECTED) 0] ls /                                  #查看当前ZooKeeper目录结构
[zk: localhost:2181(CONNECTED) 0] create /cstorShell chinaCstorShell 
[zk: localhost:2181(CONNECTED) 0] ls /                                  #查看当前ZooKeeper目录结构
[zk: localhost:2181(CONNECTED) 0] ls /cstorShell                        #查看cstorShell节点目录结构
[zk: localhost:2181(CONNECTED) 0] get /cstorShell                       #获取cstorShell节点信息
[zk: localhost:2181(CONNECTED) 0] rmr /cstorShell                       #删除cstorShell节点
[zk: localhost:2181(CONNECTED) 0] ls / 
[zk: localhost:2181(CONNECTED) 0] help                                  #查看所有命令及其帮助行接口
[zk: localhost:2181(CONNECTED) 0] quit                                  #退出ZooKeeper命令

  使用API时,程序具有更大的灵活性。

public class Pa implements Watcher {
private static final int SESSION_TIMEOUT=5000;    //连接超时时间
private ZooKeeper zk;         //ZooKeeper实例
private CountDownLatch connectedSignal = new CountDownLatch(1);   //同步辅助线程类    
public void connect(String hosts)throws IOException,InterruptedException {   //连接ZooKeeper
zk = new ZooKeeper(hosts,SESSION_TIMEOUT, this);
connectedSignal.await();}
public void process(WatchedEvent event) {
if(event.getState()==KeeperState.SyncConnected) {
connectedSignal.countDown();}}
public void create(String groupName)throws KeeperException,InterruptedException {
String path = "/"+groupName;
String creatp;
creatp = zk.create(path,"chinaCstorJava".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
System.out.println("Created"+createdPath);}
public void close()throws InterruptedException {zk.close();}
public static void main(String[] args) throws Exception {Pa pa = new Pa();
pa.connect("cSlave0");
pa.create("cstorJava");
pa.close();}}

  假定此程序打包好后名为ZDemo.jar,存放于/root目录下,包名为com.cstore.book.zkp,并且规定在cSlave0上执行,执行命令如下所示,执行后,用户可进入ZooKeeper命令行,使用“Is/”查看结果。

[root@cSlave0 ~]# java -cp /root/ZDemo.jar com.cstore.book.zkp.Pa     #cSlave0执行Pa进程

  对于问题②,不防假设cSlave0上进程Pa向ZooKeeper新建目录cstorJava,并存入信息chinaCstorJava,此后进程Pa结束。此时cSlave2上启动进程Pb,读取ZooKeeper目录中cstorJava节点及其信息,结束。直接使用第一问中的Pa类,现在新建Pb类,其中Pb类只要将Pa类中的Pa换成Pb,并将create方法换成下面的getData方法:

public void getData(String groupName)throws KeeperException,InterruptedException {
String path = "/"+groupName;
String data = new String(zk.getData(path,false,null));
System.out.println("ZNode:"groupName+"n"+"Its data:"+data);}

  在cSlave0上执行完Pa后,在cSlave2上执行Pb即可。

[root@cSlave2 ~]# java -cp /root/ZDemo.jar com.cstore.book.zkp.Pb        #cSlave2上执行Pb进程

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

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

相关文章

Mybatis 系列全解(2)——全网免费最细最全,手把手教,学完就可做项目!

Mybatis 系列全解&#xff08;2&#xff09; 1. ResultMap结果集映射2. 日志2.1 日志工厂2.2 log4j 3. 分页3.1 实现SQL分页3.2 RowBounds 分页3.3 分页插件 4. 使用注解开发4.1 面向接口编程4.2 使用注解4.3 Mybatis 详细执行过程4.4 CRUD 增删改查 5. Lombok 1. ResultMap结果…

Android Studio中HAXM安装失败的解决方案(HAXM installation failed)

文章目录 错误示例Hyper-VWindows SandboxWindows Hypervisor Platform&#xff08;Windows 虚拟化监控程序平台&#xff09; 出现原因解决方法虚拟机平台方案一方案二方案三 错误示例 表明HAXM (Hardware Accelerated Execution Manager)安装失败了。HAXM是一个硬件辅助虚拟化…

查询DBA_TEMP_FILES报错,删除临时表空间报错ORA-60100

SYMPTOMS 查询DBA_TEMP_FILES报错如下图 ORA-01157: cannotidentify/ock data fle 201 -see DBWR trace fle ORA-01110: data fle 20 1: D:APPADMINISTRATORIORADATA MARTIDATAFILE 01157,00000-"cannotidentify/ock data fle %s -see DBWR trace fle"*Cause: The b…

番外篇 | YOLOv8改进之利用轻量化卷积PConv引入全新的结构CSPPC来替换Neck网络中的C2f | 模型轻量化

前言:Hello大家好,我是小哥谈。本文使用轻量化卷积PConv替换Neck中C2f模块中Bottleneck里的传统卷积核得到CSPPC模块,使得模型更加轻量化。🌈 目录 🚀1.基础概念 🚀2.网络结构 🚀3.添加步骤 🚀4.改进方法 🍀🍀步骤1:block.py文件修改 🍀🍀步…

【MySQL】数据库事务详解

文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账&#xff0c;A 给 B 转账 100 块钱&…

【Text2SQL 论文】MCS-SQL:利用多样 prompts + 多项选择来做 Text2SQL

论文&#xff1a;MCS-SQL: Leveraging Multiple Prompts and Multiple-Choice Selection For Text-to-SQL Generation ⭐⭐⭐ arXiv:2405.07467 一、论文速读 已有研究指出&#xff0c;在使用 LLM 使用 ICL 时&#xff0c;ICL 的 few-shot exemplars 的内容、呈现顺序都会敏感…

Apple - View Programming Guide

本文翻译整理自&#xff1a;View Programming Guide&#xff08;更新&#xff1a;2013-08-08 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaViewsGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40002978-CH1-SW1 文章目录…

Java学习笔记(多线程):CompetableFuture

本文是自己的学习笔记&#xff0c;主要参考资料如下 https://www.cnblogs.com/dolphin0520/p/3920407.html JavaSE文档 https://blog.csdn.net/ThinkWon/article/details/102508721 1、Overview2、重要参数3、主要方法3.1、创建实例&#xff0c;获取返回值3.2、线程执行顺序相关…

基于Springboot+Vue的校友社交系统(带1w+文档)

基于SpringbootVue的校友社交系统(带1w文档) 校友社交系统作为一种典型的管理系统也迅速的发展并深入人们的日常生活中&#xff0c;它使用户足不出户就可以管理自己的校友社交信息等&#xff0c;最大化减缩了用户的管理时间&#xff0c;提高了管理效率。 项目简介 基于SSMVUE的…

【TB作品】MSP430G2553,单片机,口袋板, 烘箱温度控制器

题3 烘箱温度控制器 设计一个基于MSP430的温度控制器&#xff0c;满足如下技术指标&#xff1a; &#xff08;1&#xff09;1KW 电炉加热&#xff0c;最度温度为110℃ &#xff08;2&#xff09;恒温箱温度可设定&#xff0c;温度控制误差≦2℃ &#xff08;3&#xff09;实时显…

llm-universe | 四. 构建RAG应用

构建RAG应用 一.将LLM 接入 LangChain二.构建检索问答链1.加载向量数据库2.创建一个 LLM3.构建检索问答链4.检索问答链效果测试5.添加历史对话的记忆功能5.1 记忆&#xff08;Memory&#xff09;5.2 对话检索链&#xff08;ConversationalRetrievalChain&#xff09; 三. 部署知…

【论文阅读】-- Temporal Summary Images:通过交互式注释生成和放置实现叙事可视化的方法

Temporal Summary Images: An Approach to Narrative Visualization via Interactive Annotation Generation and Placement 摘要1 引言2 背景及相关工作2.1 叙事可视化和讲故事2.2 显示面向时间的数据2.3 小倍数和漫画2.4 注释可视化 3 设计要求和工作流程3.1 工作流程3.2 TSI…

input()函数——输入

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 input()函数可以提示并接收用户的输入&#xff0c;将所有的输入按照字符串进行处理&#xff0c;并返回一个字符串&#xff0c;input()函数的…

C3P0数据库连接池

目录 一&#xff1a;连接池介绍 1.1连接池解决的问题 2.常用的数据库连接池 二&#xff1a;c3p0介绍 2.1C3P0介绍&#xff1a; 2.2C3P0快速入门 1.常用参数说明 2.API介绍 3.使用步骤 1.导入jar包c3p0-0.9.1.2.jar 2.编写c3p0-config.xml配置文件&#xff0c;配置对…

统信UOS上鼠标右键菜单中添加自定义内容

原文链接&#xff1a;统信UOS上鼠标右键菜单中添加自定义内容 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS桌面操作系统上鼠标右键菜单中添加自定义内容的文章。通过自定义鼠标右键菜单&#xff0c;可以大大提升日常操作的效率和便捷性。本文将详细…

KVM网络模式设置

一、KVM网络模式介绍 1、NAT ( 默认上网 ) 虚拟机利用host机器的ip进行上网,对外显示一个ip;virbr0是KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供NAT访问外网的功能,默认ip为192.168.122.1 2、自带的Bridge 将虚拟机桥接到host机器的网卡上,vm和ho…

SOA和ESB介绍

SOA&#xff08;面向服务的架构&#xff09; 面向服务的架构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;是一种设计理念&#xff0c;用于构建松耦合的、可互操作的、模块化的服务。在SOA架构中&#xff0c;应用程序被划分为一系列的服务&#xff0c…

202485读书笔记|《我还有一片风景要完成》——溪水急着要流向海洋 浪潮却渴望重回土地 弱水长流,我只能尽一瓢饮,世界大千,我只能作一瞬观

202485读书笔记|《我还有一片风景要完成》——溪水急着要流向海洋 浪潮却渴望重回土地 弱水长流&#xff0c;我只能尽一瓢饮&#xff0c;世界大千&#xff0c;我只能作一瞬观 《华语散文温柔的一支笔&#xff1a;张晓风作品集&#xff08;共5册&#xff09;》张晓风&#xff0c…

分享一个微信管理工具

聚合管理多个微信号 1、聚合聊天 支持多微信账号消息&#xff0c;在统一端口接收回复 2、话题素材库 可提前把话题准备好用到的时候一键发送 3、朋友圈互动 支持在聊天窗口直接看到当前客户朋友圈实时点赞评论互动 批量多号添加好友 1、批量添加联系人&#xff0c;导入联系…

C#基于SkiaSharp实现印章管理(2)

上一篇文章最后提到基于System.Text.Json能够序列化SKColor对象&#xff0c;但是反序列化时却无法解析本地json数据。换成Newtonsoft.Json进行序列化和反序列化也是类似的问题。   通过百度及查看微软的帮助文档&#xff0c;上述情况下需自定义转换类以处理SKColor类型数据的…