草庐IT

详解Linux运维工程师高级篇(大数据安全方向)

大数据陈浩 2023-03-28 原文
详解linux运维工程师高级篇(大数据安全方向)


简介:

       从运维青铜到运维白银再到运维黄金,这里就要牵扯到方向问题也就是装备,根据自己的爱好,每个人都应该选择一个适合自己和喜欢自己的一个职业技术方向,如:大数据安全,开发运维,云计算运维等等。而掌握的越多前言技术也就是更多的装备,才能更好的在it行业混下去,毕竟it技术更新太快,初级篇和中级篇前面已介绍。


初级篇:详解Linux运维工程师入门必备技能(青铜)

中级篇:详解Linux运维工程师打怪升级篇(白银)


现在给大家介绍大数据安全的正式面目:

1.大数据基本组件

2. Hadoop安全背景

 共享集群

 按照业务或应用的规则划分资源队列,并分配给

特定用户

 HDFS上存放各种数据,包括公共的、机密的

 安全认证:确保某个用户是自己声称的那个用户

 安全授权:确保某个用户只能做他允许的那些操作

3. 设备说明

服务

IP

主机名

系统

Ambari

Kerberos

192.168.2.140

hdp140

CentOS 7.3

namenode

192.168.2.141

hdp141

CentOS 7.3

datanode

192.168.2.142

hdp142

CentOS 7.3

datanode

192.168.2.143

hdp143

CentOS 7.3

4. kerberos基本概念:

 Principal(安全个体):被认证的个体,有一个名字和口令

 KDC(key distribution center ) : 是一个网络服务,提供ticket 和临时会话密钥

 Ticket:一个票据,客户用它来向服务器证明自己的身份,包括客户标识、会话密钥、时间戳。

 AS (Authentication Server): 认证服务器

 TGS(Ticket Granting Server): 许可证服务器

 TGT:Ticket-granting Ticket

5. kerberos认证过程:


6. 集群启用Kerberos认证

装KDC Server

1. 安装一个新的KDC Server(任意一个集群主机,这里hdp141为例)

# yum install krb5-server krb5-libs krb5-workstation

2. 打开KDC Server的配置文件

# vi /etc/krb5.conf

修改文件中的[realms]部分,将为属性kdc和admin_server设置的默认值“kerberos.example.com”替换成实际KDC server的主机名。在下面的例子中,“kerberos.example.com”被替换成了 “my.kdc.server”。

[realms] EXAMPLE.COM = { kdc = my.kdc.server admin_server = my.kdc.server }

3. (可选)自定义realms配置(EXAMPLE.COM修改为CESHI.COM,下面例子都为CESHI.COM)

# vi /etc/krb5.conf [logging]  default = FILE:/var/log/krb5libs.log  kdc = FILE:/var/log/krb5kdc.log  admin_server = FILE:/var/log/kadmind.log   [libdefaults]  default_realm = CESHI.COM  dns_lookup_realm = false  dns_lookup_kdc = false  ticket_lifetime = 24h  renew_lifetime = 7d  forwardable = true   [realms]  CESHI.COM = {   kdc = hdp141   admin_server = hdp141  }   [domain_realm]  .vrv.com = CESHI.COM  vrv.com = CESHI.COM # vi /var/kerberos/krb5kdc/kdc.conf [kdcdefaults]  kdc_ports = 88  kdc_tcp_ports = 88   [realms] CESHI.COM = {   #master_key_type = aes256-cts   acl_file = /var/kerberos/krb5kdc/kadm5.acl   dict_file = /usr/share/dict/words   admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab   supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal  }4.创建Kerberos数据库

创建过程中需要输入master key。

# kdb5_util create -s Loading random data Initializing database '/var/kerberos/krb5kdc/principal' for realm 'CESHI.COM', master key name 'K/M@CESHI.COM' You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter KDC database master key: ceshi123456. Re-enter KDC database master key to verify: ceshi123456.5.启动KDC

