CDH6.3.1离线安装

一、从官方文档整体认识CDH

官方文档地址如下:

CDH Overview | 6.3.x | Cloudera Documentation

CDH是Apache Hadoop和相关项目中最完整、测试最全面、最受欢迎的发行版。CDH提供Hadoop的核心元素、可扩展存储和分布式计算,以及基于Web的用户界面和重要的企业功能。是唯一一个提供统一批处理、 交互式SQL和交互式搜索以及基于角色的访问控制的Hadoop解决方案。

下面是官方的组件架构图:

二、安装包下载

现在官网下载需要注册,百度网盘共享一份出来,整个过程所需的安装包都在里面了,能不能给个👍

链接: https://pan.baidu.com/s/1Qc4S93QB8krrcFmXqQwNNA 提取码: jfji 

三、VMware准备三台Linux操作虚拟机

在我的博客<cdh适配国产化操作系统>中有讲到CDH支持的操作系统以及版本,有在国产化操作系统上安装的需求可以看我这一份博客,这次我们选择CDH支持的最高版本操作系统:Centos7.9

后面按照步骤和提示走就行,因为是离线安装,这里选择仅主机模式

根据做好的一台的源文件目录复制两份修改下名字,再从VMware打开就好

离线虚拟机资源情况
主机名ip内存磁盘操作系统备注
cdh1192.168.200.1313G30Gcentos7.9后面升级到了6G
cdh2192.168.200.1323G30Gcentos7.9
cdh3192.168.200.1333G30Gcentos7.9

四、环境准备

用SecureCRT分别连接三台服务器,方便以后批量操作(需要先关闭每台服务器上的防火墙)

选择 View>Chat Window

右键选择Send chat to all tabs

如果服务器时间不是东八区时间,需要修改/etc/localtime的软连接指向

unlink /etc/localtime

ln -s  /usr/share/zoneinfo/UTC  /etc/localtime

1、修改主机名

vi /etc/hostname 或 hostnamectl set-hostname 主机名

检测:hostname

2、修改域名映射

vi /etc/hosts

末尾追加

192.168.200.131   cdh1
192.168.200.132   cdh2
192.168.200.133   cdh3

3、关闭防火墙

systemctl stop firewalld

查看防火墙状态

systemctl status firewalld

永久关闭防火墙

systemctl disable firewalld.service

4、关闭selinux

vi /etc/selinux/config

SELINUX=enforcing 改为 SELINUX=disabled

5、永久关闭ipv6

vi /etc/sysctl.conf

# 禁用整个系统所有接口的IPv6,可以只简单的设置这一个参数,用来关闭所有接口的 IPv6

net.ipv6.conf.all.disable_ipv6=1

# 禁用某一个指定接口的IPv6(例如:eth0, eth1)

net.ipv6.conf.eth0.disable_ipv6=1

net.ipv6.conf.eth1.disable_ipv6=1

6、设置swap空间

临时修改

sysctl vm.swappiness=0

 # 查看是否修改成功

cat /proc/sys/vm/swappiness

永久修改

echo 'vm.swappiness=0' >> /etc/sysctl.conf

# 执行以下命令,可以让修改立即生效

sysctl -p

7、关闭大页面压缩

临时生效

echo never > /sys/kernel/mm/transparent_hugepage/defrag

echo never > /sys/kernel/mm/transparent_hugepage/enabled

永久生效

echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.local

echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local

chmod +x /etc/rc.local

8、最大数限制

vi /etc/security/limits.conf

* soft nofile 65535
* hard nofile 1024999
* soft nproc 65535
* hard noroc 65535
* soft memlock unlimited
* hard memlock unlimited

如果不修改,计算数据量增大时会报 打开的文件数过多 错误 ,因为linux处处皆文件,所以也会限制socket打开的数量,当各个节点数据传输增大时就会导致整个错暴漏出来

9、操作系统内核调优-网络部分

vi /etc/sysctl.conf

net.ipv4.ip_local_port_range = 1000 65534
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_tw_recycle=1

