以上为上一篇链接。计算机指标1获取了Linux指标的一些信息,这篇文章是获取hdfs的数据,也是为了与大数据挂钩,实现思路也和第一篇差不多,举一反三么,学会这个思路,什么都可以获取,比如一些znone节点健康信息之类的,重要不是获取什么,而是怎么获取。
github源码:https://github.com/bigli97/computer
实现思路
- Java利用ssh连接Linux
- 将命令得出的字符信息进行处理
- 提供一个可视化模板
- 进行前后端联动,异步将数据传输到页面上
重复的步骤我就不写了,可以看计算机指标1(点上方链接就可以)
实现方式:通过Linux的命令去返回字符串
获取hdfs健康信息的命令是:dfs dfsadmin -report
3秒左右,所以做工具类方法的时候需要在一个方法中处理,不然一个用3秒,多了就吃不消了。还有这个命令本身并不提供,这里说的是即使你/etc/profile下面配了也不行。如下图
原因简单的说一下吧,不想了解的跳过
jsch方式通过SSH2连接的。而SSH直接执行远程命令和脚本,会使用Bash的non-interactive + non-login shell模式,它会创建一个shell,执行完脚本之后便退出,不再需要与用户交互。
non-interactive shell 执行它创建的脚本,默认情况下这个环境变量并没有设置。
no-login shell 他代表不会去执行/etc/profile文件,而会去用户的HOME目录检查.bashrc并加载。
那怎么解决?通过原因我们可以知道需要在当前用户下.bashrc文件末添加环境变量,也就是说如果当前你使用的是root用户,那么修改的就是/root/.bashrc这个文件。第二种方式就是运行的时候命令前加一句环境变量,如下
export PATH=$PATH:/opt/hadoop-2.7.1/bin:/opt/hadoop-2.7.1/sbin;hdfs dfsadmin -report
该命令的结果为下图,我想要的数据为红框中的信息
获取方式
字符串的subString方法,通过找到"("的下标+1,"GB"的下标-1来获取。这提一下+1,-1的意思,不+1的话你获取到的就是"(",而不是后面的内容。indexOf这个就是获取下标的方法,但只能获取到第一个返回的下标,那我要获取第二行红框的数据怎么办?通过indexOf("n")来获取一行的下标,我要找第二行将这个x2就可以了,第三行x3。具体代码实现如下
封面就是实现结果
大忽悠:计算机指标4---整合rediszhuanlan.zhihu.com
由于把我4删了,给5插个眼
大忽悠:计算机指标5【完结】zhuanlan.zhihu.com