各类工具的使用

    在做项目的过程中,学习到很多的东西,在这里记录下来。

1. Git

    Git是一个用来版本控制的软件,在用的过程中涉及到以下内容

  1. 在服务器上创建仓库。首先在服务器上创建一个文件夹,例如test。cd到这个文件夹下,使用git init命令,将该文件夹初始化为一个git仓库,会看到这个文件夹下多了一个.git的文件,然后我们把项目代码拷贝到test这个文件夹下。
  2. 在自己的电脑上下载并安装Git软件
  3. 从服务器git仓库上把代码clone到本地电脑。首先在自己电脑上,创建一个保存代码的目录,在这个目录下右键选择Git Bash,输入下面的代码git clone username@172.11.11.111:/file0/repo/EQ/,这样服务器git仓库中的东西就完封不动的clone到本地了。
  4. 在自己电脑上打开eclipse或者myeclipse,在file中导入这个项目,就可以进行修改代码了。
  5. pull和push。右键选中这个工程,点击team,就可以对项目进行pull和push。当在本地修改完代码,本地的git会记录下来这些改动,所以本地文件夹中的git也有原先的历史记录,当push的时候会读取本地的git,找到本地的代码在服务器上的源,然后把改动同步到服务器上的git中。
  6. 除了使用eclipse中的team来pull和push代码,还可以使用命令来进行pull或push。每次改完代码提交的时候,打开EQ这个目录(一定要在这个目录下,因为只有这个目录有git这个文件夹),右键Git Bash Here输入以下命令:
    git add –all,
    git commit –m "修改说明",
    git push
  7. 每次写代码之前,先进行pull。也是打开EQ这个目录,右键Git Bash Here输入以下命令:git pull这样就会把别人改动过的代码更新到EQ这个文件夹下。

问题1:在eclipse中右键点击team—>show in History,会出现所有的改动。点击改动的一个文件,应该会出现2个窗口,一个窗口显示现在的代码,一个窗口显示原先的代码,可以明显的看出哪里进行了改动,但是我的电脑确没有出现历史窗口,只有现在代码的窗口。
解决: 在点击show in history之后右键一个文件,点击“compare with previous version”就会出现历史窗口。

问题2:在每次写代码之前都要先pull一下,把别人push的代码拉取到本地。但有时候你在写代码之前忘了pull别人的代码,直接在本地电脑上修改,然后你在pull别人的代码时会出现conflict,那是因为你和服务器上的代码修改了同一个地方,git不知道该采用谁的修改。
解决: 首先在eclipse中,右键点击team,把你自己本地的代码先commit,不要push。然后打开vscode,导入和eclispe中一样的代码(和eclipse导入的代码在同一个文件下,带有.git),然后在vscode中点击左侧的第三个图标(git的图标),然后在...中右键从服务器上pull到本地。然后再点击左侧的第一个图标,在这里面如果文件的右侧出现M,说明这个文件被修改过,然后你在这里面进行解决冲突。是采用本地的修改还是采用服务上的修改。等到冲突都解决时保存。然后再回到eclispe,会发现项目已经没有报错了。这时在eclispe中右键team,把代码commit and push到服务器中。

2. 使用GPU服务器

    涉及到2个软件:Putty是一个ssh工具。FileZilla用户和服务器进行文件传输。

2.1. 查看当前GPU的占用情况

nvidia-smi
gpustat -i 2:其中-i 2是可选的,表示每2秒刷新一次。

2.2. 查看当前的进程是谁的

ps -ef | grep 进程号
kill -9 进程号

2.3. 查看某个用户的进程

ps -ef|grep WangBeibei

3. Screen相关命令

3.1. 新建窗口

新建一个窗口有3种方法:

  • screen #这样就可以新建窗口,进入到一个窗口中,但是这样窗口就没有名字,无法区分他们
  • screen -S name #这样新建一个名字为name的窗口,并入到该窗口中
    例如:screen -S count 新建了一个叫count的窗口并进入
  • screen command #这样新建一个窗口并在窗口中执行command,同样没有名字
    例如:screen python ./a.py 新建并执行a.py程序

3.2. 会话分离

我们在一个窗口运行某个程序之后,想退出登录关闭terminal干点别的事,让程序在后台运行。这时就需要和窗口会话分离,有2种方式:

  • 在当前会话窗口中按Ctrl+a +d快捷键可以实现分离,这时窗口会弹出[detached]的提示,并回到主窗口。
  • screen -d name #远程detach某个session,前提是已经跳出了name窗口

3.3. 恢复会话窗口

首先查看有哪些窗口正在运行

screen -ls #列出窗口列表

There is a screen on:
2637.count (12/17/2015/10:00:32 AM) (Detached)

screen -r 2637 #进入2637线程,恢复count会话窗口

这样就能回到count窗口了

3.4. kill会话窗口

如果想关掉一个多余的窗口,有3种方法:

  • kill -9 threadnum 例如在上面的2637,kill -9 2637 即可杀死线程,当然就杀死了窗口
  • 使用Ctrl a +k 杀死当前窗口和窗口中运行的程序
  • screen -S 进程号 -X quit

