如何在使用Google Cloud Dataproc启动的Spark群集中启用Snappy编解码器支持?

时间:2015-09-28 22:58:49

标签: hadoop apache-spark google-cloud-platform snappy 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编解码器支持的最佳方法是什么?

2 个答案:

答案 0 :(得分:5)

不幸的是,Dataproc的发布图像是在没有Snappy支持的情况下构建的。我已经打开了一个错误,为下一张图片修复了这个问题。

解决方法:

  1. 首先创建一个小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/
    
  2. 将新shell脚本复制到您拥有的GCS存储桶。出于演示目的,我们假设存储桶为dataproc-actions

    gsutil cp ./setup-snappy.sh gs://dataproc-actions/setup-snappy.sh
    
  3. 启动集群时,请指定初始化操作:

    gcloud beta dataproc clusters create --initialization-actions gs://dataproc-actions/setup-snappy.sh mycluster
    

答案 1 :(得分:0)

我自己没有这样做,但this post应该解决你的问题:

  

为了安装和配置其他系统级组件,bdutil支持扩展机制。扩展的一个很好的例子是与bdutil捆绑的Spark扩展:extensions / spark / spark_env.sh。当运行bdutil扩展时添加了-e标志,例如,使用Hadoop部署Spark:

     

./ bdutil -e extensions / spark / spark_env.sh deploy