概述
配置注意点:
1.拷贝mysql-connector-java-5.1.38-bin.jar等相关的jar包到你
s
p
a
r
k
h
o
m
e
/
l
i
b
中
(
s
p
a
r
k
2.0
之
后
是
{spark_home}/lib中(spark2.0之后是
sparkhome/lib中(spark2.0之后是{spark_home}/jars下),不清楚就全部拷贝过去
2.将Hive的配置文件hive-site.xml拷贝到${spark_home}/conf目录下
3.因为使用ThriftJDBC/ODBC Server访问spark SQL,所以要修改hive-site.xml文件
[root@hw1 hive110]# cd lib
[root@hw1 lib]# cp mysql-connector-java-5.1.38.jar /opt/soft/spark234/jars/
[root@hw1 lib]# cd ..
[root@hw1 hive110]# cd conf
[root@hw1 conf]# cp hive-site.xml /opt/soft/spark234/conf/
[root@hw1 soft]# cd spark234/conf/
[root@hw1 conf]# ls
docker.properties.template slaves
fairscheduler.xml.template slaves.template
hive-site.xml spark-defaults.conf.template
log4j.properties.template spark-env.sh
metrics.properties.template spark-env.sh.template
[root@hw1 conf]# vi hive-site.xml
<property>
<name>hive.metastore.uris</name>
<value>thrift://hw1:9083</value>
</property>
4.启动hivede metastroe后台进程。执行 h i v e h o m e / b i n / h i v e − − s e r v i c e m e t a s t o r e 启 动 h i v e 的 s e r v i c e m e t a s t o r e 后 台 进 程 。 5. 启 动 s p a r k − s h e l l 访 问 h i v e 上 数 据 。 在 {hive_home}/bin/hive --service metastore启动hive的service metastore后台进程。 5.启动spark-shell访问hive上数据。在 hivehome/bin/hive−−servicemetastore启动hive的servicemetastore后台进程。5.启动spark−shell访问hive上数据。在{spark_home}/bin下执行./spark-shell --master spark://master:7077 (可添加其他参数rg:–jars等参数)
hive --service metastore
[root@hw1 bin]# cd /opt/soft/spark234/bin/
[root@hw1 bin]# ./spark-shell
//自行创建的 spark 不带hive支持 连接需要停止新建sparkSession
scala> spark.stop
scala> import org.apache.spark.sql.SparkSession
scala> val spark = SparkSession.builder().appName("spark-hive").enableHiveSupport.getOrCreate
scala> spark.sql("select * from student.stu_details").show
数据读取插入
将数据保存到指定路径,可通过format来指定要保存的文件格式,repartition设置输出文件个数
scala> val spk = spark.sql("select * from student.stu_details")
spk: org.apache.spark.sql.DataFrame = [stu_id: string, stu_name: string ... 2 more fields]
scala> spk.repartition
repartition repartitionByRange
scala> spk.repartition(1).write.format("csv").save("hdfs://192.168.56.122:9000/20200109")
// 保存成表
scala> spk.filter($"stu_name".startsWith("赵雷")).show
+------+--------+----------+--------+
|stu_id|stu_name| stu_date|stu_male|
+------+--------+----------+--------+
| 01| 赵雷|1990-01-01| 男|
+------+--------+----------+--------+
scala> spk.write.saveAsTable("xx")
scala> spark.sql("insert into xx values('09','guy','1990-01-01','男')")
res19: org.apache.spark.sql.DataFrame = []
出现的错误总结(解决方法仅供参考):
1.error: Error creating transactional connection factory
解决方法:在hive和spark集群都能正常使用情况下,检查一下hive的service metastore后台进程是否已经启动了
2.Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
解决方法:有可能是hive连接数据库部分出现了问题,在hive-site.xml文件中添加hive.metastore.uristhrift://hadoop1:9083,如果配置后执行出现了新的错误:ERROR ObjectStore: Version information not found in metastore,这个新错误可能使用hive的jar包和存储元数据信息版本不一致而抛出的异常,可以在hive-site.xml文件中添加参数跳过版本的问题,hive.metastore.schema.verificationfalse,重启hive服务,如果还是继续报ERROR ObjectStore: Version information not found in metastore这个错误,说明刚刚配置的参数没有生效,接着要把hdfs-site.xml文件拷贝到${spark_home}/conf文件下,这可能是因为环境变量的问题引起的
3.java.io.IOException: java.lang.reflect.InvocationTargetException
解决方法:由于缺少htrace-core-3.1.0-incubating.jar包,引入该包即可。
4.java.lang.ClassNotFoundException Class org.apache.hadoop.hive.hbase.HBaseSerDe not found
解决方法:由于缺少相关的hbase的jar包(hbase-protocol-1.1.2.jar,hbase-client-1.1.2.jar,hbase-common-1.1.2.jar,hbase-server-1.1.2.jar等),可以在启动spark-shell通过–jars来添加。
5.java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/util/Bytes
解决方法:由于缺少guava-12.0.1.jar包,引入该包即可。
最后
以上就是阔达枕头为你收集整理的【Spark】Spark 访问连接 HIVE的全部内容,希望文章能够帮你解决【Spark】Spark 访问连接 HIVE所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复