spark的hive操作和常见的bug
参考官网:http://spark.apache.org/docs/latest/sql-data-sources-hive-tables.html
package hive import org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession object HiveDome { def fun1(): Unit = { val conf = new SparkConf().setAppName("hive1") val spark = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate() import spark.sql //创建件hive表 sql("create table if not exists user3(id int,value String) row format delimited fields terminated by ','") sql("load data local inpath '/user.log' into table user3") sql("select * from user").show() sql("select count(*) from user").show() val sqlDF = sql("select key,value from user where key<10 order BY key") import spark.implicits._ //隐式转化 val stringDS = sqlDF.map { case org.apache.spark.sql.Row(id: Int, value: String) => s"key:$id,value:$value" } stringDS.show() spark.stop() } def main(args: Array[String]): Unit = { fun1() } }
写完之后在idea 打成jar包,将jar包写到liunx下的根目录下
然后配置环境
1.把hive的配置 hive-site.xml 复制到 spark/conf cp /usr/hive/apache-hive-2.3.3-bin/conf/hive-site.xml /usr/spark/spark- 2.1.1-bin-hadoop2.7/conf/ 2.把mysql的驱动jar放入到 spark/spark-2.1.1-bin-hadoop2.7/jars/ mysql-connector-java-5.1.38.jar 3.修改spark-env.sh文件 export SPARK_CLASSPATH=$SPARK_CLASS:$SPARK_HOME/jars/mysql-connector-java-5.1.38.jar 4.在集群上执行 spark-submit --master spark://zhiyou01:7077 --class 类名的全称 --total-executor-cores 2 --executor-memory 512m /jar包路径
如果不配置环境会出现以下错误
Exception in thread "main" java.lang.UnsupportedOperationException: loadTable is not implemented
运行过程出现的bug:
1> Got exception: org.apache.hadoop.ipc.RemoteException Operation category READ is not supported in state standby
原因:我的机器是spark的MASTER是nameNode,另外一个work是nameNode, 但是运行执行 spark-submit提交的进程时,主机(master和nameNode的机器)的nameNode会挂掉,而且主机的nameNode一直都是备用状态,然后就回报这个错误, 主机的nameNode重新启动还是报这个错,最后将主从切换下
//将主机的nameNode切换成active 如果切换后再次执行还是报这个错,可以将第二个nameNode的进程给杀掉在启动执行
hdfs haadmin --transitionToActive nn1 //nn1是nameNode的名字
2>io错误,说是hdfs下的user.log文件不存在,意思就是在想hive中加载数据的时候,需要先将user.log数据加载到hdfs上,然后在穿件hive与数据创建关联;但是加载失败,因为说hdfs下找不见user.log文件,但是网页中又能查看的到一些文件的数据,说明hdfs处于一个安全的保护状态(就是集群在重启或是升级的时候会进入一个安全保护的状态,只能查看文件,但是不能对文件进行修改或添加文件的操作)
解决方法
//hadoop刚启动或是升级会进入安全模式,只能读文件,不能写文件
命令: hadoop dfsadmin -safemode get 查看安全模式状态
命令: hadoop dfsadmin -safemode enter 进入安全模式状态
命令: hadoop dfsadmin -safemode leave 离开安全模式
本文来自博客园踩坑狭,作者:韩若明瞳,转载请注明原文链接:https://www.cnblogs.com/han-guang-xue/p/10041150.html