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

Hadoop 如何在使用Google Cloud Dataproc启动的Spark集群中启用Snappy编解码器支持?,hadoop,apache-spark,google-cloud-platform,snappy,google-cloud-dataproc,Hadoop,Apache Spark,Google Cloud Platform,Snappy,Google Cloud Dataproc,尝试从使用启动的Spark群集读取Snappy压缩序列文件时,我收到以下警告: java.lang.RuntimeException: native snappy library not available: this version of libhadoop was built without snappy support. 在这种情况下,启用Snappy编解码器支持的最佳方法是什么?我自己没有这样做,但应该解决您的问题: 为了安装和配置其他系统级组件,bdutil支持扩展机制。扩展的一个很

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

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

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

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

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

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


不幸的是,Dataproc的启动映像是在没有Snappy支持的情况下构建的。我打开了一个bug,以便在下一张图片中修复它

解决办法:

  • 首先创建一个小的shell脚本,正确安装snappy及其本机库支持。为此,我们将使用bdutil使用的相同本机库。我调用了我的脚本
    setup snapy.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存储桶中。出于演示目的,假设bucket是
    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
    

  • 谢谢安格斯,我可以确认这对我们有效!顺便说一下,您的上一个命令有一个小的输入错误,它应该是
    gcloud beta dataproc clusters create--initialization actions gs://dataproc actions/setup-snappy.sh mycluster