如何使用SparkSQL,Parquet和Alluxio加快即席分析

在大数据企业生态系统中,分析和数据科学总是有新的选择。 Apache孵化了许多项目,人们总是对如何选择合适的生态系统项目感到困惑。 在数据科学管道中,即席查询是重要的方面,它使用户能够运行不同的查询,从而产生探索性统计信息,从而帮助他们理解数据。 实际上,对于许多公司和实践而言,Hive仍然是他们的工作之马。 与Hive一样古老,不同的组织可能会以不同的方式破解它,以使其易于使用。 仍然,我听到很多抱怨说查询无法完成。 花时间等待查询执行和调整查询结果会减慢数据科学发现的速度。

就个人而言,与Hive map-reduce程序相比,我喜欢使用Spark来运行即席查询,这主要是因为同时在Spark上执行其他操作比较容易。 我不必使用其他工具来回切换。 最近,我还研究了Alluxio,这是一个分布式的内存文件系统。 在本文中,我将演示使用SparkSQL,Parquet和Alluxio来加速即席查询分析的示例。 使用Spark加速查询时,数据局部性是关键。

使用MapR安装Alluxio

首先,我们从在3节点AWS实例(m4.2xlarge)上运行的现有MapR 5.1系统开始。 我们从Github下载Alluxio并使用Mapr5.1构件进行编译。

git clone git://github.com/alluxio/alluxio.git
cd alluxio
git checkout v1.2.0
mvn clean package -Dhadoop.version=2.7.0-mapr-1602 -Pspark -DskipTests

Oracle Java 8用于编译Alluxio,它也是与MapR系统运行的Java相同的版本。 但是,要启动Alluxio Web UI,需要暂时切换回Java 7。 我们还对配置进行了一些更改,添加了alluxio-env.sh:

ALLUXIO_MASTER_HOSTNAME=${ALLUXIO_MASTER_HOSTNAME:-"node1 host name"}
ALLUXIO_WORKER_MEMORY_SIZE=${ALLUXIO_WORKER_MEMORY_SIZE:-"5120MB"}
ALLUXIO_RAM_FOLDER=${ALLUXIO_RAM_FOLDER:-"/mnt/ramdisk"}
ALLUXIO_UNDERFS_ADDRESS=${ALLUXIO_UNDERFS_ADDRESS:-	"/mapr/clustername/tmp/underFSStorage"}
ALLUXIO_JAVA_OPTS+=" -	Dalluxio.master.journal.folder=/mapr/clustername/tmp/journal"

这些配置将放置在MapR文件系统上的Alluxio文件存储以及主日志中,同时还为Alluxio工作集文件设置5GB的内存。 我们甚至可以在MapR-FS中设置一个专用的卷作为Alluxio的文件系统。 我们还可以添加一个工作文件,该文件的主机名是我们计划在其上运行Alluxio worker的3个节点的主机名。

node1
node2
node3

因此,在我们的3节点MapR集群之上,我们具有Alluxio架构,其中主服务器运行在node1上,工作服务器运行在node1,node2和node3上。 您只需要运行一些命令就可以运行Alluxio。 那么您将可以在节点1:19999处访问Web UI

clush -ac /opt/mapr/alluxio/conf
cd /opt/mapr/alluxio/ 
bin/alluxio format
bin/alluxio-start.sh all

准备数据

为了进行比较,我们还使用CDH-5.8.0构建了一个4节点的Cloudera集群(m4.2xlarge),并将Alluxio放在具有相同架构的3个数据节点上。 我们在两个集群上运行一个独立的Spark shell,在node1上运行spark-master,在node [1-3]上运行3个工作线程,每个工作线程的内存均为10GB。 我们将使用来自Kaggle的点击率预测数据作为我们将要处理的样本数据。 样本数据的大小为5.9GB,包含超过4000万行。 要启动Spark shell,我们使用:

spark-shell --master spark://node1:7077 --executor-memory 2G --packages 	com.databricks:spark-csv_2.1:0:1.4.0

在Spark Shell中,我们从maprfs和hdfs的受尊重路径中加载csv:

val trainSchema = StructType(Array(
    StructField("id", StringType, false),
    StructField("click", IntegerType, true),
    StructField("hour", IntegerType, true),
    StructField("C1", IntegerType, true),
    StructField("banner_pos", IntegerType, true),
    StructField("site_id", StringType, true),
    StructField("site_domain", StringType, true),
    StructField("site_category", StringType, true),
    StructField("app_id", StringType, true),
    StructField("app_domain", StringType, true),
    StructField("app_category", StringType, true),
    StructField("device_id", StringType, 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值