在将数据集写入Hive时获取异常

时间:2017-01-02 06:41:07

标签: json hadoop apache-spark hive spark-streaming

我正在尝试使用Spark Java将DataSet写入Hive数据库,但在此过程中我遇到了异常。

这是我的代码:

tr

此处,String endpoint = "https://www.example.com/m/auth/" String username = "user123"; String password = "12345"; String credentials = username + ":" + password; final String basic = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); Request request = new Request.Builder() .url(endpoint) .header("Authorization", basic) .build(); OkHttpClient client = SomeUtilFactoryClass.buildOkhttpClient(); client.newCall(request).enqueue(new Callback() { ... 是流式json数据,我可以通过以下命令打印结果 Dataset<Row> data = spark.read().json(rdd).select("event.event_name"); data.write().mode("overwrite").saveAsTable("telecom.t2");

rdd

但是当我尝试将此结果写入Hive数据库时,我没有得到任何异常,但是当我尝试打印这些值时,我在data中得到了Exception。例如:

data.show();

例外是:

Hive command line

2 个答案:

答案 0 :(得分:1)

当您调用parquet.snappy时,Spark默认以saveAsTable格式保存数据,而且您似乎在hive库路径中没有snappy。更改编写器格式(例如更改为json)将不起作用,因为Hive期望使用此选项创建表中的序列文件。

但您可以在将数据保存为表格之前更改压缩算法:

spark.conf.set("spark.sql.parquet.compression.codec", "gzip")

默认情况下,应该在Hive上提供Gzip压缩,如果出现任何问题,您仍然可以在不压缩的情况下保存数据:

spark.conf.set("spark.sql.parquet.compression.codec", "uncompressed")

答案 1 :(得分:0)

此错误

  

org.xerial.snappy.SnappyError:[FAILED_TO_LOAD_NATIVE_LIBRARY] null

与snappy问题https://github.com/xerial/snappy-java/issues/6

有关

在本期的最后评论中,有一种解决方法:

unzip snappy-java-1.0.4.1.jar
cd org/xerial/snappy/native/Mac/x86_64/
cp libsnappyjava.jnilib libsnappyjava.dylib
cd ../../../../../..
cp snappy-java-1.0.4.1.jar snappy-java-1.0.4.1.jar.old
jar cf snappy-java-1.0.4.1.jar org