# service krb5kdc start # chkconfig krb5kdc on # service kadmin start # chkconfig kadmin on6.创建kerberos Admin

 通过创建一个admin principal创建KDC admin,需要输入principal的密码。

# kadmin.local -q "addprinc admin/admin" Authenticating as principal root/admin@CESHI.COM.COM with password. WARNING: no policy specified for admin/admin@CESHI.COM.COM; defaulting to no policy Enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456. Re-enter password for principal "admin/admin@CESHI.COM.COM": ceshi123456. Principal "admin/admin@CESHI.COM" created. "admin/admin@CESHI.COM":ceshi123456.打开KDC ACL文件,确认admin principal在KDC ACL中拥有权限,若没有对应的域则需要添加。

# vi /var/kerberos/krb5kdc/kadm5.acl */admin@VRV.COM *如果修改了文件kadm5.acl,那么你就必须重启kadmin进程

# service kadmin restart7.启用Kerberos保护

 安装JCE

必须用官网下载的JCE覆盖本地已有的JCE,否则将缺少供Kerberos使用的加密方式

在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。

• Oracle JDK 1.7:

http://www.oracle.com/technetwork/java/javase/downloads/jce-7-

download-432124.html

• Oracle JDK 1.8:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-

download-2133166.html

 在Ambari Server所在主机和集群中的所有主机上,添加unlimited security policy JCE jars

到目录$AMBARI_SERVER_JAVA_HOME/jre/lib/security/下。

注意:在所有的主机上,JCE相关的包都必须解压到配置文件/etc/ambari-server/conf/ambari.properties中属性java.home所指定的JDK目录下

# JAVA_HOME=/usr/java/default # unzip -o -j -q UnlimitedJCEPolicyJDK8.zip -d $JAVA_HOME/jre/lib/security/重启Ambari Server(ambari server服务器hdp140)

# service ambari-server restart8.运行Kerberos保护向导

 1. 确认KDC已经安全和正确配置,并且已经在集群的所有主机上配置好JCE。

 2. 登录Ambari Web,打开管理员 > Kerberos

 3.点击启用Kerberos,启用安装向导,选择条件检查

 4.提供关于KDC和管理员账号的信息

KDC相关信息请参考配置文件/etc/krb5.conf



 5.ambari会在集群的主机上安装Kerberos客户端,然后通过测试是否能创建principal,生成keytab和分配Keytab来测试是否能连接KDC

自定义Hadoop使用的Kerberos identities


 6.确认你的配置。你可以通过页面下载自动创建的包含principalsKeytabsCSV文件。

 7.停止服务

 8.启用kerberos

Keytabs保存在主机的/etc/security/keytabs目录下。

 9.启动和测试服务

启动和测试服务成功后点击完成以结束Kerberos的启用。


 10.查看已启用的Kerberos配置

到这里kerberos安装完成。

高级选项:

为Ambari Server设置Kerberos(可选项)

1. 使用kadmin在你的KDC所在的主机(hdp141)为Ambari Server创建一个principal。(ambari-server为自定义名)

# kadmin.local -q "addprinc -randkey ambari-server@CESHI.COM2. 为此principal生成一个Keytab

# kadmin.local -q "xst -k ambari.server.keytab ambari-server@CESHI.COM"3. 将单前目录生成的Keytab拷贝到Ambari Server所在的集群。确定该文件有合适的权限,能够被启动Ambari Server守护进程所访问。

# scp ambari.server.keytab hdp140:/etc/security/keytabs/ # ll /etc/security/keytabs/ambari.server.keytab -r--r----- 1 root root 530 Dec 18 20:06 /etc/security/keytabs/ambari.server.keytab4. 停止ambari server

# ambari-server stop5. 运行setup-security命令,设置JAAS。标红部分为需要设置部分。

A. 选择3,Setup Ambari kerberos JAAS configuration

