如何在使用 Google Cloud Dataproc 启动的 Spark 集群中启用 Snappy 编解码器支持?
How do I enable Snappy codec support in a Spark cluster launched with Google Cloud Dataproc?
当尝试从使用 Google Cloud Dataproc 启动的 Spark 集群读取 Snappy 压缩序列文件时,我收到以下警告:
java.lang.RuntimeException: native snappy library not available: this version of libhadoop was built without snappy support.
在此上下文中启用 Snappy 编解码器支持的最佳方法是什么?
我自己没有这样做,但 this post 应该可以解决您的问题:
For installing and configuring other system-level components bdutil supports an extension mechanism. A good example of extensions is the Spark extension bundled with bdutil: extensions/spark/spark_env.sh. When running bdutil extensions are added with the -e flag e.g., to deploy Spark with Hadoop:
./bdutil -e extensions/spark/spark_env.sh deploy
遗憾的是,Dataproc 的启动图像是在没有 Snappy 支持的情况下构建的。我已经打开了一个错误来为下一张图片修复这个问题。
解决方法:
首先创建一个小的 shell 脚本来正确安装 snappy 和本地库支持它。为此,我们将使用 bdutil 使用的相同本地库。我调用我的脚本 setup-snappy.sh
:
#!/bin/bash
pushd "$(mktemp -d)"
apt-get install -q -y libsnappy1
wget https://storage.googleapis.com/hadoop-native-dist/Hadoop_2.7.1-Linux-amd64-64.tar.gz
tar zxvf Hadoop_2.7.1-Linux-amd64-64.tar.gz -C /usr/lib/hadoop/
将新的 shell 脚本复制到您拥有的 GCS 存储桶中。出于演示目的,我们假设存储桶是 dataproc-actions
:
gsutil cp ./setup-snappy.sh gs://dataproc-actions/setup-snappy.sh
启动集群时,指定初始化动作:
gcloud beta dataproc clusters create --initialization-actions gs://dataproc-actions/setup-snappy.sh mycluster
当尝试从使用 Google Cloud Dataproc 启动的 Spark 集群读取 Snappy 压缩序列文件时,我收到以下警告:
java.lang.RuntimeException: native snappy library not available: this version of libhadoop was built without snappy support.
在此上下文中启用 Snappy 编解码器支持的最佳方法是什么?
我自己没有这样做,但 this post 应该可以解决您的问题:
For installing and configuring other system-level components bdutil supports an extension mechanism. A good example of extensions is the Spark extension bundled with bdutil: extensions/spark/spark_env.sh. When running bdutil extensions are added with the -e flag e.g., to deploy Spark with Hadoop:
./bdutil -e extensions/spark/spark_env.sh deploy
遗憾的是,Dataproc 的启动图像是在没有 Snappy 支持的情况下构建的。我已经打开了一个错误来为下一张图片修复这个问题。
解决方法:
首先创建一个小的 shell 脚本来正确安装 snappy 和本地库支持它。为此,我们将使用 bdutil 使用的相同本地库。我调用我的脚本
setup-snappy.sh
:#!/bin/bash pushd "$(mktemp -d)" apt-get install -q -y libsnappy1 wget https://storage.googleapis.com/hadoop-native-dist/Hadoop_2.7.1-Linux-amd64-64.tar.gz tar zxvf Hadoop_2.7.1-Linux-amd64-64.tar.gz -C /usr/lib/hadoop/
将新的 shell 脚本复制到您拥有的 GCS 存储桶中。出于演示目的,我们假设存储桶是
dataproc-actions
:gsutil cp ./setup-snappy.sh gs://dataproc-actions/setup-snappy.sh
启动集群时,指定初始化动作:
gcloud beta dataproc clusters create --initialization-actions gs://dataproc-actions/setup-snappy.sh mycluster