第一次接触分布式项目,还是在Linux下编程,确实和Windows下编程有一点点不一样。没有一点点提防,就让我了解到不能用在windows上运行的代码,以及不仅web开发之外的开发。

熟悉了先前在Windows下的开发,用IDEA工具开发,点build编译项目(之前仍然翻译成建立项目),点run运行项目,有时甚至都不点build。这个过程似乎是胸肌记忆通常,熟练的让我忽视了如此做背后的缘由,似乎它原本就是这样的。

不得不说,当听到Alluxio官网上须要打算的是Mac或Linux时,脑中顿时掠过好多问号,在Linux上运行(没有Mac,就不考虑Mac了)?不能在Windows上运行?那不能在Windows上看输出?不能在Windows上编译?建立?编译?建立和编译?要如何启动项目,让它运行?命令如何用的?

在这儿记录一下编译和运行的理解,下边编译和运行的代码是分布式缓存系统Alluxio。

概念:是哪些?

一个java程序linux运行exe文件命令,须要经过编译和运行两步,能够看见程序实现的疗效。这儿有2个很重要的过程永久免费linux服务器,就是编译和运行。

这么,源代码和字节码是哪些?

字节码

字节码是在java程序生成的中间代码,不是机器/操作系统可以直接执行的代码。

字节码是虚拟机jvm可以理解的代码,它不是面向特定的操作系统,而是只面向虚拟机的。使用相同的字节码,虚拟机就会给出相同的结果。Java语言通过字节码的形式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特性。

说到java程序,就离不开虚拟机。

Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,它们就会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,随处可以运行”的关键所在。

编译与解释共存??

中级编程语言根据程序的执行方法分为两种:

java语言是编译和解释共存的语言。是由于java语言既具有编译型语言的特点,也具有解释型语言的特点。

一个java程序须要先经过编译,之后经过解释,两个步骤就能运行。编译发生在源代码到字节码的过程,解释发生在执行字节码的过程。源代码经过编译器编译生成字节码,字节码经过类库解释执行。

所以,假若想让一个java程序运行上去,见到代码实现的疗效,必须经过编译和运行2个步骤,在Windows或Linux上都是一样的,只是不同的操作系统,实现的方法可能不同。Windows通过图形化的IDEA可以点击实现这两个过程,而Linux通常是命令行,没有图形化界面,所以须要通过命令来执行编译和运行两个操作。

代码放哪儿?

项目只能在Linux中编译和运行,而我本地的系统是Windows系统。所以,代码要置于远程的Linux服务器上,或则在本地的虚拟机中。先不考虑如何写代码的问题,这么把代码置于服务器上以后,就可以进行编译,之后运行启动项目。

摒除先前在Windows上运行项目的流程,在Linux启动一个项目:

之后,查看到Alluixo确实启动成功以后,就可以使用像Windows上运行项目(比较熟悉的)一样查看输出信息等等。

Linux下编译

从远程库房下载完代码以后,就可以编译代码(其实,Alluxio须要设置配置文件)。

在Alluxio的官网上有编译代码相关的内容。Linux下要使用Maven这个工具来完成对java程序的编译。Linux系统须要提早安装好jdk8和Maven。

在项目的根目录下执行以下命令就可以完成编译过程,Maven编译环境将手动获取依赖,编译源码,运行单元测试,并进行打包。

mvn clean install

在编译Alluxio时,为了加速编译过程,可以跳过一些检测

mvn -T 2C clean install -DskipTests -Dmaven.javadoc.skip -Dfindbugs.skip -Dcheckstyle.skip -Dlicense.skip

【注】

编译完成以后,会在各个目录之下生成target目录,该目录下是生成的中间文件,可以找到java源代码中的类对应的.class文件。

Linux下运行

通常项目中会有运行项目的命令。以Alluxio为例,官网上有几种运行Alluxio的形式,有本地运行、在集群中运行、在Docker中运行、在K8s中运行等等。不同的形式在执行运行命令之前须要进行的配置不同。

本地运行,就是在本地运行Alluxio的代码。“本地”,指的是代码运行时所在的主机,不是我们写代码时用的笔记本,或则其他的主机。本地运行Alluxio这些方法,会在本地启动一个Master节点和一个Worker节点(只是说Alluxio会启动那么多,没说其他的系统)。

集群是一群主机,简单的理解为好多台笔记本。在集群中运行,把代码运行在多个主机中。使用集群运行代码的前提是,有好多台主机,起码2台。

其他的运行方法,Docker或则k8s须要会用相应的容器。