B. 输入第一步为Ambari Server设置的principal名

C. 输入Ambari principal的Keytab所在路径

# ambari-server setup-security Using python  /usr/bin/python2 Security setup options... =========================================================================== Choose one of the following options:   [1] Enable HTTPS for Ambari server.   [2] Encrypt passwords stored in ambari.properties file.   [3] Setup Ambari kerberos JAAS configuration.   [4] Setup truststore.   [5] Import certificate to truststore. =========================================================================== Enter choice, (1-5): 3 Setting up Ambari kerberos JAAS configuration to access secured Hadoop daemons... Enter ambari server's kerberos principal name (ambari@VRV.COM): ambari-server@VRV.COM Enter keytab path for ambari server's kerberos principal: /etc/security/keytabs/ambari.server.keytab Ambari Server 'setup-security' completed successfully. 重启Ambari Server # ambari-server restart开始实测:

1.新建测试用户

普通用户需要安装ranger(后面介绍)管理权限。

列出所有用户

# kadmin.local #在kdc服务器上执行 kadmin.local:  listprincs  #//列出所有用户 ambari-server@CESHI.COM ................. nn/hdp140@CESHI.COM zookeeper/hdp142@CESHI.COM zookeeper/hdp143@CESHI.COM创建测试用户

kadmin.local:  addprinc test Enter password for principal "test@CESHI.COM": ceshi123456. Re-enter password for principal "test@CESHI.COM": ceshi123456. Principal "test@CESHI.COM" created. 登录验证

# kinit test  #登陆

ceshi123456.

退出登陆状态

注销:kdestroy集群登录与授权(hdfs用户)

未使用kerberos用户认证前执行

# hadoop dfs -ls /

使用kerberos用户认证

# kinit test  #登陆 Password for test@CESHI.com #ceshi123456. # hadoop dfs -ls /

此时test用户默认有查看权限,无目录授权

 

换到hdfs用户下,初始化hdfs

查看hdfs的Kerberos用户名

# klist -k /etc/security/keytabs/hdfs.headless.keytab Keytab name: FILE:hdfs.headless.keytab KVNO Principal ---- --------------------------------------------------------------------------    1 hdfs-test@CESHI.COM    1 hdfs-test@CESHI.COM    1 hdfs-test@CESHI.COM    1 hdfs-test@CESHI.COM    1 hdfs-test@CESHI.COM 初始化认证hdfs用户 # kinit -k hdfs-test@CESHI.COM -t /etc/security/keytabs/hdfs.headless.keytab  创建目录:hadoop fs -mkdir  /test 查看目录属性:

改变目录属性:hadoop fs -chown test:hdfs  /test

使用test用户登录

修改密码和重新生成

#修改密码命令cpw test(KDC server上执行) # kadmin.local Authenticating as principal test/admin@CESHI.COM with password. kadmin.local:  cpw test Enter password for principal "test1@CESHI.COM": ceshi123 Re-enter password for principal "test1@CESHI.COM": ceshi123 change_password: Principal does not exist while changing password for "test@CESHI.COM". kadmin.local:  exit生成新的多用户使用keytab文件

创建keytab文件(生成到当前文件夹下)

案例:将hive和hdfs的keytab集成到同一个keytab文件中

1. 查看所有princs

# kadmin.local Kadmin.local: listprincs hbase/hdp143@CESHI.COM" hdfs-vrvtest@CESHI.COM" hive/hdp140@CESHI.COM"2. 添加hdfs的princs的keytab到hdfs-hive.keytab

# kadmin.local  Kadmin.local: xst -norandkey -k hdfs-hive.keytab hdfs-vrvtest@CESHI.COM

3. 添加hive的princs的keytab到hdfs-hive.keytab

# kadmin.local  Kadmin.local: xst -norandkey -k hdfs-hive.keytab hive/hdp140@CESHI.COM查看生成的hdfs-hive.keytab

使用生成的Keytab文件登录