如果 小文件特别多,错误文件特别多(主要时受损的压缩文件) 这个时候就会报如下错:

23/11/28 17:11:58 WARN hdfs.DFSClient: Failed to connect to /10.183.243.230:9866 for block BP-1901849752-10.183.243.230-1672973682151:blk_1074692119_951295, add to deadNodes and continue.

java.net.BindException: Cannot assign requested address

“Cannot assign requested address.”是由于linux分配的客户端连接端口用尽,无法建立socket连接所致,虽然socket正常关闭,但是端口不是立即释放,而是处于TIME_WAIT状态,默认等待60s后才释放,端口才可以继续使用。在http查询中,需要发送大量的短连接,这样的高并发的场景下,就会出现端口不足,从而抛出Cannot assign requested address的异常。

查看当前linux系统的可分配端口

cat /proc/sys/net/ipv4/ip_local_port_range

32768 60999

当前系统的端口数范围为32768~60999, 所以能分配的端口数为28231。如果我的连接数达到了28231个,就会报如上错误。

1、修改端口范围

vi /etc/sysctl.conf

#1000到65534可供用户程序使用,1000以下为系统保留端口

net.ipv4.ip_local_port_range = 1000 65534

2、配置tcp端口的重用配置,提高端口的回收效率

vi /etc/sysctl.conf

#调低端口释放后的等待时间,默认为60s,修改为15~30s 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。

net.ipv4.tcp_fin_timeout=30

#修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用

net.ipv4.tcp_timestamps=1

#修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1 需要开启net.ipv4.tcp_timestamps该参数才有效果

#更不为提到却很重要的一个信息是:当tcp_tw_recycle开启时(tcp_timestamps同时开启,快速回收socket的效果达到),对于位于NAT设备后面的Client来说,是一场灾难——会导到NAT设备后面的Client连接Server不稳定(有的Client能连接server,有的Client不能连接server)。也就是说,tcp_tw_recycle这个功能,是为“内部网络”(网络环境自己可控——不存在NAT的情况)设计的,对于公网,不宜使用。

net.ipv4.tcp_tw_recycle=1

10、重启机器使以上配置生效

reboot

11、时间同步

将ntp安装包上传至三台服务器/opt/software

cd /opt/software/ntp_rpm

需要用root用户来安装

rpm -Uvh *.rpm --nodeps --force

配置:

vi /etc/ntp.conf

这里选的cdh1为master,cdh2、cdh3为slaver

master:

注释掉其他server

填写

server 127.127.1.0
fudge 127.127.1.0 stratum 8

限制从节点ip段信息,可以不配置

restrict 192.168.200.0 mask 255.255.255.0 nomodify notrap

slaver:

server 192.168.200.131

启动、查看状态命令

systemctl status ntpd

systemctl restart ntpd

设置自动启动

systemctl enable ntpd

报错:

