代码改变世界

华为鲲鹏 Aarch64 环境下多 Oracle 数据库汇聚操作指南 CMP(类 Cloudera CDP 7.3) - 指南

2025-11-16 13:32  tlnshuju  阅读(0)  评论(0)    收藏  举报

CMP(类 Cloudera CDP 7.3)在华为鲲鹏 Aarch64(ARM)信创环境下,汇聚多个 Oracle 数据库 的操作指南

以下是一份针对CMP(类 Cloudera CDP 7.3)在华为鲲鹏 Aarch64(ARM)信创环境下,汇聚多个 Oracle数据库的操作指南。

注意:此指南基于当前(2025年10月)的技术背景和对您需求的理解,其中“CMP(类ClouderaCDP7.3(404次编译))”可能指代一个基于 CDP 7.x 技术栈的定制化平台或概念性产品,因为 CDP 7.3 官方并未发布 ARM64 版本。本指南将重点放在如何在鲲鹏 AArch64 环境下,利用类似 CDP 的大数据技术栈(如 Hadoop、Spark、Hive、Kafka 等)来连接和汇聚多个 Oracle 数据库。


华为鲲鹏 Aarch64环境下多 Oracle数据库汇聚操作指南

目标

在华为鲲鹏 AArch64 服务器上部署大数据平台(类 CDP),实现对多个 Oracle 数据源的统一接入、汇聚、存储与初步处理。

环境准备

  • 硬件: 华为鲲鹏 920 服务器(ARM64 架构)
  • 操作系统: EulerOS 2.0 或 openEuler (AArch64)
  • 大数据平台: 假设为 "CMP" (Cloudera-like Platform),或使用原生 Hadoop 生态组件(HDFS, YARN, Spark, Hive, Sqoop, Kafka)进行部署。
  • 数据源: 多个 Oracle 11g/12c/19c 数据库实例
  • JDK: OpenJDK 8 或 11 (AArch64 版本)
  • Oracle JDBC Driver: ojdbc8.jar (需与 Oracle 版本兼容)

操作步骤

第一步:鲲鹏 AArch64环境准备

  • 操作系统安装与配置:
    • 在鲲鹏服务器上安装 EulerOS 2.0 或 openEuler AArch64 版本。
    • 调整网络、防火墙(开放必要端口,如 HDFS 8020, YARN 8088, Hive 10000, Spark History Server 18080 等)。
    • 关闭 SELinux (setenforce 0 并修改 /etc/selinux/config)。
  • JDK 安装:
    • 下载适用于 AArch64 的 OpenJDK 8/11。
    • 解压并设置 JAVA_HOME 环境变量。

Bash

tar -xzf openjdk-8u422-linux-aarch64.tar.gz

export JAVA_HOME=/path/to/openjdk-8u422-linux-aarch64

export PATH=$JAVA_HOME/bin:$PATH

第二步:部署大数据平台 (CMP/原生 Hadoop)

关键: 应该确保所有组件都协助 AArch64。原生 Hadoop、Spark、Hive 对 AArch64 支持较好,但 CDP 7.3 官方不支持。可能需要:

  • 利用社区或第三方提供的 AArch64 兼容版本。
  • 自行编译源码(如标题中的“404次编译”暗示可能需要)。
  • 考虑替代方案,如原生 Hadoop + Ambari/Cloudera Manager(需 ARM 承受)或其他国产大数据平台。
  • 下载与解压:
    • 下载对应 AArch64 的 Hadoop、Spark、Hive 等二进制包。
    • 解压到 /opt 或 /usr/local 目录。
  • 设置 Hadoop:
    • 编辑 core-site.xml, hdfs-site.xml, yarn-site.xml, mapred-site.xml。
    • 设置 fs.defaultFS 指向你的 HDFS NameNode。
    • 设置 yarn.resourcemanager.hostname 指向你的 ResourceManager。
    • 配置 yarn.nodemanager.resource.memory-mb 和 yarn.nodemanager.resource.cpu-vcores 以适应鲲鹏硬件。
    • 重要: 在 hadoop-env.sh, yarn-env.sh, spark-env.sh 中设置 JAVA_HOME。
  • 启动 Hadoop:

Bash

# 格式化 NameNode (仅首次)

hdfs namenode -format

# 启动 HDFS 和 YARN

start-dfs.sh

start-yarn.sh

# 启动 JobHistory Server (MapReduce)

mr-jobhistory-daemon.sh start historyserver

  • 配置 Spark & Hive:
    • 设置 SPARK_HOME 和 HIVE_HOME。
    • 配置 spark-defaults.conf 和 hive-site.xml 连接到 HDFS 和 YARN。
    • 确保 spark-env.sh 和 hive-env.sh 中 JAVA_HOME 正确。

第三步:配置 Oracle连接

  • 下载 Oracle JDBC Driver:
    • 从 Oracle 官网下载 ojdbc8.jar (或对应版本)。
  • 放置 JDBC Driver:
    • 将 ojdbc8.jar 放置到 Hadoop、Spark、Hive 的 lib 目录下。

Bash

cp ojdbc8.jar $HADOOP_HOME/share/hadoop/common/lib/

