当前位置: 首页 > article >正文

PySpark和Hadoop

Python、PySpark和Hadoop之间的关系可以简单概括如下:

  1. Hadoop:是一个分布式数据存储和处理框架,主要包括两个核心组件:

    • HDFS (Hadoop Distributed File System):负责分布式存储,将数据存储在集群中的多个节点上。
    • YARN (Yet Another Resource Negotiator):负责资源管理和任务调度,将计算任务分配到集群节点上。
  2. Spark:是一个分布式数据处理引擎,具有更快的内存计算能力,常用于替代Hadoop的MapReduce。它可以与Hadoop集成,通过HDFS进行数据存储和通过YARN进行资源管理。

  3. PySpark:是Spark的Python API接口,使得可以用Python语言编写Spark程序。它允许数据工程师和数据科学家使用Python进行大数据处理,而不必使用Java或Scala等原生Spark语言。

  • Hadoop提供底层数据存储(HDFS)和资源管理(YARN),而Spark作为计算引擎,通过YARN管理集群资源并使用HDFS存储数据
  • PySpark是Spark的Python接口,允许用户通过Python编写代码,利用Spark和Hadoop的分布式计算和存储能力,来处理大数据。

配置Hadoop和Spark的环境变量以及依赖项的目的,是为了在Windows系统上使PySpark能够访问Hadoop的资源(如HDFS),并能够顺利执行文件读写操作。以下是各个配置的具体作用:

1. 安装Hadoop并配置环境变量

目的

在Windows上,Spark与Hadoop通信需要Hadoop的配置和二进制文件支持,而Hadoop本身默认不支持Windows。因此我们需要手动配置Hadoop环境,使PySpark能够访问HDFS。

操作
  1. 下载Hadoop:Apache Hadoop的下载链接,解压到电脑的一个路径(例如C:\hadoop-3.0.0)。

  2. 设置HADOOP_HOME环境变量:在代码或系统环境中设置HADOOP路径,以便Spark调用Hadoop相关功能。

    在Python代码中可以用如下代码配置Hadoop路径:

    import os
    os.environ['HADOOP_HOME'] = 'HADOOP解压文件夹路径'
    

2. 配置winutils.exe

目的

Hadoop默认不支持Windows,因此在Windows上运行Hadoop依赖winutils.exe。这个文件允许在Windows上使用Hadoop的一些特定功能,例如本地HDFS文件系统操作。

操作
  • 下载winutils.exe,并将其放置在%HADOOP_HOME%\bin目录中(例如,C:\hadoop-3.0.0\bin\winutils.exe)。

3. 下载hadoop.dll文件

目的

在Windows上,Hadoop和Spark的部分功能依赖于hadoop.dll库,该动态链接库允许Spark在Windows上调用Hadoop API,处理HDFS文件的操作。

操作
  • 下载hadoop.dll文件,并将其放入C:\Windows\System32文件夹内。
    • 下载地址:hadoop.dll

4. 验证配置

完成上述配置后,可以通过在PySpark代码中使用简单的HDFS操作来验证环境配置。例如,可以在Python代码中执行文件保存操作:

from pyspark.sql import SparkSession
import os

# 配置HADOOP_HOME路径
os.environ['HADOOP_HOME'] = 'C:\\hadoop-3.0.0'

# 初始化SparkSession
spark = SparkSession.builder \
    .appName("HDFS Write Test") \
    .getOrCreate()

# 创建测试数据
data = spark.createDataFrame([(1, "test"), (2, "example")], ["id", "text"])

# 将数据保存到HDFS路径
data.write.csv("hdfs:///path/to/output/test.csv")

spark.stop()

总结

通过以上步骤,在Windows系统上可以成功配置Hadoop与PySpark,使得Python代码能够正常访问HDFS并进行文件保存等操作。


配置上述linux 集群环境

以支持Hadoop、Spark、YARN以及Python的分布式作业执行,下面是具体的操作步骤:

一、安装前准备

  1. 准备多台服务器(至少2台),一台作为主节点,其他作为从节点。

  2. SSH免密登录

    • 配置主节点可以无密码登录到从节点和其他所有节点,以便管理和执行分布式作业。
    • 执行以下命令生成密钥并复制到其他节点:
      ssh-keygen -t rsa
      ssh-copy-id user@hostname   # 将密钥复制到从节点
      
  3. 下载必需的软件包:Hadoop、Spark、Python和Java的安装包。


