zoukankan      html  css  js  c++  java
  • 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   离开安全模式
  • 相关阅读:
    linux-Windows文件上传Linux
    linux-ifconfig 查看没有IP
    springBoot 发布war/jar包到tomcat(idea)
    linux-常用命令
    (转)JVM各种内存溢出是否产生dump
    数据库缓存的几种方式
    使用jprofiler分析dump文件一个实例
    Hibernate之一级缓存和二级缓存
    最佳实践 缓存穿透,瞬间并发,缓存雪崩的解决方法
    缓存与数据库一致性之三:缓存穿透、缓存雪崩、key重建方案
  • 原文地址:https://www.cnblogs.com/han-guang-xue/p/10041150.html
Copyright © 2011-2022 走看看