# kinit -k -t hdfs-hive.keytab hive/hdp140@CESHI.COM


修改租期

 1.修改全局租期

# vi /etc/krb5.conf [libdefaults]  default_realm = CESHI.COM dns_lookup_realm = false   dns_lookup_kdc = false ticket_lifetime = 24h   #ticket 租期时间 renew_lifetime = 7d  #重新申请时间 frwardable = true#重新启动

# service krb5kdc restart # service  kadmin restart2.手动修改用户租期时间

#查看租期时间 可在kadmin命令行下用getprinc命令查看默认的最大时长,否则时长被限制在24小时,并且无法renew) # kadmin.local kadmin.local:getprinc hive/hdp141 Principal: hive/hdp141@CESHI Expiration date: [never] Last password change: Mon Dec 18 05:56:57 EST 2017 Password expiration date: [none] Maximum ticket life: 1 day 00:00:00 #租期时间 Maximum renewable life: 0 days 00:00:00 #重新续租时间 Last modified: Mon Dec 18 05:56:57 EST 2017 (admin/admin@VRV.COM) Last successful authentication: [never] Last failed authentication: [never] Failed password attempts: 0 Number of keys: 8 Key: vno 1, aes256-cts-hmac-sha1-96 Key: vno 1, aes128-cts-hmac-sha1-96 Key: vno 1, des3-cbc-sha1 Key: vno 1, arcfour-hmac Key: vno 1, camellia256-cts-cmac Key: vno 1, camellia128-cts-cmac Key: vno 1, des-hmac-sha1 Key: vno 1, des-cbc-md5   #更改租期时间命令(用户使用真实用户替换) modprinc -maxrenewlife 300days 用户 modprinc -maxlife 300days 用户#应用例子

modprinc -maxrenewlife 300days hive/hdp141@CESHI.com

modprinc -maxlife 300days hive/hdp141@CESHI.COM

退出后,重新启动

# service krb5kdc restart # service  kadmin restart3.使用spark任务测试kerberos下的作业提交

1.指定spark用户和密码

# cd /etc/security/keytabs [root@hdp140 keytabs]# ll -r--r----- 1 root      root   353 Oct 30 23:54 ambari.server.keytab -r--r----- 1 hbase     hadoop 313 Oct 30 23:54 hbase.headless.keytab -r-------- 1 hbase     hadoop 313 Oct 30 23:54 hbase.service.keytab -r-------- 1 hdfs      hadoop 308 Oct 30 23:54 hdfs.headless.keytab -r--r----- 1 hive      hadoop 308 Oct 30 23:54 hive.service.keytab -r-------- 1 hdfs      hadoop 298 Oct 30 23:54 nn.service.keytab -r--r----- 1 ambari-qa hadoop 333 Oct 30 23:54 smokeuser.headless.keytab -r-------- 1 spark     hadoop 313 Oct 30 23:54 spark.headless.keytab -r--r----- 1 root      hadoop 308 Oct 30 23:54 spnego.service.keytab# klist -k spark.headless.keytab Keytab name: FILE:spark.headless.keytab KVNO Principal ---- --------------------------------------------------------------------------    1 spark-test@CESHI.COM    1 spark-test@CESHI.COM    1 spark-test@CESHI.COM    1 spark-test@CESHI.COM    1 spark-test@CESHI.COM   # kinit -k spark-vrvtest@VRV.COM -t spark.headless.keytab #指定spark用户 [root@hdp140 keytabs]# klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: spark-vrvtest@VRV.COM   Valid starting       Expires              Service principal 10/31/2017 01:08:56  11/01/2017 01:08:56  krbtgt/VRV.COM@VRV.COM上传spark文件到opt

# hdfs dfs -mkdir -p /tmp/sparkwordcount/ # hdfs dfs -mkdir -p /tmp/sparkwordcount/input # hdfs dfs -put /opt/sparkwordcountinput.txt /tmp/sparkwordcount/input # hdfs dfs -put /opt/spark_word_count.jar  /tmp/sparkwordcount/#spark测试文件