二、安装和配置Java

  1. 下载并安装Java(推荐JDK 8或11)。
    • 可以从Oracle或OpenJDK下载。
    • 将JDK解压缩到一个指定目录(例如/opt/java),并在/etc/profile中设置JAVA_HOME
      export JAVA_HOME=/opt/java
      export PATH=$JAVA_HOME/bin:$PATH
      
  2. 验证Java安装
    java -version
    

三、安装和配置Hadoop

  1. 下载Hadoop:从Apache Hadoop官网下载稳定版。

    • 将下载的压缩包解压缩到一个目录(如/opt/hadoop),并在/etc/profile中设置HADOOP_HOME
      export HADOOP_HOME=/opt/hadoop
      export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
      
  2. 配置HDFS和YARN

    • 编辑$HADOOP_HOME/etc/hadoop/core-site.xml

      <property>
          <name>fs.defaultFS</name>
          <value>hdfs://master-node-hostname:9000</value>
      </property>
      
    • 编辑$HADOOP_HOME/etc/hadoop/hdfs-site.xml

      <property>
          <name>dfs.replication</name>
          <value>3</value> <!-- 根据集群节点数量设置 -->
      </property>
      <property>
          <name>dfs.namenode.name.dir</name>
          <value>/opt/hadoop/data/namenode</value>
      </property>
      <property>
          <name>dfs.datanode.data.dir</name>
          <value>/opt/hadoop/data/datanode</value>
      </property>
      
    • 编辑$HADOOP_HOME/etc/hadoop/yarn-site.xml

      <property>
          <name>yarn.resourcemanager.hostname</name>
          <value>master-node-hostname</value>
      </property>
      <property>
          <name>yarn.nodemanager.aux-services</name>
          <value>mapreduce_shuffle</value>
      </property>
      
    • 编辑$HADOOP_HOME/etc/hadoop/mapred-site.xml

      <property>
          <name>mapreduce.framework.name</name>
          <value>yarn</value>
      </property>
      
  3. 配置从节点列表

    • $HADOOP_HOME/etc/hadoop/slaves文件中添加所有从节点的主机名。
  4. 格式化NameNode(首次配置时):

    hdfs namenode -format
    
  5. 启动Hadoop服务

    • 启动HDFS和YARN:
      start-dfs.sh
      start-yarn.sh
      
  6. 验证安装

    • 访问NameNode的Web UI(默认端口9870):http://master-node-hostname:9870
    • 访问YARN ResourceManager的Web UI(默认端口8088):http://master-node-hostname:8088

四、安装和配置Spark

  1. 下载Spark:从Apache Spark官网下载预编译的Hadoop版本的Spark(如spark-3.1.2-bin-hadoop3.2)。

    • 解压缩到指定目录(如/opt/spark),并设置SPARK_HOME
      export SPARK_HOME=/opt/spark
      export PATH=$SPARK_HOME/bin:$PATH
      
  2. 配置Spark

    • $SPARK_HOME/conf/spark-env.sh中添加如下内容:

      export JAVA_HOME=/opt/java
      export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
      export SPARK_WORKER_MEMORY=4g   # 根据需求调整
      export SPARK_WORKER_CORES=4     # 根据需求调整
      export SPARK_MASTER_HOST='master-node-hostname'
      
    • 配置从节点列表:在$SPARK_HOME/conf/slaves文件中添加所有从节点的主机名。

  3. 启动Spark集群

    • 在主节点上启动Spark服务:
      start-all.sh
      
  4. 验证Spark集群

    • 访问Spark Master Web UI(默认端口8080):http://master-node-hostname:8080

五、配置Python和PySpark

  1. 安装Python

    • 安装Python 3.x,并确保与Spark兼容。
    • 在所有节点上安装Python(可以通过包管理器,如aptyum)。
  2. 安装PySpark库

    • 在所有节点上安装pyspark(如果需要在Python中运行Spark任务)。
    pip install pyspark
    
  3. 配置Python路径

    • $SPARK_HOME/conf/spark-env.sh中指定Python路径(假设Python安装在/usr/bin/python3):
      export PYSPARK_PYTHON=/usr/bin/python3
      

六、提交和测试Spark作业

