When writing simple compressed parquet from spark -on linux- you may get the following error. There are multiple solutions to the problem.
Caused by: java.lang.IllegalArgumentException: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: failed to map segment from shared object: Operation not permitted [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.liftedTree1$1(CompressionCodec.scala:171) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.org$apache$spark$io$SnappyCompressionCodec$$version$lzycompute(CompressionCodec.scala:168) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.org$apache$spark$io$SnappyCompressionCodec$$version(CompressionCodec.scala:168) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec.(CompressionCodec.scala:152) [org.apache.spark.launcher.OutputRedirector.redirect]
... 18 more [org.apache.spark.launcher.OutputRedirector.redirect]
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: failed to map segment from shared object: Operation not permitted [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader$NativeLibrary.load(Native Method) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.Runtime.load0(Runtime.java:795) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.System.load(System.java:1062) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:174) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.xerial.snappy.Snappy.(Snappy.java:47) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.liftedTree1$1(CompressionCodec.scala:169) [org.apache.spark.launcher.OutputRedirector.redirect]
...
The issue is with linking the snappy libraries. If you check the logs, you will find something like this
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: failed to map segment from shared object: Operation not permitted
The main issue here is execute permission on the /tmp folder which is not granted by default on linux. One solution is to remount the /tmp with execute permission.
Caused by: java.lang.IllegalArgumentException: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: failed to map segment from shared object: Operation not permitted [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.liftedTree1$1(CompressionCodec.scala:171) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.org$apache$spark$io$SnappyCompressionCodec$$version$lzycompute(CompressionCodec.scala:168) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec$.org$apache$spark$io$SnappyCompressionCodec$$version(CompressionCodec.scala:168) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.apache.spark.io.SnappyCompressionCodec.
... 18 more [org.apache.spark.launcher.OutputRedirector.redirect]
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: failed to map segment from shared object: Operation not permitted [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader$NativeLibrary.load(Native Method) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.Runtime.load0(Runtime.java:795) [org.apache.spark.launcher.OutputRedirector.redirect]
at java.lang.System.load(System.java:1062) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.xerial.snappy.SnappyLoader.loadNativeLibrary(SnappyLoader.java:174) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.xerial.snappy.SnappyLoader.load(SnappyLoader.java:152) [org.apache.spark.launcher.OutputRedirector.redirect]
at org.xerial.snappy.Snappy.
at org.apache.spark.io.SnappyCompressionCodec$.liftedTree1$1(CompressionCodec.scala:169) [org.apache.spark.launcher.OutputRedirector.redirect]
...
The issue is with linking the snappy libraries. If you check the logs, you will find something like this
Caused by: java.lang.UnsatisfiedLinkError: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: /tmp/snappy-1.1.2-1928b886-bc92-4a6a-959c-44fb3c2225fe-libsnappyjava.so: failed to map segment from shared object: Operation not permitted
The main issue here is execute permission on the /tmp folder which is not granted by default on linux. One solution is to remount the /tmp with execute permission.