当前位置:   article > 正文

杂记:hive报错以及spark中hive应用

杂记:hive报错以及spark中hive应用

转载内容,谢谢原创。杂记。

(1) Yarn Cluster: Spark Driver程序将作为一个ApplicationMasterYARN集群中先启动,然后再由ApplicationMasterRM申请资源启动 executor以运行Task。因为Driver程序在Yarn中运行,所以程序的运行结果不能在客户端显示,所以最好将结果保存在HDFS上,客户端的终端显示的是作为Yarnjob的运行情况。

(2) Yarn Client: Spark Driver程序在客户端上运行,然后向Yarn申请运行exeutor以运行Task,本地程序负责最后的结果汇总等。客户端的Driver将应用提交Yarn后,Yarn会先后启动ApplicationMasterexecutor,另外ApplicationMasterexecutor是装载在container里运行,container默认的内存是1GApplicationMaster分配的内存是driver- memoryexecutor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit的形式存在。

Hive Support

 这下面的才是高潮,它可以从hive里面取数据。但是hive的依赖太多了,默认Spark assembly是没带这些依赖的,需要我们运行SPARK_HIVE=true sbt/sbt assembly/assembly重新编译,或者用maven的时候添加-Phive参数,它会重新编译出来一个hive assemblyjar包,然后需要把这个jar包放到所有的节点上。另外还需要把hive-site.xml放到conf目录下。没进行hive部署的话,下面的例子也可以用LocalHiveContext来代替HiveContext。

val sc: SparkContext// 已经存在的SparkContext

val hiveContext =new org.apache.spark.sql.hive.HiveContext(sc)

 

//引入这个Context,然后就会给所有的sql语句进行隐式转换

import hiveContext._

 

hql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")

hql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")

 

//使用HiveQL查询

hql("FROM src SELECT key, value").collect().foreach(println)

这个功能看起来还挺像样,前面两个看起来就像渣一样,没劲儿,不知道为什么不自带那些依赖,还要我们再编译一下,但是我下的那个版本运行的时候提示我已经编译包括了hive

 

在安装过程中,第一次启动Hive没有成功,后来在网上查到原因如下,并成功解决:
错误如下:

  1. Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hive/conf/HiveConf   
  2.         at java.lang.Class.forName0(Native Method)   
  3.         at java.lang.Class.forName(Class.java:247)   
  4.         at org.apache.hadoop.util.RunJar.main(RunJar.java:149)   
  5. Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.conf.HiveConf   
  6.         at java.net.URLClassLoader$1.run(URLClassLoader.java:200)   
  7.         at java.security.AccessController.doPrivileged(Native Method)   
  8.         at java.net.URLClassLoader.findClass(URLClassLoader.java:188)   
  9.         at java.lang.ClassLoader.loadClass(ClassLoader.java:307)   
  10.         at java.lang.ClassLoader.loadClass(ClassLoader.java:252)   
  11.         at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)  

解决方法是,安装Hadoop时,修改Hadoop目录下/conf/hadoop-env.sh时,添加HADOOP_CLASSPATH变量覆盖了原有的变量,改成如下的形式即可:
HADOOP_CLASSPATH=$HADOOP_CLASSPATH:....
红色为添加部分。问题解决。

Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

原因:启动起来hive-metastore这个服务,然后可以show database以及show tables

mysql –u root –p登录下mysql

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号