3.5. 清除死去的窗口

当窗口被杀死后,再用screen -ls 可以看到该窗口后面的(???dead)字样,说明窗口死了,但是仍在占用空间。这时需要清除窗口
screen -wipe #自动清除死去的窗口

3.6. 解除窗口占用

有时你以为已经退出窗口了,但是screen -ls命令仍显示该窗口是attach状态,说明该窗口xxx时被占用的,可以用screen -d xxxx来解除占用后再进入。

4. 使用jupyter运行程序

  1. 创建一个jupyter窗口
    screen -S jupyter
  2. 激活虚拟环境并启动jupyter
    source activate insis_template_3.6激活环境
    jupyter notebook打开jupyter
  3. 端口映射
    第一次使用jupyter notebook,需要映射端口号,默认jupyter notebook的端口号是8888,但是在这个集群上,如果别人已经把8888端口占用了,集群会自动给你分配一个端口号,然后在putty中映射一下这个端口,具体操作如下:
    在菜单栏选中change setting,找到Tunnels


  4. 浏览器中打开

使用screen创建一个窗口运行jupyter notebook程序的好处:就算ssh和28号服务器的连接断开,jupyter notebook的程序依然可以在后台运行。如果你打开的jupyter notebook的程序运行完了,有3种关闭程序的方法:
1、在jupyter notebook菜单栏,有一个close and hot的按钮。
2、在jupyter notebook中running中shutdown掉程序
3、screen -r 23560切入到虚拟窗口,然后在这个窗口ctrl+c
关闭jupyter notebook进程。不用使用exit,因为使用exit是关闭
虚拟窗口,直接按shift+a+d从虚拟窗口中切出,这样这个窗口

5. 部署代码到服务器

  1. 首先在服务器上安装Tomcat
  2. 使用FileZilla进入到服务器,使用putty进入到服务器。
  3. 关闭Tomcat:使用putty cd到到file0/apache-tomcat下,输入bin/shutdown.sh关掉Tomcat服务器。然后把webapps下的项目删除,进入到logs删除里面的日志。
  4. 使用eclipse把项目导出成war压缩包
  5. 使用FileZilla把war上传到webapps下。
  6. 使用bin/startup.sh启动Tomcat服务器
  7. 查看日志主要在catalina.out这个文件中
  8. 浏览器查看,http://hz1:8080/EQ/jsp/login.jsp

6. Tomcat端口占用

  1. win + R,输入cmd回车进入dos界面
  2. 输入netstat -ano|findstr 8080 查看占用8080端口的进程
  3. 输入taskkill /pid 10148 /f 将显示的进程号(我的是10148)结束掉
  4. 重启tomcat

7. 修复集群

当集群中有个节点不能启动时,可以在虚拟机管理界面把虚拟机启动。
在浏览器中输入https://172.31.43.150
点击“登录到vsphere web client”
用户名:xxxx,
密码:*
点击右侧的“vCenter清单列表”,然后点击左侧的“虚拟机”,在左侧找到需要重启的虚拟机,单击选中,在右侧“关闭虚拟机电源”,关闭后再点击“打开虚拟机电源”。这样就把虚拟机重启了。还需要启动Cloudera manager agent。使用putty,例如输入hz5,
进入到ssh,用户名xxx,密码**
先和server同步时间ntpdate hz1,
然后启动agent:/opt/cm-5.7.2/etc/init.d/cloudera-scm-agent start

平时就可以使用/vsphere-client/?csp#extensionId%3Dvsphere.core.viVms.domainView

8. 运行Spark

不论是用什么语言写的spark程序在运行的时候都要用spark-submit来运行
如果是java程序需要指定—class 主程序的报名.类名
例如—class test.Test
python不需要指定—class这个参数

  1. local模式:spark-submit —class test.Test —master local[2] mySpark.py
  2. standalone模型: spark-submit —class test.Test —master spark://hz4:7077 mySpark.py
  3. yarn模式: spark-submit —class test.Test —master yarn mySpark.py

9. 使用vsCode

    使用vscode编写python程序时,如果出现空格和Tab共用时导致程序出错。需要把所有的Tab换成空格,在vscode最下面有一个蓝色的条纹,在条纹的右边有”空格4”,点击这个字,然后在vscode的最上面会出现几个选项:点击“将缩进转换成空格”这个选项,再运行就没错了。

10. 字节

    int是4个字节,无论数字多长都是4个字节,如果用string定义数字时,字节的长度就是字符的个数。

1
2
3
4
5
6
7
8
int a = 11111111;
System.out.println(a+"(int)的字节数:"+Bytes.toBytes(a).length);
int b=22;
System.out.println(b+"(int)的字节数:"+Bytes.toBytes(b).length);
String aString = "11111111";
System.out.println(aString+"(string)的字节数:"+Bytes.toBytes(aString).length);
String bString = "22";
System.out.println(bString+"(string)的字节数:"+Bytes.toBytes(bString).length);

输出如下所示:

打赏
0%