sparkwordcountinput.txt  spark_word_count.jarspark命令提交任务

 # spark-submit \   --class com.vrv.bigdata.ml.DataExtract2 \   --master yarn \   --deploy-mode cluster \   --principal spark-test@CESHI.COM \   --keytab /etc/security/keytabs/spark.headless.keytab \   hdfs://hdp140:8020/tmp/sparkwordcount/spark_word_count.jar \   hdfs://hdp140:8020/tmp/sparkwordcount/input \   hdfs://hdp140:8020/tmp/sparkwordcount/output/spark_work_count 17/10/31 01:15:28 INFO Client:  client token: Token { kind: YARN_CLIENT_TOKEN, service:  }  diagnostics: N/A  ApplicationMaster host: 192.168.2.143  ApplicationMaster RPC port: 0  queue: default  start time: 1509383715631  final status: SUCCEEDED  tracking URL: http://hdp141:8088/proxy/application_1509379053332_0014/  user: spark 17/10/31 01:15:28 INFO ShutdownHookManager: Shutdown hook called 17/10/31 01:15:28 INFO ShutdownHookManager: Deleting directory /tmp/spark-40e868df-ca58-4389-b20c-03d2717516cc


疑难问题1:

Received Exception while testing connectivity to the KDC: Algorithm AES256 not enabled **** Host: hdp261:88 (TCP) java.lang.IllegalArgumentException: Algorithm AES256 not enabled at sun.security.krb5.EncryptionKey.<init>(EncryptionKey.java:286) at javax.security.auth.kerberos.KeyImpl.<init>(KeyImpl.java解决:

1. 在Ambari server所在的主机和集群中的所有主机上,根据使用的JDK版本选择合适的JCE策略文件。 • Oracle JDK 1.7: http://www.oracle.com/technetwork/java/javase/downloads/jce-7- download-432124.html • Oracle JDK 1.8: http://www.oracle.com/technetwork/java/javase/downloads/jce8- download-2133166.html疑难问题2:

org.apache.hadoop.security.authentication.client.AuthenticationException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)解决:

# kinit guest Password for guest@CESHI.COM: ceshi123456.   # klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: guest@CESHI.COM   Valid starting       Expires              Service principal 11/28/2017 18:30:48  11/29/2017 18:30:48  krbtgt/CESHI.COM@CESHI.COM 11/28/2017 18:31:09  11/29/2017 18:30:48  HTTP/hdp140@ 11/28/2017 18:31:09  11/29/2017 18:30:48  HTTP/hdp140@CESHI.COM参考:

http://blog.csdn.net/wulantian/article/details/42418231

http://book.51cto.com/art/200907/140533.htm


实战到此结束。


总结:

1. Hadoop集群节点数多,配置和维护一个使用kerberos系统高性能,稳定的hadoop集群难度非常高。

2. Hadoop中的hdfs是一个文件系统,用户的认证和授权比较复杂,难度不低于linux系统的用户和组管理。

加上kerberos后,用户和用户组的管理更加复杂,通常一个合适的用户不能访问hdfs上的文件。 

3. Hadoop加上kerberos后,通常原来的用户和文件,可能都失效导致数据流失。


后续专栏主题将持续更新

大数据安全运维实战宝典


专题名称

大数据安全运维实战宝典

内容占比

理论/实战=1/9

作者介绍

陈浩,多年大数据平台安全及运维实践经验,对大数据组件调优有着很深的见解。

51cto版主及51cto推荐博主

适应人群

1. 对于基础运维转大数据运维的同学

2. 对大数据感兴趣的同学

3. 大数据研发工程师

专栏介绍

