第一次接触分布式项目,还是在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服务难以使用。