---
title: 执行移植分析
description: "将软件从x86平台移植到鲲鹏服务器时，建议先使用鲲鹏应用迁移工具或自定义脚本对软件进行移植分析，再依据分析报告进行移植。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengbds/ecosystemEnable/Spark/kunpengspark_02_0009.html
sourcePath: /source/zh/kunpengbds/ecosystemEnable/Spark/kunpengspark_02_0009.html
indexId: 09eefad2e504e297b0e704ad54c61910ab89a40378d6b9d9d95982e9077cb74169
---
# 执行移植分析

将软件从x86平台移植到鲲鹏服务器时，建议先使用鲲鹏应用迁移工具或自定义脚本对软件进行移植分析，再依据分析报告进行移植。

#### 方法一：使用鲲鹏应用迁移工具

使用鲲鹏应用迁移工具扫描Spark安装包，生成分析报告，详细操作步骤如下。

1. 扫描Spark安装包并分析扫描报告，详细操作步骤请参见《使用鲲鹏应用迁移工具案例(https://www.hikunpeng.com/document/detail/zh/kunpengbds/ecosystemEnable/porting-tuning-devkit/kunpengprtguseda_01_0004.html)》。分析得出需要移植的第三方依赖包如图1所示。
  图1 软件移植分析结果（以Spark 2.3.0为例）

2. 根据扫描结果，下载“软件迁移评估报告”中显示“可兼容”的新JAR包，替换掉原始JAR包。
3. 如果分析结果中出现“待确认”的包，请联系供应方获取鲲鹏兼容版本，或获取源码并在鲲鹏平台上编译生成鲲鹏兼容版本。


#### 方法二：使用自定义脚本检查

通过自定义脚本检测Spark安装包中JAR文件是否包含动态库文件（.so），并进一步验证动态库是否支持AArch64架构，详细操作步骤如下。

1. 使用以下脚本检查Spark安装包里是否有动态库文件。

```
#!/bin/bash
spark_jars=/usr/local/spark/jars
for file in $(ls -v $spark_jars); do
if [[ $file == *.jar ]]; then
if jar tf $spark_jars/$file 2>/dev/null | grep -q "\.so$"; then
echo "=== $file contains linux dynamic libraries: ==="
jar tf $spark_jars/$file 2>/dev/null | awk -F '/' '{print $NF}' | grep "lib.*\.so$"
fi
fi
done
```


  执行该脚本后，会列出包含so文件的JAR包及其文件名。以Spark 3.3.1为例，输出结果如下图所示。

2. 检查JAR包里的so文件是否支持AArch64平台。以步骤1截图中的commons-crypto-1.1.0.jar为例。

```
cd /usr/local/spark/jars
mkdir tmp
find -name lib*
```


  输出结果如下图所示。

  如果文件路径中包含arm或者aarch64，说明该文件是为AArch64架构编译的，支持鲲鹏平台。

3. 使用如下命令进一步确认架构。

```
readelf -h ./org/apache/commons/crypto/native/Linux/aarch64/libcommons-crypto.so
```

输出结果如下图所示。

  - 如果Machine显示为AArch64，则表示该动态库是为AArch64平台编译的，支持鲲鹏平台。
  - 如果显示为其他架构，则表示该包不支持鲲鹏平台，需要执行步骤    4
。
4. 请联系供应方获取鲲鹏兼容版本，或获取源码并在鲲鹏平台上编译生成鲲鹏兼容版本。
