代码:
1 public static string Trans_version(string simver) 2 { 3 var sarry = simver.Split(' '); 4 string TransVersion = ; 5 if (sarry.Length == 2) 6 { 7 switch (sarry[0]) 8 { 9 case >=: TransVersion = [ + sarry[1] + ,); break; 10 case >: TransVersion = ( + sarry[1] + ,); break; 11 case ==: TransVersion = [ + sarry[1] + ]; break; 12 case <=: TransVersion = (, + sarry[1] + ]; break; 13 case <: TransVersion = (, + sarry[1] + ); break; 14 } 15 } 16 else 17 { 18 switch (sarry[0]) 19 { 20 case >=: TransVersion = [+sarry[1]+, ; break; 21 case >: TransVersion = (+sarry[1] + ,; break; 22 } 23 switch (sarry[2]) 24 { 25 case <=: TransVersion += sarry[3] + ]; break; 26 case <: TransVersion +=sarry[3] + ); break; 27 } 28 29 } 30 return TransVersion; 31 }
创建python镜像 singularity build --sandbox pytorch docker://python:3.8 创建一个名字叫做pytorch的镜像,python 版本选择3.8
交互模式运行 singularity shell -w pytorch 通过shell进入交互模式,安装需要的python包
安装包 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 或者
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple packname 打包镜像 sudo singularity build pytorch.sif pytorch/ 在创建镜像的根目录,用镜像构建sif文件
镜像测试 singularity exec --nv ../pytorch.sif python train.py 镜像文件在训练文件的上一层文件夹,接下来就可以把这个镜像扔到服务器上开始训练数据了,不需要在考虑环境的安装问题。
变量的显示与设置:
- echo
语法:echo $variable
注意事项:
等号两边不能直接接空格;
可用转义字符'\'将特殊符号($,\,!,空格,回车等)变成一般字符;
增加变量内容可输入:$variable或${variable}累加内容,例如 : home=$homeaddress;
若该变量需要在其他子进程中执行,则需要以export来使其变成环境变量,例如 export PATH;
一般情况下,父进程的自定义变量是无法在子进程中使用的;
使用大写字母来设置的变量一般为系统内定需要的变量;
思考题:
变量设置中,单引号和双引号的区别在哪里?
Answer:单引号不保留变量的内容,仅能是一般字符,而双引号保有变量的内容。
例子:
root# name=lmsroot# echo $namelmsroot# myname='$name its me'root# echo $myname $name its meroot# myname=$name its meroot# echo $myname lms its me
- env
查看环境变量
- set
查看所有变量
-read
读取来自 键盘输入的变量
root# read sum123root# echo $sum123
-p 接提示语
-t 接等待秒数
- declare
语法:
declare [-axir] variable
参数:
-a 定义后面变量为数组类型;
-x 与export用法一致,将变量变成环境变量;
根据实体类生成SQL语句(增删改)
代码:
Skip to content Product Team Enterprise Explore Marketplace Pricing Search Sign in Sign up MaChuhao / MCHDAL Public Code Issues Pull requests Actions Projects Wiki Security Insights MCHDAL/CreateSQLStr.cs / @MaChuhao MaChuhao 第一次版本提交,该模块是在.NET环境下自动生成SQL语句,并封装了增删查改的方法。 Latest commit 33c3783 on 6 Mar 2017 History 1 contributor 259 lines (224 sloc) 9.07 KB using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Reflection; using System.Data.SqlClient; namespace MCHDAL { public class CreateSQLStr { /// <summary> /// 通用实体类存储新数据到数据库的方法 /// 调用此方法可获得SQL Insert语句 /// </summary> /// <typeparam name=T>模板T</typeparam> /// <param name=model>实体对象</param> /// <param name=tablename>表名</param> /// <returns></returns> public static string SaveSQLStr<T>(T model, string tablename) { //获得此模型的类型 Type type = typeof(T); string fieldsName = INSERT INTO + tablename+ (; string fieldsValue = VALUES(; PropertyInfo[] propertys = model.
[BigDataHadoop:Hadoop&OLAP数据库管理系统.V17] [Deployment.OLAP数据库管理系统][|Kylin:Kylin安装配置|]一、Kylin安装环境准备:依赖环境软件版本Hive2.3.7Hadoop2.9.2HBase1.3.1Zookeeper3.4.14Kafka1.0.2Spark2.4.5二、集群规划serverHadoop01hadoop02hadoop03HDFSNameNode✔DataNode✔✔✔YarnResourceManager✔NodeManager✔✔✔JobHistoryServer✔HBaseHmaster✔HRegionServer✔✔✔HiveHive✔HiveMetastore✔Zookeeper✔✔✔Kafka✔✔✔Kylin✔三、HBase配置文件参数### --- 注意:要求hbase的hbase.zookeeper.quorum值必须只能是host1、host2、... ### --- 不允许出现host:2181;hbase-site.xml文件: ~~~ # 修改hbase配置文件 [root@hadoop01 ~]# vim /opt/yanqi/servers/hbase-1.3.1/conf/hbase-site.xml<configuration> <!-- 指定hbase在HDFS上存储的路径 --> <property> <name>hbase.rootdir</name> <value>hdfs://hadoop01:9000/hbase</value> </property> <!-- 指定hbase是分布式的 --> <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <!-- 指定zk的地址,多个用“,”分割 --> <property> <name>hbase.zookeeper.quorum</name> <value>hadoop01,hadoop02,hadoop03</value> </property> </configuration>四、Kylin配置资源准备### --- 下载kylin版本包并解压到安装目录 ~~~ # 下载kylin版本包 [root@hadoop01 software]# wget https://archive.apache.org/dist/kylin/apache-kylin-3.1.1/apache-kylin-3.1.1-bin-hbase1x.tar.gz ~~~ # 解压版本包 [root@hadoop01 software]# tar -zxvf apache-kylin-3.1.1-bin-hbase1x.tar.gz -C ../servers/ ~~~ # 修改配置目录名称 [root@hadoop01 ~]# cd /opt/yanqi/servers/ [root@hadoop01 servers]# mv apache-kylin-3.1.1-bin-hbase1x kylin-3.1.1### --- 添加环境变量,并使之生效 ~~~ # 配置kylin系统环境变量 [root@hadoop01 ~]# vim /etc/profile ##KYLIN_HOME export KYLIN_HOME=/opt/yanqi/servers/kylin-3.
[BigDataHadoop:Hadoop&OLAP数据库管理系统.V16] [Deployment.OLAP数据库管理系统][|Kylin:sparkcore高可用配置|]一、高可用配置:spark standalone集群配置### --- 修改 spark-env.sh 文件,并分发到集群中 [root@hadoop01 ~]# vim $SPARK_HOME/conf/spark-env.sh # export SPARK_MASTER_HOST=hadoop01 # 注释掉这2行内容 # export SPARK_MASTER_PORT=7077 # 注释掉这2行内容 ~~~ # 最后一行添加如下内容 export SPARK_DAEMON_JAVA_OPTS=-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop01,hadoop02,hadoop03 -Dspark.deploy.zookeeper.dir=/spark~~~ # 发送到其它节点 [root@hadoop01 ~]# rsync-script $SPARK_HOME/conf/spark-env.sh二、启动集群并验证### --- 启动 Spark 集群hadoop01 ~~~ # 在Hadoop01节点上重启spark服务:需要启动hdfs/yarn/zookeeper服务 [root@hadoop01 ~]# stop-all-spark.sh [root@hadoop01 ~]# start-all-spark.sh~~~ # 查看服务进程 [root@hadoop00 ~]# jps Hadoop01 Worker Hadoop02 Master Worker # 此时master节点在Hadoop02上 Hadoop03 Worker三、浏览器输入:http://hadoop01:8080/显示为:ALIVE### --- 在Hadoop02上启动master服务 [root@hadoop02 ~]# start-master.sh ~~~ # 查看服务进程 [root@hadoop00 ~]# jps Hadoop01 Master Worker # 备用master节点在Hadoop01上 Hadoop02 Master Worker # 此时master节点在Hadoop02上 Hadoop03 Worker四、进入浏览器输入:http://hadoop02:8080/,此时 Master 的状态为:STANDBY五、杀死Hadoop01上 Master 进程,Hadoop02:ALIVE;http://hadoop02:8080/;Master:STANDBY六、停止spark集群### --- 停止集群状态 ~~~ # 停止spark集群 [root@hadoop02 ~]# stop-all-spark.
[BigDataHadoop:Hadoop&OLAP数据库管理系统.V19] [Deployment.OLAP数据库管理系统][|Kylin:Kylin构建Cube&实时OLAP.V2|]一、OLAP环境准备### --- OLAP环境准备 ~~~ # 进入服务部署目录 [root@hadoop02 ~]# cd /opt/yanqi/servers/ ~~~ # coordinator [root@hadoop02 servers]# cp -r kylin-3.1.1/ kylin-3.1.1-master/ ~~~ # receiver [root@hadoop02 servers]# cp -r kylin-3.1.1/ kylin-3.1.1-receiver/### --- 开启Kylin进程:依赖服务需要提前启动完成:包括kafka ~~~ # 协调者:kylin进程将充当receiver cluster的coordinator。7070是coordinator的默认端口。 [root@hadoop02 ~]# cd /opt/yanqi/servers/kylin-3.1.1-master/bin/ [root@hadoop02 bin]# ./kylin.sh start### --- 开启Receiver Process ~~~ # receiver process将作为receiver cluster的工作方。9090是receiver的默认端口。 [root@hadoop02 ~]# cd /opt/yanqi/servers/kylin-3.1.1-receiver/bin/ [root@hadoop02 bin]# ./kylin.sh streaming start ~~~输出参数 Retrieving hbase dependency...~~~ # 查看进程 [root@hadoop02 bin]# jps RunJar # 协调者 StreamingReceiver # receiver### --- 模拟流数据 ~~~ # 使用工具,每秒会向以上topic每秒发送100条记录 [root@hadoop02 ~]# kylin.
[BigDataHadoop:Hadoop&OLAP数据库管理系统.V18] [Deployment.OLAP数据库管理系统][|Kylin:Kylin构建Cube&Segment管理&使用JDBC连接操作Kylin|]一、使用JDBC连接操作Kylin### --- 使用JDBC连接操作Kylin ~~~ 要将数据以可视化方式展示出来,需要使用Kylin的JDBC方式连接执行SQL,获取Kylin的执行结果 ~~~ 使用Kylin的JDBC与JDBC操作MySQL一致 ~~~ jdbc url:jdbc:kylin://hadoo02:7070/yanqi_sales_olap (yanqi_sales_olap:表示项目名称) ~~~ 用户名密码:ADMIN/KYLIN### --- 需求 ~~~ 通过JDBC方式,查询按照日期、区域、产品维度统计订单总额/总数量结果二、编程实现### --- 创建一个maven项目:SparkBigData ### --- 在pom.xml下导入驱动依赖 <dependency> <groupId>org.apache.kylin</groupId> <artifactId>kylin-jdbc</artifactId> <version>3.1.1</version> </dependency>### --- 编程实现流程 ~~~ 创建Connection连接对象 ~~~ 构建SQL语句 ~~~ 创建Statement对象,并执行executeQuery ~~~ 打印结果三、编程代码实现### --- 编程代码实现:写java或者scala程序都可以,跟语言的关系不是很大;使用scala程序:KylinJDBC package cn.yanqi.kylin import java.sql.{DriverManager, ResultSet} object KylinJDBC { def main(args: Array[String]): Unit = { //1、 创建Connection连接对象 val url = jdbc:kylin://hadoop02:7070/yanqi_sales_olap val connection = DriverManager.getConnection(url, ADMIN, KYLIN) //2、 构建SQL和语句 val sql = |select | t1.
前言 在 go-zero 社区里,经常会有同学问,把 API gateway 和 RPC service 放在同一个进程内可不可以?怎么弄?有时也会有同学把对外服务和消费队列放在一个进程内。咱们姑且不说此种用法合理与否,因为各个公司的业务场景和开发模式的差异,我们就只来看看此类问题怎么解比较优雅。
问题举例 我们用两个 HTTP 服务来举例,我们有这样两个服务,需要启动在一个进程内的两个不同端口。代码如下:
package main import ( fmt net/http ) func morning(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, morning!) } func evening(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, evening!) } type Morning struct{} func (m Morning) Start() { http.HandleFunc(/morning, morning) http.ListenAndServe(localhost:8080, nil) } func (m Morning) Stop() { fmt.Println(Stop morning service...) } type Evening struct{} func (e Evening) Start() { http.HandleFunc(/evening, evening) http.
简单的看了一下课程内容:介绍了类,内联函数,友元函数,运算符重载,多态,虚函数,\(STL\) 等等。 这些内容之前仅有使用上的接触,并没真正理解过。需要用心学一下! (但是感觉郭炜老师讲的没李戈老师那么有趣)
函数指针 之前学习 \(SML\) 时,一直觉得将函数以参数形式传入另一个函数这个功能很强大:C++ 中原来是靠函数指针实现的 一般的,函数的名字即为指向该函数的函数指针,我们也可以自定义指向某个函数的函数指针,格式为 函数指针名(实参表); 本质上来讲,每个函数在内存中也会占用一段空间,函数指针即指向这个函数所占内存的其实地址。所以,对函数指针进行的自加自减操作是没有意义的
bool cmp(int x, int y) { return x > y; } bool (*pf)(int, int); // 声明一个函数指针:注意声明的格式!与 cmp 函数的类型以及参数类型完全一致 pf = cmp; sort(a + 1, a + n + a, pf); // 向其他函数:这里以 sort 为例传入自定义的 cmp 函数 命令行参数 在 cmd 中使用 C++ 运行命令行时,可以通过在 main 函数中设置参数来处理命令行参数
int main(int argc, char *argv[]) { ... } argc: 启动程序时,命令行参数的个数:由于可执行文件名也算作一个命令行参数,所以 argc 至少是 \(1\) argv[]: 注意这是一个指针数组,每个元素都是 char 类型的指针,指向某个参数字符串。也可以说是 char** 类型。 与 char (*argv)[] 区别开,后者指的是指向某个 char 一维数组的指针。