cp ojdbc8.jar $SPARK_HOME/jars/

cp ojdbc8.jar $HIVE_HOME/lib/

第四步:内容汇聚策略

有多种方式行从 Oracle 汇聚数据到 HDFS,以下介绍两种常用方法:

方法一:利用 Sqoop进行批量导入

  • 安装 Sqoop:
    • 下载并解压 Sqoop AArch64 版本,或自行编译。
  • 执行 Sqoop导入:
    • 全量导入示例:

Bash

sqoop import \

--connect jdbc:oracle:thin:@//<oracle_host1>:<port>/<service_name> \

--username <oracle_user> \

--password <oracle_password> \

--table <oracle_table_name> \

--target-dir /user/hive/warehouse/oracle_db.db/table_name \

--delete-target-dir \

--as-parquetfile \

--num-mappers 4

    • 增量导入示例(基于时间戳):

Bash

sqoop import \

--connect jdbc:oracle:thin:@//<oracle_host1>:<port>/<service_name> \

--username <oracle_user> \

--password <oracle_password> \

--table <oracle_table_name> \

--target-dir /user/hive/warehouse/oracle_db.db/table_name_incremental \

--check-column <timestamp_column> \

--incremental lastmodified \

--last-value '2025-10-16 10:00:00' \

--merge-key <primary_key_column> \

--as-parquetfile \

--num-mappers 2

    • 对每个 Oracle源重复执行,导入到不同的 HDFS 路径。

方法二:启用 Spark SQL进行实时/准实时读取与处理

  • 编写 Spark应用:

[title="Spark Oracle Data Ingestion Example"]

Scala

importorg.apache.spark.sql.SparkSession

importjava.util.Properties

object OracleIngestion {

def main(args: Array[String]): Unit = {

val spark = SparkSession.builder()

.appName("Oracle Ingestion to HDFS")

.config("spark.sql.adaptive.enabled", "true") // 启用自适应查询执行

.getOrCreate()

val jdbcUrl1 = "jdbc:oracle:thin:@//<oracle_host1>:<port>/<service_name>"

val jdbcUrl2 = "jdbc:oracle:thin:@//<oracle_host2>:<port>/<service_name>"

val username = "<oracle_user>"

val password = "<oracle_password>"

val connectionProperties =newProperties()

connectionProperties.put("user", username)

connectionProperties.put("password", password)

connectionProperties.put("driver", "oracle.jdbc.OracleDriver")

// 读取第一个 Oracle 表

vardf1 = spark.read

.jdbc(jdbcUrl1, "<oracle_table_name>", connectionProperties)

.withColumn("source", lit("oracle1")) // 添加来源标识

// 读取第二个 Oracle 表

vardf2 = spark.read

.jdbc(jdbcUrl2, "<oracle_table_name>", connectionProperties)

.withColumn("source", lit("oracle2"))

// 合并材料 (Union)

varcombinedDf = df1.union(df2)

// 信息清洗、转换 (示例)

combinedDf = combinedDf.filter(col("status") === "ACTIVE") // 示例过滤

combinedDf = combinedDf.withColumn("processed_at", current_timestamp()) // 添加处理时间

// 写入 HDFS (Parquet 格式推荐)

combinedDf.write

.mode("overwrite") // 或 "append" 用于增量

.parquet("/user/hive/warehouse/consolidated_oracle_data")

spark.stop()

}

}

注意:需要将 spark-core, spark-sql, spark-catalyst以及 ojdbc8.jar添加到 classpath

  • 提交 Spark作业:

Bash

spark-submit \

--class OracleIngestion \

--master yarn \

--deploy-mode client \

--jars /path/to/ojdbc8.jar \

/path/to/your/spark-app.jar

第五步:数据存储与管理(Hive

  • 创建 Hive外部表(指向 HDFS 上的 Parquet 记录):

Sql

CREATE EXTERNAL TABLEIFNOT EXISTS consolidated_oracle_data (

id BIGINT,

name STRING,

value DOUBLE,

statusSTRING,

processed_at TIMESTAMP

)

STOREDASPARQUET

LOCATION '/user/hive/warehouse/consolidated_oracle_data';

  • 使用 HiveQL进行查询和进一步处理

第六步:自动化与调度

  • 应用 Oozie、Airflow 或 Azkaban 等工作流调度工具,将 Sqoop 导入或 Spark 作业编排成定时任务,实现数据的定期汇聚。

⚠️ 注意事项

  • 兼容性: AArch64 上的大数据组件兼容性是关键挑战,可能得大量测试和定制。
  • 性能: 鲲鹏平台的性能调优(JVM 参数、Hadoop/Spark 配置)至关重要。
  • 安全性: 在信创环境下,确保数据传输和存储的安全性(如 Kerberos 认证、Sentry/Atlas 授权)。
  • Oracle连接: 确保网络可达,JDBC 驱动版本兼容,Oracle 用户权限足够。

这份指南献出了一个根本框架。具体实现细节(如配置文件的具体内容、编译步骤等)将根据您实际利用的“CMP”平台或原生组件的版本而有所不同。