当前位置: 首页 > Linux

Linux下编译运行Alluxio

时间:2023-04-06 22:12:13 Linux

我是第一次接触分布式项目,而且还是在Linux下编程,确实和Windows下编程有点区别。没有一点防备,就学习了不能在windows上运行的代码,以及web开发以外的开发。熟悉以前Windows下的开发,使用IDEA工具开发,点击build编译工程(之前已经翻译成build工程),点击run运行工程,有时候甚至不点击build。这个过程好像是肌肉记忆,熟练到我忽略了背后的原因,就好像本来就是这样。不得不说,当我看到Alluxio官网需要准备Mac或者Linux的时候,脑子里闪过很多问号,在Linux上运行(没有Mac,没有Mac)?不能在Windows上运行?所以在Windows上看不到输出?无法在Windows上编译?构造?编译?构建和编译?我如何启动并运行该项目?如何使用命令?在这里记录一下编译运行的理解。下面编译运行的代码是分布式缓存系统Alluxio。概念:它是什么?一个java程序需要经过编译和运行两个步骤才能看到程序的效果。这里有两个非常重要的过程,即编译和运行。编译:将源代码“转”成字节码。如何改变”?由jdk中的javac编译。运行:将字节码“转”为机器码。如何改变”?由虚拟机jvm生成。运行这个过程也是虚拟机将类加载到内存中的过程。操作系统执行机器码运行java程序,看源码效果。那么,什么是源代码和字节码呢?源代码就是我们程序员写的代码,是以.java结尾的文件。字节码是虚拟机jvm可以理解的代码,是以.class结尾的文件。它只是针对虚拟机而言,使用相同的字节码,虚拟机会给出相同的结果。也就是说,只要虚拟机相同,即使底层操作系统不同,java程序也可以直接运行,无需重新编译。字节码字节码是java程序生成的中间代码,不是机器/操作系统可以直接执行的代码。字节码就是虚拟机jvm可以看懂的代码。它不面向特定的操作系统,只面向虚拟机。使用相同的字节码,虚拟机将给出相同的结果。Java语言通过字节码在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言的可移植性。说到java程序,就离不开虚拟机。Java虚拟机(JVM)是运行Java字节码的虚拟机。JVM对不同的系统(Windows、Linux、macOS)有特定的实现,目的是使用相同的字节码,它们都会给出相同的结果。字节码和不同系统的JVM实现是Java语言“一次编译,到处运行”的关键。编译与解释并存??高级编程语言按照程序的执行方式分为两种:编译型:编译型语言通过编译器将源代码一次性翻译成平台可以执行的机器码。一般来说,编译型语言的执行速度比较快,开发效率比较低。常见的编译型语言有C、C++、Go、Rust等。解释型:解释型语言将代码逐句解释成机器码,然后执行。解释型语言的开发效率比较快,但是执行速度比较慢。常见的解释型语言有Python、JavaScript、PHP等,java语言是一种编译和解释并存的语言。因为Java语言既有编译型语言的特点,又有解释型语言的特点。一个java程序需要先编译,然后解释,两步才能运行。编译发生在源代码转换为字节码时,解释发生在字节码执行时。源代码由编译器编译生成字节码,字节码由解释器解释执行。因此,要想运行一个java程序,看到代码的效果,就必须经过编译和运行两个步骤。在Windows或者Linux上都是一样的,但是不同的操作系统可能有不同的实现方式。Windows可以通过图形化的IDEA点击实现这两个过程,而Linux一般使用命令行,没有图形界面,所以需要通过命令来执行编译和运行这两个操作。代码在哪里?该项目只能在Linux下编译运行,而我的本地系统是Windows。因此,代码应该放在远程Linux服务器上,或者放在本地虚拟机中。不管代码怎么写,把代码放到服务器上后,就可以编译运行启动项目了。抛开之前在Windows上运行项目的过程,在Linux上启动项目:代码怎么放?将项目从主仓库fork到自己仓库后,使用git下载自己仓库中的代码。如何编译?进入项目后如何运行命令执行编译?进入项目根目录后,执行运行命令,然后在检查Alluixo确实启动成功后,就可以像在Windows(比较熟悉)上运行项目一样,使用它查看输出信息等。Linux下编译从远程仓库下载代码后,就可以编译代码了(当然Alluxio需要设置配置文件)。Alluxio官网上有编译代码相关的内容。在Linux下,需要使用Maven工具来完成java程序的编译。Linux系统需要提前安装好jdk8和Maven。在项目根目录下执行以下命令,完成编译过程。Maven编译环境会自动获取依赖,编译源码,运行单元测试,打包。为了加快编译速度,mvncleaninstall在编译Alluxio时可以跳过一些检查mvn-T2Ccleaninstall-DskipTests-Dmaven.javadoc.skip-Dfindbugs.skip-Dcheckstyle.skip-Dlicense.skip【注意】-T2:使用2个线程进行构建。-T2C:使用双核构建。编译完成后,会在每个目录下生成一个target目录。该目录下是生成的中间文件。在java源码中可以找到类对应的.class文件。Linux下运行一般项目都会有运行项目的命令。以Alluxio为例,官网上有几种运行Alluxio的方式,包括本地运行、集群运行、Docker运行、K8s运行等。不同的方法在执行运行命令前需要不同的配置。本地运行本地运行是指在本地运行Alluxio代码。“本地”是指运行代码的主机,不是我们用来写代码的电脑,也不是其他主机。这种在本地运行Alluxio的方式会在本地启动一个Master节点和一个Worker节点(只是说Alluxio会启动那么多,而不是其他系统)。在集群中运行集群就是一组主机,简单理解为很多台计算机。在集群中运行,在多台主机上运行代码。使用集群运行代码的前提是主机多,至少2台。其他运行方式需要Docker或者k8s能够使用对应的容器。所以先从更简单的本地运行开始,毕竟只需要在一台电脑上运行代码即可。运行前Step1修改配置文件在运行Alluxio之前,需要做一些配置。创建配置文件conf/alluxio-site.properties,在配置文件中设置master节点的主机地址和Alluxio挂载地址。一是设置主节点运行的主机,在文件中添加配置alluxio.master.hostname=localhost,master节点所在的host设置为local。其次,设置Alluxio的挂载地址。alluxio.master.mount.table.root.ufs=/tmp,设置Alluxio的挂载地址为/tmp,这个文件是宿主机上的一个真实文件夹。这一步设置完成后,/tmp文件夹就是Alluxio的域,该文件下的所有内容都由Alluxio管理。如果你想管理Alluxio中的其他文件,你需要将它们从它们原来的位置“复制”到/tmp文件下。【注意】因为Alluxio是一个缓存系统,而不是一个真正存储数据的存储系统,所以这个“复制”操作并不是我们平时操作文件时的复制操作。“复制”操作是指Alluxio启动后,通过Alluxio的复制命令copyFromLocal将Alluxio要管理的文件或路径复制到Alluxio管理的空间中。复制到哪里?复制到Alluxio管理的空间,具体来说就是Alluxio中的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格式到这里,运行前的准备工作就完成了。那么上面使用的命令是什么意思呢?./bin/alluxio:当前目录下的bin目录下的Alluxio。因此,如果要运行Alluxio命令,首先要弄清楚当前目录是什么。从GitHub上下载Alluxio的代码后,有一个名为alluxio的目录。进入alluxio目录,可以找到bin目录,所有的执行脚本都在bin目录下。因此,在运行Alluxio自带的命令之前,必须先进入alluxio目录,在该目录下执行命令。SudoMount/format:Alluxio中的自定义命令关键字。Running如果文件系统没有挂载或者要重新挂载,执行下面命令/bin/alluxio-start.shlocalSudoMount如果文件系统已经挂载,执行下面命令/bin/alluxio-start.shlocal之后执行,会出现如下信息:VerifythatAlluxioisrunning。一开始运行Alluxio。在您安心之前,请始终验证Alluxio是否真的在运行。第一种方法:查看日志Alluxio日志信息记录在logs中。查看Master节点的日志信息,部分信息如下2022-03-1710:54:57,966INFOServer-Started@36486ms2022-03-1710:54:57,966INFOWebServer-AlluxioMasterWebservicestarted@/0.0.0.0:199992022-03-1710:54:57,967INFOAlluxioMasterProcess-StartinggRPCserveronaddress:/0.0.0.0:19998可以看到主节点服务已经启动,主节点的web服务端口为19999,rpc服务端口为19998。方式二:查看master节点的网页。如果在服务器所在的主机上可以访问地址http://localhost:19999,如果在服务器以外的主机上访问,则需要访问地址http://服务器公网ip地址:19999.打开后就是主节点的web展示页面,可以看到主节点的信息。【注意】如果使用服务器运行Alluxio,一般服务器会开启防火墙,需要确保服务器已经开启了Alluxio的相关端口(多半需要手动开启)。主节点的端口(19999和19998),工作节点的端口(30000和29999)。如果服务器不开放端口,则无法访问网页,无法使用rpc服务。