/lib64/libcrypto.so.10: version `OPENSSL_1.0.2' not found (required by /usr/sbin/ntpd)

解决

备份原有libcrypto.so.10

mv /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.10_bak

从其他服务器找到对应的so文件复制到/usr/lib64目录下

cp libcrypto.so.1.0.2k /usr/lib64/libcrypto.so.10

手动同步

ntpdate -u ip

查看同步状态

ntpdc -np

ntpstat

12、安装java

解压并重置目录

tar -xzvf jdk-8u181-linux-x64.tar.gz

mkdir /usr/java

mv jdk1.8.0_181 /usr/java

配置环境变量

vi /etc/profile

export JAVA_HOME=/usr/java/jdk1.8.0_181
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

刷新配置

source /etc/profile

验证:

java -version

13、安装scala

rpm安装

rpm -Uvh scala-2.11.12.rpm --nodeps --force

验证:

scala -version

14、安装mysql

选择再cdh1上安装mysql

解压并重置目录

tar -xvf mysql-5.7.11-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.7.11-linux-glibc2.5-x86_64 /usr/local/mysql

创建数据目录:

mkdir -p /data/mysql

编辑my.cnf配置文件

vi /etc/my.cnf

bind-address=0.0.0.0
port=3306
user=root
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
!includedir /etc/my.cnf.d

初始化

cd /usr/local/mysql/bin/

./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=root --initialize

记录这个临时密码:mF/bkx<)O1G,

启动mysql,并更改root 密码

cd /usr/local/mysql/support-files

cp mysql.server mysql

mv mysql /etc/init.d/

service mysql start

登录并修改密码

/usr/local/mysql/bin/mysql -uroot -p

alter user 'root'@'localhost' identified by 'test_1234';

grant all privileges on *.* to 'root'@'localhost' identified by 'test_1234' with grant option;

flush privileges;

创建Cloudera Manager用户和Hive metastore 相关用户(注意下面的大写不能修改成小写)

create database cmf default character set utf8;

create database hive default character set utf8;

GRANT ALL PRIVILEGES ON  cmf.* TO 'cmf'@'%' IDENTIFIED BY 'test_1234';

GRANT ALL PRIVILEGES ON  hive.* TO 'hive'@'%' IDENTIFIED BY 'test_1234';

flush privileges;

重命名并在固定路径放置mysql驱动包

mkdir -p /usr/share/java/

cp /opt/software/mysql-connector-java-5.1.47.jar /usr/share/java/mysql-connector-java.jar

chmod 777 -R /usr/share/java

15、离线按照CDH相关服务

解压

tar -xzvf cm6.3.1-redhat7.tar.gz

查看CDH相关安装文件

cd /opt/software/cm6.3.1/RPMS/x86_64

ls -lh

主节点(cdh1)执行:

rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm --nodeps --force

rpm -ivh cloudera-manager-server-6.3.1-1466458.el7.x86_64.rpm --nodeps --force

rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm --nodeps --force

从节点(cdh2、cdh3)执行:

rpm -ivh cloudera-manager-daemons-6.3.1-1466458.el7.x86_64.rpm --nodeps --force

rpm -ivh cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm --nodeps --force

agent配置修改(因为所有节点都安装了agent,因此都需要执行,cdh1是server角色的主机名)

sed -i "s/server_host=localhost/server_host=cdh1/g" /etc/cloudera-scm-agent/config.ini

server配置修改(cdh1节点)

vi /etc/cloudera-scm-server/db.properties

com.cloudera.cmf.db.type=mysql
com.cloudera.cmf.db.host=mysql主机ip或者域名:端口(127.0.0.1:3306)
com.cloudera.cmf.db.name=cmf
com.cloudera.cmf.db.user=cmf
com.cloudera.cmf.db.password=test_1234
com.cloudera.cmf.db.setupType=EXTERNAL

16、安装httpd

只需要部署一台就行,这里选择cdh1

cd /opt/software/httpd_rpm

rpm -Uvh *.rpm --nodeps --force

17、部署离线parcel源

mkdir -p /var/www/html/cdh6_parcel

cp CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel /var/www/html/cdh6_parcel

cp CDH-6.3.1-1.cdh6.3.1.p0.1470567-el7.parcel.sha1 /var/www/html/cdh6_parcel

cp manifest.json /var/www/html/cdh6_parcel

启动httpd

systemctl start httpd

浏览器可以访问到

18、启动Server和Agent

Server节点执行(cdh1)

systemctl enable cloudera-scm-server

systemctl start cloudera-scm-server

查看节点状态

systemctl status cloudera-scm-server

查看日志

cd /var/log/cloudera-scm-server

tail -f cloudera-scm-server.log 

出现0.0.0.0:7180即为成功

Agent执行(三台全部执行)

systemctl enable cloudera-scm-agent

systemctl start cloudera-scm-agent

查看节点状态

systemctl status cloudera-scm-agent

五、根据页面指引安装

浏览器输入网址:http://192.168.200.131:7180/cmf/login

 默认用户名密码都为admin

继续

 勾选接收条款,继续

我们这里选择免费版,继续(如果选择试用版,到期不续费会自动转成免费版)

继续

起个自己喜欢的名字,继续

选择所有主机,继续(可以看到提示:在Cloudera Express中,您最多可以在100台主机上安装CDH 6.0或更高版本,即免费版本最多支持100台节点,对于我们学习和中小公司已经够用了)

点击更多选项,把我们自己部署的离线parcel源地址填写上去(尽量写到第一行,不然可能识别不到),继续

已经开始下载并往各个节点分发parce包了 

全部过程走完后自动跳到下一页

分别点击 Inspect Network Performance (检查网络性能)和  Inspect Hosts (检查主机连通性)

检查完我们勾选第3项(I understand the risks, let me continue with cluster setup.我了解风险,让我继续进行集群设置)继续,下面我们开始安装所需要的服务

我们先选择自定义服务,以后学习一项技术我们安装一个组件(cdh这点非常好,全程界面安装,无需自己配置),继续

这里需要自己安排组件的哪些角色安装到哪些节点上,我们需要根据自己的机器性能和组件特性来合理安排,这里给出一些基本原则

1、内存最大的节点给NameNode

2、内存第二大的节点给ResourceManager 

3、NameNode和secondaryNameNode不设置在同一节点

4、HiveMetastoreServer 和mysql 放在一个节点

5、Spark HistoryServer、YARN 的 JobHistory Server 和 NameNode 不放在同一节点上

填写hive、cmf在mysql中的相关信息,点击测试连接,点击继续

这里可以设置服务的详细配置,如果你的机器有挂载数据盘,尽量将所有数据目录指向你的数据盘,因为系统盘一般都支撑不了真实的业务,如果你公司对网络端口也有限制,需要在这里修改成符合公司网络管理的端口,继续

开始首次运行,我们静等是否报错(报错 -> 看日志 -> 解决报错)

经过重重解决,只留下了警告提示,主要原因都是虚拟机的配置太低了(磁盘不足),但是小数据量的测试还是可以的。

六、问题列举与解决

问题1:节点资源不足

安装过程中报错很正常,不要灰心,兵来将挡,水来土掩

先看下日志

[Errno 2] No such file or directory: '/var/log/zookeeper/zookeeper-cmf-zookeeper-SERVER-cdh1.log'

服务器上看了下,只有/var/log/zookeeper 目录,没有我们就创建一个试试

touch zookeeper-cmf-zookeeper-SERVER-cdh1.log

chown zookeeper:zookeeper zookeeper-cmf-zookeeper-SERVER-cdh1.log

重新运行下发现点不动了,我们进入首页看看哪个组件还报错,着重看下

Cloudera Manager Server GC cpu usage is at 10% or more of total process time. 

还是节点性能问题,给cdh1的内存增加3G核数增加1个,重启看看

解决,但出现了第二个问题:时钟偏差

问题2:时钟偏差

我们手动同步下(cdh2、cdh3执行下)

ntpdate -u cdh1

静等一会儿,少了一个

再等一会儿,就都没有了,实在不行就重启下ntp服务。最终都同步了

问题3:Yarn组件启动失败

看日志是权限问题,手动创建也报权限问题

mkdir: Permission denied: user=root, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x

我们可以使用hdfs用户赋权下,也可以在HDFS界面上取消掉权限校验选项

问题4:Spark组件启动失败

File does not exist: hdfs://cdh2:8020/user/spark/applicationHistory

手动创建下该目录

hadoop fs -mkdir -p /user/spark/applicationHistory

问题5:Hive不能正常使用

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

需要初始化下元数据

/opt/cloudera/parcels/CDH-6.3.1-1.cdh6.3.1.p0.1470567/lib/hive/bin/schematool -dbType mysql -initSchema

 

 发现还是默认derby的,因此需要将hive-site.xml 中的hive元数据配置和连接数据库的驱动修改一下(为什么不在界面上改,因为我发现cm界面上是正确的,hive-site.xml中却没有相关配置,应该是最初启动是没有初始化成功,这不就导致了一致性问题吗,是不是cdh的一个bug,哈哈

vi /etc/hive/conf.cloudera.hive/hive-site.xml

  <property>
    <name>hive.metastore.db.type</name>
    <value>mysql</value>
    <description>元数据库类型指定为使用mysql</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>指定mysql的驱动</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>指定元数据库用户</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>test_1234</value>
    <description>指定元数据库密码</description>
  </property>
 <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://cdh1:3306/hive?createDatabaseIfNotExist=true</value>
    <description>指定mysql连接串</description>
  </property>

 再次执行初始化,成功

界面重启hive,命令行创建成功

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

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

相关文章

蓝桥杯备战刷题three(自用)

1.合法日期 #include <iostream> #include <map> #include <string> using namespace std; int main() {map<string,int>mp;int days[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};for(int i1;i<12;i){for(int j1;j<days[i];j){string sto_strin…

Vivado Vitis 2023.2 环境配置 Git TCL工程管理 MicroBlaze和HLS点灯测试

文章目录 本篇概要Vivado Vitis 环境搭建Vivado 免费标准版 vs 企业版Vivado Windows 安装Vivado 安装更新 Vivado 工程操作GUI 创建工程打开已有工程从已有工程创建, 重命名工程GUI导出TCL, TCL复原工程TCL命令 Vivado 版本控制BlinkTcl脚本新建导出重建工程纯Verilog BlinkTc…

[CISCN2019 华北赛区 Day2 Web1]Hack World 1 题目分析与详解

一、分析判断 进入靶机&#xff0c;主页面如图&#xff1a; 主页面提供给我们一条关键信息&#xff1a; flag值在 表flag 中的 flag列 中。 接着我们尝试输入不同的id&#xff0c;情况分别如图&#xff1a; 当id1时&#xff1a; 当id2时&#xff1a; 当id3时&#xff1a; 我…

YOLOv8改进涨点,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说&#xff0c;巨大的模型很难达到实时检测的要求。而且&#xff0c;由大量深度可分离卷积层构…

C++:常量表达式

C11开始constexpr作为一种声明&#xff0c;为编译器提供了在编译期间确认结果的优化建议&#xff0c;满足部分编译期特性的需求 constexpr和const区别 int b10; const int ab; //运行成功 constexpr int cb; //编译器报错&#xff0c;b的值在编译期间不能确定 const int size1…

面试笔记系列二之java基础+集合知识点整理及常见面试题

目录 Java面向对象有哪些特征&#xff0c;如何应用 Java基本数据类型及所占字节 Java中重写和重载有哪些区别 jdk1.8的新特性有哪些 内部类 1. 成员内部类&#xff08;Member Inner Class&#xff09;&#xff1a; 2. 静态内部类&#xff08;Static Nested Class&#…

Vue 组件和插件:探索细节与差异

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

Linux查看进程占用句柄

ps -ef |grep python # 查找工具执行PID python pid 11287lsof -p 11287 |wc -l 查看进程占用句柄设置句柄上限IOError: [Errno 24] Too many open files:解决方法

阿里云短信验证笔记

1.了解阿里云的权限操作 进入AccessKey管理 选择子用户 创建用户组和用户 先创建用户组&#xff0c;建好再进行权限分配 添加短信管理权限 创建用户 创建好后的id和密码在此处下载可以得到 2.开通阿里云短信服务 进行申请&#xff0c;配置短信模板 阿里云短信API文档 短信服务…

逆向案例三:动态xhr包中AES解密的一般步骤,以精灵数据为例

补充知识&#xff1a;进行AES解密需要知道四个关键字&#xff0c;即密钥key,向量iv,模式mode,填充方式pad 一般网页AES都是16位的&#xff0c;m3u8视频加密一般是AES-128格式 网页链接:https://www.jinglingshuju.com/articles 进行抓包结果返回的是密文&#xff1a; 一般思…

【算法大家庭】分治算法

目录 &#x1f953;1.简单介绍 &#x1f9c8;2.汉诺塔问题 1.简单介绍 分治算法是解决问题的一种思想&#xff0c;它将一个大问题分解成若干个小问题&#xff0c;然后分别解决这些小问题&#xff0c;最后将小问题的解合并起来得到原问题的解。 分解&#xff1a;将原问题分解…

Mazing官方 2.17.17版新i功能介绍

iMazing官方 2.17.17版是一款管理苹果设备的软件&#xff0c;是一款帮助用户管理 IOS 手机的PC端应用程序&#xff0c;能力远超 iTunes 提供的终极 iOS 设备管理器。在iMazing官方版上与苹果设备连接后&#xff0c;可以轻松传输文件&#xff0c;浏览保存信息等&#xff0c;功能…

SD-WAN对云服务的影响

近年来&#xff0c;随着企业对云服务的依赖不断增加&#xff0c;SD-WAN技术成为提升连接性能的热门选择。SD-WAN通过简化云集成和连接&#xff0c;以及提升应用程序性能&#xff0c;为企业带来显著的业务优势。这种云连接的改进使企业能够更轻松地接触全球劳动力和潜在客户。 首…

语文专刊《中学语文》是什么级别的刊物?

语文专刊《中学语文》是什么级别的刊物&#xff1f; 《中学语文》创刊于1958年&#xff0c;由国家新闻出版总署批准&#xff0c;经湖北省教育厅主管的省级学术期刊。 《中学语文》是由湖北大学文学院主办、国内外公开发行的学术期刊&#xff0c;主要面向中学语文教师和语文教…

盘点:好用的伪原创文章生成器软件

伪原创文章生成器软件在内容创作域领应用的非常广泛&#xff0c;它不仅可以为创作人员解决文章或文案创作困难的问题&#xff0c;同时还可以作为提升创作效率的完美工作&#xff0c;然而随着互联网技术的发展&#xff0c;互联网上的伪原创文章生成器软件多到让人应接不暇&#…

echarts鼠标事件

鼠标事件支持方法 ECharts 支持常规的鼠标事件类型&#xff0c;包括 ‘click’、 ‘dblclick’、 ‘mousedown’、 ‘mousemove’、 ‘mouseup’、 ‘mouseover’、 ‘mouseout’、 ‘globalout’、 ‘contextmenu’ 事件 简单实例 // 基于准备好的dom&#xff0c;初始化EChar…

加州大学圣地亚哥分校伯克利分校联合英伟达最新开源!COLMAP-Free 3D Gaussian Splatting

作者&#xff1a;石昊 | 来源&#xff1a;3DCV 在公众号「3DCV」后台&#xff0c;回复「原论文」可获取论文pdf 添加微信&#xff1a;dddvision&#xff0c;备注&#xff1a;3D高斯&#xff0c;拉你入群。文末附行业细分群 从图像序列中进行相机姿态估计和新视角合成的问题。…

论文笔记:A survey on zero knowledge range proofs and applications

https://link.springer.com/article/10.1007/s42452-019-0989-z 描述了构建零知识区间证明&#xff08;ZKRP&#xff09;的不同策略&#xff0c;例如2001年Boudot提出的方案&#xff1b;2008年Camenisch等人提出的方案&#xff1b;以及2017年提出的Bulletproofs。 Introducti…

Win11系统实现adb命令向安卓子系统安装APP

Win11系统实现通过adb命令向安卓子系统安装已下载好的apk包。 要实现以上目标&#xff0c;我们需要用到一个Android SDK 的组件Android SDK Platform-Tools &#xff01;这个组件呢其实是被包含在 Android Studio中的&#xff0c;如果你对安卓开发有所了解对此应该不会陌生&…

【Unity】如何在Unity 中创建带有缩放效果的滚动视图(具有吸附效果的实现与优化)?

效果预览&#xff1a; 目录 效果预览&#xff1a; 一、引言&#xff1a; 二、问题描述 三、解决方案&#xff1a; 三、优化&#xff1a; 四、结论 一、引言&#xff1a; 在Unity开发中&#xff0c;经常需要实现滚动视图&#xff08;ScrollView&#xff09;中的内容吸附到…