spark-之客户端访问hive注意事项(元数据访问、压缩格式)
1 hive元数据服务配置与启动
- 像spark、presto这样需要查询hive中的表中的数据,必须配置hive元数据的thrift服务ip和端口,否则会启动报错。
<!--1、必须启动hive的元数据服务 vim hive-site.xml-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://shufang101:9083</value>
</property>
## 2、动hive元数据服务
nohup hive --service metastore 2>&1 & #后台启动
## 3、然后启动对应的访问客户端
bin/spark-shell --master ....
bin/spark-sql --master --files --jars ....
bin/presto --server ip:port --catalog hive --schema xxx
2 配置hive(hadoop)支持的压缩格式,如lzop
- 如果hadoop配置了lzop压缩,必须将lzo编译之后的jar包添加到spark的jars目录下,否则启动spark-sql或者sparj-shell之后查询会报错
Caused by: java.lang.IllegalArgumentException: Compression codec com.hadoop.compression.lzo.LzoCodec not found.
at org.apache.hadoop.io.compress.CompressionCodecFactory.getCodecClasses(CompressionCodecFactory.java:139)
at org.apache.hadoop.io.compress.CompressionCodecFactory.<init>(CompressionCodecFactory.java:180)
at org.apache.hadoop.mapred.TextInputFormat.configure(TextInputFormat.java:45)
... 97 more
Caused by: java.lang.ClassNotFoundException: Class com.hadoop.compression.lzo.LzoCodec not found
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:2101)
at org.apache.hadoop.io.compress.CompressionCodecFactory.getCodecClasses(CompressionCodecFactory.java:132)
... 99 more
下面有3种方式解决。
# 1、将lzop支持的jar包添加到SPARK_HOME/jars/目录下
[shufang@shufang101 spark-2.1.1-hdp2.7]$ mv /opt/module/hadoop-lzo-0.4.21-SNAPSHOT.jar ./jars/
# 2、启动客户端的时候通过 --jars 来指定需要的jar包,将其加载到执行环境
bin/spark-shell --master yarn --jars /opt/module/hadoop-lzo-0.4.21-SNAPSHOT.jar
# 3、通过--driver-class-path指定类路径jars目录或者位置
bin/spark-shell --master yarn --driver-class-path file:///opt/module/hadoop-lzo-0.4.21-SNAPSHOT.jar