大数据的热度在持续的升温,继云计算之后大数据成为又一大众所追捧的新星。数据的确是公司最最重要的核心资产。随着业务的迅速发展,交易数据呈几何级增加,随之而来的是系统的不堪重负。业务部门、领导、甚至是集团老总整天嚷嚷的要报表、要分析、要提升竞争力。而研发部门能做的唯一事情就是执行一条一条复杂到自己都难以想象的SQL语句,紧接着系统开始罢工,内存溢出,宕机........简直就是噩梦。OMG!please release me!!!

俗话说,工欲善其事,必先利其器。

本专栏内容从大数据运维角度出发,指导安装大数据平台,组件调优及默认配置修改去解决内存溢出,服务器宕机,kudu超时等业务无法处理的问题。

专栏内容架构分为:

总共分为20篇文章,其中1篇理论介绍大数据平台,12篇CDH实践,7篇ambari实践。

1. CDH基础入门(1篇)+性能调优(4篇)+安全实战(7篇)

2. Ambari基础入门(1篇)+性能调优(1篇)+安全实战(5篇)

习收获

1.理论上对知识点理解更加深入,实战案例让我们清楚知道这些知识点如何使用
2.对于大数据平台安全更深层次的理解

3.大数据调优简单易懂结合生产环境场景介绍

专栏大纲

序号

章节名称
(命名上,可参考知识点+解决问题


1

大数据平台是什么?为什么要安装大数据平台?



CDH篇


2

(入门)大数据平台CDH基础组件安装和部署


3

性能压测)数据仓库kudu性能测试及分析实战


4

(调优篇)Spark job failed because of out of memory.如何救急!!!


5

(调优篇)爆出 kudu-rpc 超时和 kudu 写入延时及解决方法


6

(调优篇)告别“Memorylimit exceeded”——Impala内存优化


7

(安全篇)CDH构建大数据平台-使用sentry进行权限把控!


8

(安全篇)CDH构建大数据平台-集群用户的管理与视图化权限分配


9

(安全篇)CDH构建大数据平台-高可用案例实操

hdfs,hive,impala,sentry,hue,kudu,yarn,zookeeper


10

资源篇)使用Yarn按各bu线进行资源队列划分管理实战


11

监控篇)impala实时监控,python脚本清除session和过期任务


12

监控篇)kudu演示如何传递impala-sql查询出结果组装成自己想要的告警信息,发送到钉钉(可用于日报,钉钉告警功能)


13

实战 StreamSets实现MySQL中变化数据实时写入Kudu? 



Ambari篇


14

(入门篇)大数据平台ambari平台一键部署?So easy!


15

(性能压测篇)Hadoop分布式文件系统性能测试及分析


16

安全篇)大数据平台安全利器kerberos?


17

(安全篇)ambari构建大数据平台-如何开启权限认证?


18

(安全篇)ambari构建大数据平台-kerberos使用knos网关?


19

(安全篇)ambari构建大数据平台-kerberos sso如何做单点登陆 


20

资源篇)大数据集群多用户数据资源隔离管理实战




有关详解Linux运维工程师高级篇(大数据安全方向)的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  3. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  4. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  5. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  6. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  7. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  8. STM32读取串口传感器数据(颗粒物传感器,主动上传) - 2

    文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,

  9. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  10. 微信小程序通过字典表匹配对应数据 - 2

    前言一般来说,前端根据后台返回code码展示对应内容只需要在前台判断code值展示对应的内容即可,但要是匹配的code码比较多或者多个页面用到时,为了便于后期维护,后台就会使用字典表让前端匹配,下面我将在微信小程序中通过wxs的方法实现这个操作。为什么要使用wxs?{{method(a,b)}}可以看到,上述代码是一个调用方法传值的操作,在vue中很常见,多用于数据之间的转换,但由于微信小程序诸多限制的原因,你并不能优雅的这样操作,可能有人会说,为什么不用if判断实现呢?但是if判断的局限性在于如果存在数据量过大时,大量重复性操作和if判断会让你的代码显得异常冗余。wxswxs相当于是一个独立

随机推荐