计算机性能指标展现-2

以上为上一篇链接。计算机指标1获取了Linux指标的一些信息,这篇文章是获取hdfs的数据,也是为了与大数据挂钩,实现思路也和第一篇差不多,举一反三么,学会这个思路,什么都可以获取,比如一些znone节点健康信息之类的,重要不是获取什么,而是怎么获取

gitee源码visual-display-linux

实现思路

  1. Java利用ssh连接Linux
  2. 将命令得出的字符信息进行处理
  3. 提供一个可视化模板
  4. 进行前后端联动,异步将数据传输到页面上

重复的步骤我就不写了,可以看计算机指标1(点上方链接就可以)

实现方式

通过Linux的命令去返回字符串

获取hdfs健康信息的命令是:dfs dfsadmin -report

这里需要注意的是,此命令耗时3秒左右,所以做工具类方法的时候需要在一个方法中处理,不然一个用3秒,多了就吃不消了。还有这个命令本身并不提供,这里说的是即使你/etc/profile下面配了也不行。如下图

img

原因简单的说一下吧,不想了解的跳过

jsch方式通过SSH2连接的。而SSH直接执行远程命令和脚本,会使用Bash的non-interactive + non-login shell模式,它会创建一个shell,执行完脚本之后便退出,不再需要与用户交互。 non-interactive shell 执行它创建的脚本,默认情况下这个环境变量并没有设置。 no-login shell 他代表不会去执行/etc/profile文件,而会去用户的HOME目录检查.bashrc并加载。 那怎么解决?通过原因我们可以知道需要在当前用户下.bashrc文件末添加环境变量,也就是说如果当前你使用的是root用户,那么修改的就是/root/.bashrc这个文件。第二种方式就是运行的时候命令前加一句环境变量,如下

1
export PATH=$PATH:/opt/hadoop-2.7.1/bin:/opt/hadoop-2.7.1/sbin;hdfs dfsadmin -report

该命令的结果为下图,我想要的数据为红框中的信息

img

获取方式

字符串的subString方法,通过找到”(“的下标+1,”GB”的下标-1来获取。这提一下+1,-1的意思,不+1的话你获取到的就是”(“,而不是后面的内容。indexOf这个就是获取下标的方法,但只能获取到第一个返回的下标,那我要获取第二行红框的数据怎么办?通过indexOf(“\n”)来获取一行的下标,我要找第二行将这个x2就可以了,第三行x3。具体代码实现如下

img

计算机性能指标展现-4