在主节点上,测试Spark任务的提交。以下是一个示例命令:

$SPARK_HOME/bin/spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --num-executors 3 \
  --executor-cores 4 \
  --executor-memory 4g \
  /path/to/your_script.py
  • 解释
    • --master yarn:指定YARN为资源管理器。
    • --deploy-mode cluster:在YARN集群中以集群模式运行。
    • --num-executors:指定Executor数量。
    • --executor-cores:为每个Executor分配的CPU核心数。
    • --executor-memory:为每个Executor分配的内存大小。

完成以上配置后,您将能够在Hadoop和YARN环境中运行Spark作业,并利用集群中的资源处理分布式数据任务。

这段指令展示了Hadoop文件系统(HDFS)中的文件操作命令:

hadoop fs -ls /output/output_json

解释

  • hadoop fs:用于执行HDFS文件操作的命令,类似于本地文件系统的lsmkdir等命令,但作用在HDFS上。
  • -ls:列出指定目录中的文件和子目录的信息。
  • /output/output_json:HDFS中的路径,表示列出/output/output_json目录下的文件。

该指令的作用是在HDFS中查看/output/output_json目录下的文件和文件夹,通常用于检查数据是否已成功保存到HDFS指定目录下。这对验证Spark作业或其他Hadoop任务的输出结果很有帮助。


集群管理方式来部署和运行Spark集群。

以下是使用 Standalone ModeYARNKubernetesMesos 各种模式来搭建Spark集群的步骤:

一、Standalone Mode(独立模式)

Standalone模式是Spark自带的简单集群管理器,不需要额外安装其他的资源管理器,是最简单的Spark部署模式。

  1. 下载并安装Spark

    • 下载Spark预编译包,推荐hadoop版本(如spark-3.1.2-bin-hadoop3.2)。
    • 解压到目标目录(例如/opt/spark)。
  2. 配置Spark Standalone Mode

    • $SPARK_HOME/conf/spark-env.sh中添加:
      export SPARK_MASTER_HOST='master-node-hostname'  # 设置Master节点主机名
      
    • $SPARK_HOME/conf/slaves中添加所有从节点的主机名(每行一个从节点的主机名)。
  3. 启动Spark集群

    • 在主节点上启动Spark服务:
      $SPARK_HOME/sbin/start-all.sh
      
    • 验证:访问Spark Master Web UI(默认端口8080):http://master-node-hostname:8080
  4. 提交任务

    • 使用spark-submit提交任务:
      $SPARK_HOME/bin/spark-submit --master spark://master-node-hostname:7077 your_script.py
      

适合场景:小规模集群和不需要复杂资源管理的环境。


二、YARN集群模式

YARN(Yet Another Resource Negotiator)是Hadoop的资源管理器,适合与Hadoop生态系统集成。YARN可以与Hadoop的HDFS结合使用,允许Spark任务使用分布式存储。

  1. 安装Hadoop

    • 安装Hadoop并配置HDFS和YARN,确保YARN ResourceManager和NodeManager正常运行。
  2. 下载并安装Spark

    • 同样安装带Hadoop依赖的Spark版本。
  3. 配置Spark YARN Mode

    • $SPARK_HOME/conf/spark-env.sh中添加Hadoop配置路径:
      export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
      
  4. 启动Hadoop和Spark

    • 启动HDFS和YARN:
      $HADOOP_HOME/sbin/start-dfs.sh
      $HADOOP_HOME/sbin/start-yarn.sh
      
  5. 提交任务

    • 使用YARN管理集群资源,提交任务命令如下:
      $SPARK_HOME/bin/spark-submit \
        --master yarn \
        --deploy-mode cluster \
        --num-executors 3 \
        --executor-cores 4 \
        --executor-memory 4g \
        /path/to/your_script.py
      

适合场景:Hadoop环境中需要处理大规模数据的任务。


三、Kubernetes模式

