presto国产化适配-aarch64

适配完成完整trino包,源码版本为367,适配成功后RPM包下载地址为:https://download.csdn.net/download/lp895876294/70870492

trion-hadoop-hive单独的jar包下载地址为:https://download.csdn.net/download/lp895876294/70872330

国产化环境

  • 飞腾芯片
  • 涉密、专用版银河麒麟操作系统。系统安全防护相对于一般国产化系统更强。

已装大数据软件

  • JDK-1.8-aarch64
  • Hadoop:3.1.3
  • Hive:3.1.2

Presto适配要求

  • 在国产化操作系统中正常运行presto服务。
  • 使用presto对接Hive,支持即席查询功能。

技术调研

  • presto-0.267软件本身不支持aarch64架构,运行报错为:“Presto requires amd64 or ppc64le or aarch64 on Linux”。虽然可以通过编译源码解决此适配问题,但仅限于一般的国产化操作系统,对于涉密专用版的国产化操作系统依旧无法正常运行。参考地址:Presto 0.244.1 aarch64编译_刘大宁的博客-CSDN博客_presto 鲲鹏
  • presto-0.267软件的hive插件,仅支持hive-hadoop2,不支持hive3。
  • presto另一版本分支trino-367版本,官宣支持hive2和hive3,并针对hive的插件支持国产化操作系统。

因此,presto软件的国产化适配方案,选择trion-367版本。

适配方案

环境准备

  • 下载trion-367分支源码,以及trino-hadoop-apache-3.2.0-16的源码。
  • 配置trion编译环境,jdk-11.0.18-aarch64、maven-3.8.4。

修改trino-hadoop-apache-3.2.0源码

  • 在/src/main/java/io/trino/hadoop/HadoopNative.java中,调整.so文件的加载策略,优先从临时目录中加载指定的文件,如果无指定文件,还是按照原有方式加载。如下。
    private static void loadLibrary(String name)
            throws IOException
    {
        File file = null ;
        // 使用指定的so文件
        String targetPath = System.getProperty("java.io.tmpdir") ;
        String soFilePath = targetPath + "/" + name +".so" ;
        File soFile = new File(soFilePath) ;
        if(soFile.exists()){
                file = soFile ;
        }else{
                String libraryPath = getLibraryPath(name);
                URL url = HadoopNative.class.getResource(libraryPath);
                if (url == null) {
                        throw new RuntimeException("library not found: " + libraryPath);
                }

                file = File.createTempFile(name, null);
                file.deleteOnExit();
                try (InputStream in = url.openStream()) {
                        Files.copy(in, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
                }
        }

        System.load(file.getAbsolutePath());
    }
  • 将/src/main/resources/nativelib/Linux-aarch64中的so文件单独拷贝出,并分别命名为:hadoop.so、snappy.so和zstd.so,留作trion打包部署后备用。
  • 编译trion-hadoop-apache-3.2.0源码,在target文件夹中生成hadoop-apache-3.2.0-16.jar。

编译trino源码

  • 执行maven命令,编译trino源码,并生成编译后的trion目录如下。
  • 将trion-hadoop-apache-3.2.0源码中的hadoop.so、snappy.so和zstd.so,拷贝到nativelib中。
  • 将jdk-11.0.18-aarch64解压后的内容拷贝到jdk中。解决jdk8和jdk11的兼容问题;同时,是trion可以不依赖于操作系统已有jdk独立运行。
  • 修改bin/launcher代码,指定使用jdk路径。 
  • 修改etc/jvm.config,添加运行时参数信息:-Djava.io.tempdir=/data/trino/nativelib,指定.so文件优先从此目录中直接加载已有的so文件。解决的错误为:/tmp/hadoop12393847837.tmp,无法从共享目标中映射段。参考如下。 
  • 按照涉密、专用版国产化操作系统安装部署要求,将trion打包为trino.rpm包,参考命令为
    fpm -s dir -a aarch64 -t rpm -n trino -v 3.6.7 -f -p //data/arm64/target/trino /data/trino

数据验证

  •  分别在千万级表中执行普通查询、聚合查询和关联查询验证,各SQL均执行通过,参考如下。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ant-666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值