所以先从简单一点的本地运行开始,虽然只在一台笔记本上运行代码就可以了。

运行之前

Step1更改配置文件

在运行Alluxio之前,须要做一些配置。创建配置文件conf/alluxio-site.propertieslinux site:infoq.cn,在该配置文件中设置master节点的主机地址和Alluxio挂载的地址。

一是,设置master节点运行的主机。,在文件添加配置alluxio.master.hostname=linuxcool,将master节点所在的主机设置为本地。

二是,设置Alluxio挂载的地址。alluxio.master.mount.table.root.ufs=/tmp,将Alluxio的挂载地址设置为/tmp,该文件是主机上的一个真实的文件夹。这一步设置完成以后,/tmp这个文件夹就是Alluxio的地盘了,文件下的所有内容都归Alluxio管理,其他文件假如想要Alluxio管,就须要从它原先所在的地方“复制”到/tmp文件下。

【注】因为Alluxio是一个缓存系统,并不是真实储存数据的储存系统,所以这个“复制“的操作,也不是我们平常在操作文件时的复制操作。”复制”操作,是指启动Alluxio以后,即将Alluxio管理的文件或路径,通过Alluxio的复制命令copyFromLocal,来将本地的数据拷贝到Alluxio管理的空间。

拷贝到哪?

拷贝到Alluxio管理的空间,具体一点说,是Alluxio中Master节点所管理的。Master节点管理着Alluxio中所有文件的元数据信息。

拷贝的具体是哪些内容呢?

拷贝的是文件的元数据,不是文件本身。元数据可以简单的理解为一个文件的身分信息,通过元数据可以找到原文件。

为何拷贝的是元数据,而不是文件副本呢?

Alluxio作为一个缓存系统,储存的是文件的元数据,而不是文件副本。元数据的数据量通常比文件要小的多,但是Alluxio作为联接底层储存系统和下层应用层的桥梁,并不是要来永久的储存数据,它只要在使用的时侯找到元数据对应的文件在哪储存,之后访问文件内容就可以。

Step2挂载底层文件系统

Step1中在配置文件中设置了Alluxio挂载的地址,执行以下命令将本地文件夹挂载到Alluxio上:

./bin/alluxio-mount.sh SudoMount

哪些是挂载?

挂载操作,类似于在笔记本上插入U盘,笔记本上会出现一个文件夹,显示U盘的内容,我们通过在笔记本上的操作就可以访问到U盘中的内容。把本地的一个文件夹挂载到Alluxio中,就是把该文件夹指定为Alluxio的空间。

Step3低格Alluxio文件系统

只有在第一次运行Alluxio系统时才须要执行低格。低格以后,原先Alluxio储存的元数据(Master节点中的数据)和数据(Worker节点中的数据)就会消除,而不会删掉底层系统的文件。

./bin/alluxio format

到这儿linux运行exe文件命令,完成了运行之前的打算。这么里面所用到的命令是哪些意思呢?

运行

假如没有挂载文件系统或则要重新挂载,执行以下运行命令

./bin/alluxio-start.sh local SudoMount

假如早已挂载过文件系统,执行以下运行命令

./bin/alluxio-start.sh local

执行完会出现以下信息:

linux命令行运行文件_linux运行文件夹命令_linux运行exe文件命令

验证Alluxio是否运行

初时运行Alluxio,总是要验证一下Alluxio是否真的在运行才安心。

第一种:查看日志

在logs记录了Alluxio的日志信息。查看Master节点的日志信息,部份信息如下

2022-03-17 10:54:57,966 INFO  Server - Started @36486ms
2022-03-17 10:54:57,966 INFO  WebServer - Alluxio Master Web service started @ /0.0.0.0:19999
2022-03-17 10:54:57,967 INFO  AlluxioMasterProcess - Starting gRPC server on address:/0.0.0.0:19998

可以看见Master节点服务早已启动,master节点的web服务端口是19999,rpc服务的端口是19998。

第二种:查看master节点的web页面

假如在服务器所在的主机上可以访问地址:19999,假如在服务器之外的主机上访问,要访问地址服务器网段ip地址:19999。

打开以后是master节点的web显示页面,会听到master节点的信息。

linux命令行运行文件_linux运行文件夹命令_linux运行exe文件命令

【注】如果使用服务器运行Alluxio,通常服务器会开启防火墙,须要保证服务器开放了Alluxio的相关端口(大几率要自己自动开放了)。master节点的端口(19999和19998),worker节点的端口(30000和29999)。假如服务器不开放端口,web页面难以访问,rpc服务难以使用。

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复