Kubernetes是一个现代化的容器编排平台,适用于部署容器化的分布式应用,包括Spark。

  1. 设置Kubernetes集群

    • 使用工具如minikubekubeadm搭建Kubernetes集群,或者使用云服务(如AWS EKS,Google GKE)。
    • 安装kubectl工具来管理Kubernetes集群。
  2. 安装Spark并准备Docker镜像

    • Spark需要容器镜像。可以从Apache Spark Docker Hub获取镜像,或者自己构建。
    • 使用spark-on-k8s-operator可以简化Spark任务在Kubernetes上的管理和提交。
  3. 配置Kubernetes访问

    • 在Spark中配置Kubernetes API访问权限,例如在$SPARK_HOME/conf/spark-defaults.conf中添加:
      spark.master k8s://https://kubernetes-master:6443
      spark.kubernetes.container.image my-spark-image
      
  4. 提交任务

    • 使用spark-submit提交任务:
      $SPARK_HOME/bin/spark-submit \
        --master k8s://https://kubernetes-master:6443 \
        --deploy-mode cluster \
        --name spark-pi \
        --class org.apache.spark.examples.SparkPi \
        --conf spark.executor.instances=3 \
        --conf spark.kubernetes.container.image=my-spark-image \
        local:///opt/spark/examples/jars/spark-examples_2.12-3.1.2.jar 100
      

适合场景:云原生环境或容器化应用,需要容器调度和管理的情况下。


四、Mesos模式

Mesos是一个分布式资源管理系统,可用于多种工作负载的调度和管理,包括Spark。

  1. 安装Mesos

    • 从Apache Mesos官网下载并安装Mesos集群。
    • Mesos依赖ZooKeeper进行集群管理,需安装并配置ZooKeeper。
  2. 配置Mesos集群

    • 配置Mesos Master和Agent(从节点):
      • 启动Mesos Master:
        mesos-master --zk=zk://master-node:2181/mesos --work_dir=/var/lib/mesos --quorum=1
        
      • 启动Mesos Agent:
        mesos-agent --master=zk://master-node:2181/mesos --work_dir=/var/lib/mesos
        
  3. 下载并安装Spark

    • 与上面类似,安装Spark并配置Mesos集群模式。
  4. 提交任务

    • 使用spark-submit提交任务到Mesos集群:
      $SPARK_HOME/bin/spark-submit \
        --master mesos://master-node-hostname:5050 \
        --deploy-mode cluster \
        --class org.apache.spark.examples.SparkPi \
        /path/to/spark-examples_2.12-3.1.2.jar 100
      

适合场景:多种分布式应用需要统一管理的集群,且需要高扩展性和可用性。


总结

不同的集群管理模式有各自的优势:

  • Standalone Mode:轻量级且简单,适合小型集群。
  • YARN:适合Hadoop生态系统中使用的Spark作业。
  • Kubernetes:现代化的容器管理,适合云原生和容器化环境。
  • Mesos:适合多种分布式系统协同运行,适用更复杂的应用场景。

每种模式都能满足不同的需求,具体选择取决于环境和集群资源的实际情况。


http://www.kler.cn/a/376241.html

相关文章:

  • pandas——数据结构
  • 《GBDT 算法的原理推导》 11-12计算损失函数的负梯度 公式解析
  • FPGA时序分析和约束学习笔记(3、Timequest时序路径详解和优化)
  • Cityscapes数据集:如何将像素级的多边形标注的分割数据标注转为目标检测的bbox标注
  • Windows部署rabbitmq
  • 【表格解决问题】EXCEL行数过多,WPS如何按逐行分别打印多个纸张中
  • 前端加密解密
  • 基于springboot的社区团购系统设计与实现
  • 【数据结构-邻项消除】力扣2216. 美化数组的最少删除数
  • [STM32]从零开始的IIC协议讲解与设备驱动
  • 【周末推荐】Windows无缝连接iPhone
  • HCIA(ACL)
  • 如何看待长周期项目?
  • GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序
  • uaGate SI——实现OT与IT的安全连接
  • [Ubuntu] 文件/目录权限更改
  • 【零售和消费品&存货】超市购物车商品检测系统源码&数据集全套:改进yolo11-DySnakeConv
  • C++ [项目] 躺平发育
  • java stream流的使用
  • 使用 firewall-cmd 管理 Linux 防火墙
  • 飞牛NAS docker compose环境下自建远程桌面服务:rustdesk
  • 深度学习:交叉熵损失(Cross Entropy Loss)
  • MySQL、MongoDB 和 SQL Server 的区别
  • cmake编译特性 相关设置函数(细节)
  • Docker | 常用的容器container命令
  • Linux开发讲课47--- 详解 Linux 中的虚拟文件系统