Spark 对接 Alluxio

浩客2年前技术文章818

1、概览

        Spark 1.1 或更高版本的 Spark可以通过其与 HDFS 兼容的接口直接访问 Alluxio 集群。 使用 Alluxio 作为数据访问层,Spark 应用程序可以透明地访问许多不同类型的持久化存储服务(例如,AWS S3 bucket、Azure Object Store buckets、远程部署的 HDFS 等)的数据,也可以透明地访问同一类型持久化存储服务不同实例中的数据。 为了加快 I/O 性能,用户可以主动获取数据到 Alluxio 中或将数据透明地缓存到 Alluxio 中。 此外,通过将计算和物理存储解耦,Alluxio 能够有助于简化系统架构。 当底层持久化存储中真实数据的路径对 Spark 隐藏时,对底层存储的更改可以独立于应用程序逻辑;同时,Alluxio 作为邻近计算的缓存,仍然可以给计算框架提供类似 Spark 数据本地性的特性。

2、基础设置

        将 Alluxio客户端 jar 包分发在运行 Spark driver 或 executor 的节点上。具体地说,将客户端 jar 包放在每个节点上的同一本地路径(例如/<PATH_TO_ALLUXIO>/client/alluxio-2.9.3-client.jar)。

        或将 Alluxio 客户端 jar 包添加到 Spark driver 和 executor 的 classpath 中,以便 Spark 应用程序能够使用客户端 jar 包在 Alluxio 中读取和写入文件。具体来说,在运行 Spark 的每个节点上,将以下几行添加到 spark/conf/spark-defaults.conf 中。

spark.driver.extraClassPath   /<PATH_TO_ALLUXIO>/client/alluxio-2.9.3-client.jar
spark.executor.extraClassPath /<PATH_TO_ALLUXIO>/client/alluxio-2.9.3-client.jar

3、示例:使用 Alluxio 作为输入和输出

3.1、访问仅在Alluxio中的数据

将本地数据复制到 Alluxio 文件系统中。 假设你在 Alluxio 项目目录中,将LICENSE文件放入 Alluxio,运行:

$ ./bin/alluxio fs copyFromLocal LICENSE /Input

假设 Alluxio Master 运行在localhost上,在spark-shell中运行如下命令:

> val s = sc.textFile("alluxio://localhost:19998/Input")
> val double = s.map(line => line + line)
> double.saveAsTextFile("alluxio://localhost:19998/Output")

打开浏览器,查看 http://localhost:19999/browse。 应该存在一个输出目录/Output,其中包含了输入文件Input的双倍内容

图片1.png

图片2.png

图片3.png

3.2、访问底层存储中的数据

给出准确路径后,Alluxio 支持透明地从底层存储系统中获取数据。 在本节中,使用 HDFS 作为分布式存储系统的示例。

测试文件放入到 HDFS 中:

hdfs dfs -put sparktest /

请注意,Alluxio 并不知道该文件。你可以通过访问 Web UI 来验证这一点。 假设 Alluxio Master 运行在localhost上,在spark-shell中运行如下命令:

val s = sc.textFile("alluxio://172.16.121.130:19998/sparktest")
val double = s.map(line => line + line)
double.saveAsTextFile("alluxio://172.16.121.130:19998/Output2023/sparktest")

打开浏览器,查看 http://localhost:19999/browse 

图片4.png

图片5.png

相关文章

网络数据链路层-MAC帧(1)

网络数据链路层-MAC帧(1)

1.数据链路层数据链路层是网络协议栈中最底层的内容,而在之前对其他层次的学习让我们知道传输层可以保证数据的可靠性问题,网络层保证数据跨网络转发的路由问题,而数据链路层解决的就是局域网内两台主机间通信的...

使用 systemd 管理 MySQL 服务

前言systemd 是 Linux 系统推出的初始化(init)系统,MySQL 使用 RPM 或者 Debian 包安装 MySQL 会默认使用 systemd 来管理 MySQL 服务,不需要额外...

大数据集群部署规划(四)组件建议规格

类型指标名称规格说明HDFS单对NameNode最大文件数1亿-单DataNode最大block数500万GC参数 -Xmx32G单个DataNode磁盘最多block数50万-单个目录下最多文件目录...

服务器间文件传输方法

一、windows间互传当我们想要对业务数据进行传输时,需要借助第三方工具或者系统自带的服务进行数据传输,以下介绍三种常见数据传输方法1、通过windows自带的系统映射服务拷贝数据到目标服务器;端口...

大数据即席查询-Kylin

大数据即席查询-Kylin

一、Kylin 定义 Apache Kylin 是一个开源的分布式分析引擎,提供 Hadoop/Spark 之上的 SQL 查询接口 及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay I...

Kubernetes源码解读(六)-- Informer源码分析

Kubernetes源码解读(六)-- Informer源码分析

Informer 这个词的出镜率很高,我们在很多文章里都可以看到 Informer 的身影,但是我们在源码里真的去找一个叫做 Informer 的对象,却又发现找不到一个单纯的 Informer,但是...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。