【问题标题】:How do I enable Snappy codec support in a Spark cluster launched with Google Cloud Dataproc?如何在使用 Google Cloud Dataproc 启动的 Spark 集群中启用 Snappy 编解码器支持?
【发布时间】:2015-12-26 06:59:52
【问题描述】:

当尝试从使用 Google Cloud Dataproc 启动的 Spark 集群中读取 Snappy 压缩序列文件时,我收到以下警告:

java.lang.RuntimeException: native snappy library not available: this version of libhadoop was built without snappy support.

在这种情况下启用 Snappy 编解码器支持的最佳方法是什么?

【问题讨论】:

    标签: hadoop apache-spark google-cloud-platform snappy google-cloud-dataproc


    【解决方案1】:

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

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

    ./bdutil -e extensions/spark/spark_env.sh 部署

    【讨论】:

      【解决方案2】:

      很遗憾,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
        

      【讨论】:

      • 谢谢安格斯,我可以确认这对我们有用!顺便说一句,你的最后一个命令有一个小错字,应该是gcloud beta dataproc clusters create --initialization-actions gs://dataproc-actions/setup-snappy.sh mycluster
      猜你喜欢
      • 2020-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      相关资源
      最近更新 更多