精华内容
下载资源
问答
  • java调用hive需要的jar

    2017-03-17 16:44:01
    java调用hive需要的jar
  • 今天小编就为大家分享一篇shell中循环调用hive sql 脚本的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 利用crontab 调用hive

    千次阅读 2015-04-10 13:58:21
    利用crontab 调用hive时,一定要将hive 的环境路径写成全路径

    利用crontab 调用hive时,一定要将hive 的环境路径写成全路径

    展开全文
  • Java调用Hive的操作

    千次阅读 2016-05-16 11:08:40
    如何在Java中调用Hive的操作步骤如下: 1、启动Hive远程服务:  命令: hive --service hiveserver2 &  启动成功,命令框出现以下界面:   2、在Eclipse中创建Hadoop 项目,导入Hive的必须包  Hive的必须包如下...

         如何在Java中调用Hive的操作步骤如下:

    1、启动Hive远程服务:

          命令: hive --service hiveserver2  &

          启动成功,命令框出现以下界面:

         

    2、在Eclipse中创建Hadoop 项目,导入Hive的必须包

      Hive的必须包如下:

       hive-exec-2.0.0.jar

       hive-jdbc-2.0.0.jar

       hive-service-2.0.0.jar

       httpclient-4.4.jar

       httpcore-4.4.jar

    3、编写Java调用Hive的相关函数,代码如下:

    package com;

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.Statement;

    public class HiveTestCase {
    public static void query(Statement stmt) throws Exception {
    String querySQL = "select a.* from java_test a";
    ResultSet res = stmt.executeQuery(querySQL); // 执行查询语句
    while (res.next()) {
    System.out.print("id:" + res.getString("id") + " ");
    System.out.println("name:" + res.getString(2) + " ");
    }
    }

    public static void create(Statement stmt) throws Exception {
    String createSQL = "create table java_test (id string, name string) row format delimited fields terminated by '\t' ";
    boolean bool = stmt.execute(createSQL);
    System.out.println("创建表是否成功:" + bool);
    }


    public static void drop(Statement stmt) throws Exception {
    String dropSQL = "drop table java_test";
    boolean bool = stmt.execute(dropSQL);
    System.out.println("删除表是否成功:" + bool);
    }

    public static void load(Statement stmt) throws Exception {
    String loadSQL = "load data local inpath '/home/hadoop/test' into table java_test ";
    boolean bool = stmt.execute(loadSQL);
    System.out.println("导入数据是否成功:" + bool);
    }

    public static void main(String[] args) throws Exception {

    Class.forName("org.apache.hive.jdbc.HiveDriver");
    Connection con = DriverManager.getConnection(
    "jdbc:hive2://192.168.26.131:10000/test", "", "");
    Statement stmt = con.createStatement();

    drop(stmt); // 执行删除语句
    create(stmt); // 执行建表语句
    load(stmt); // 执行导入语句
    query(stmt); // 执行查询语句
    }
    }

    4、如果出现错误:User: hadoop is not allowed to impersonate 

    解决:在hive-site.xml文件中添加一下配置:

       <property>

          <name>hive.metastore.sasl.enabled</name>

          <value>false</value>

          <description>If true, the metastore Thrift interface will be secured with SASL.  

                       Clients must authenticate with Kerberos.</description>

       </property>

       <property>

           <name>hive.server2.enable.doAs</name>

           <value>false</value>

       </property>

       <property>

           <name>hive.server2.authentication</name>

           <value>NONE</value>

       </property>

       参考链接:

       http://stackoverflow.com/questions/36909002/authorizationexception-user-not-allowed-to-impersonate-user

    5、操作过程存在的疑问:

    执行以上HQL语句,都能在Hive中成功执行创建表、删除表、导入数据等,但是函数返回的布尔值为什么为 false 呢?

    解答:

    这个execute方法执行一个sql语句并且指向第一个返回值。
    返回值:true表示第一个返回值是一个ResultSet对象;false表示这是一个更新个数或者没有结果集。   

    展开全文
  • Java调用Hive-metastore接口

    千次阅读 2018-12-05 18:09:42
    Java调用Hive-metastore接口 需求:对hive的元数据进行查询,之前师姐的实现方法是通过对MySql的hive元数据数据库操作,进而实现查询。但是该方法太过于麻烦和复杂,在网上查询之后发现,hive提供Hive-metastore ...

    需求:对hive的元数据进行查询,之前师姐的实现方法是通过对MySql的hive元数据数据库操作,进而实现查询。但是该方法太过于麻烦和复杂,在网上查询之后发现,hive提供Hive-metastore service,能比较完美的解决这一需求。

    1. 为什么有Hive-metastore service

    ​ 许多第三方框架需要使用hive 的元数据如spark,所有hive需要开发Hive-metastore service的服务接口。

    同理Hive-metastore service提供了JAVA的jar,给java程序调用

    2. JAVA怎么用Hive-metastore

    ​ 去maven仓库搜索hive metastore,能找到对应的jar包。之间在maven项目中引入hive metastore的依赖。

    如下面所示:

    1. 依赖
    <!--hive-metastore-->
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-metastore</artifactId>
        <version>2.3.4</version>
    </dependency>
    
    1. java连接Hive-metastore service代码
    //HiveMetaStore的客户端
    private HiveMetaStoreClient hiveMetaStoreClient;
    
    /**
     * 功能描述:
     *          设置HiveJDBC的数据源
     */
    private void setHiveMetaStoreConf(DbInform dbInform) {
        HiveConf hiveConf = new HiveConf();
        hiveConf.set("hive.metastore.uris",dbInform.getDbMetastoreUrl());
        try {
            //设置hiveMetaStore服务的地址
            this.hiveMetaStoreClient = new HiveMetaStoreClient(hiveConf);
            //当前版本2.3.4与集群3.0版本不兼容,加入此设置
          this.hiveMetaStoreClient.setMetaConf("hive.metastore.client.capability.check","false");
        } catch (MetaException e) {
            e.printStackTrace();
        } catch (TException e) {
            e.printStackTrace();
        }
    }
    

    注意

    1. hiveConf.set("hive.metastore.uris",dbInform.getDbMetastoreUrl());

      1. 其中hiveConf的配置对象也可以通过配置文件读取配置。

        例如,hive-site.xml中的配置如下

        <configuration>
            <property>
                <name>hive.metastore.uris</name>     
                <value>thrift://110.131.23.14:9083</value>
            </property>
        </configuration>
        

        hiveConf中引入:

        hiveConf.addResource("hive-site.xml")

      2. “hive.metastore.uris”属性是设置Hive-metastore service的地址,地址格式如:thrift://110.131.23.14:9083(默认端口9083,必须是hive集群中Hive-metastore service所在的ip)。

    2. hiveMetaStoreClient.setMetaConf("hive.metastore.client.capability.check","false");

      由于我的集群上的hive是3.0版本,但是hive-jdbc的3.0jar包会与spring boot2.0出现包冲突,导致spring boot无法启动。所以无奈之下,hive-jdbc使用了2.3.4版本,因此HiveMetaStore的jar版本也必须使用2.x.x的版本,不然会出现找不到包的错误。而使用2.x.x的版本与集群3.0版本连接会提示客户端版本太低的错误,控制台提示配置hive.metastore.client.capability.check为fasle。特别提示:该配置写在配置文件中似乎没有作用。

    3. Hive-metastore的java接口

    // 由数据库的名称获取数据库的对象(一些基本信息)
    Database database= this.hiveMetaStoreClient.getDatabase(dbName);
    // 根据数据库名称获取所有的表名
    List<String> tablesList = this.hiveMetaStoreClient.getAllTables(dbName);
    // 由表名和数据库名称获取table对象(能获取列、表信息)
    Table table= this.hiveMetaStoreClient.getTable(dbName,tableName);
    // 获取所有的列对象
    List<FieldSchema> fieldSchemaList= table.getSd().getCols();
    // 关闭当前连接
    this.hiveMetaStoreClient.close();
    

    注意:使用完之后关闭连接this.hiveMetaStoreClient.close();

    展开全文
  • 之前文章写到用sparksql实现hive表小文件合并,这里使用一下用shell调用hivesql来合并hive表文件,思路是一样的 #!/bin/bash source /etc/profile #################################################################...

    之前文章写到用sparksql实现hive表小文件合并,这里使用一下用shell调用hivesql来合并hive表文件,思路是一样的

    #!/bin/bash
    source /etc/profile
    ###################################################################################
    #purpose:hive 表批量合并小文件
    #author:
    #date:2018/08/11
    #date: 2019/03/08 由原来循环串行跑更新为通过并行掉函数,并行跑
    ###################################################################################
    runMerge()
    {
    tbs=$1
    pcdate=`date -d"1 day ago" +"%Y%m%d"`
    echo ">>>>>>>>>>$tbs 合并分区日期"\'$pcdate\'
    
    for tb in $tbs
    do
        tmp_tb=$tb'_tmp'
        #构建字段列表
        a1=`hive -e "desc $tb"`    
        echo $a1
        a=`hive -e "desc $tb"|awk 'NR==1,NR==$(NF-0){print $1}'`
        echo "$tb 字段列表:$a"
        b=`echo $a|sed 's/day # # day/ /g'`
        c1=`echo $b|sed 's/ /,/g'`
        c=`echo $c1|sed 's/timestamp/\`timestamp\`/g'`	
        for i in \'$pcdate\'
        do
    	echo "开始合并$tb....."
            echo "select $c from $tb where day = ${i}"
            hive -e "
            set hive.merge.mapfiles = true;
            set hive.merge.mapredfiles = true;
            set hive.merge.tezfiles=true;
            set hive.merge.size.per.task = 256000000;
            set hive.merge.smallfiles.avgsize=16000000 ;
            -- 将小文件数据先放入一个临时分区
            insert overwrite table $tb partition (day = '19700101')
            select $c from $tb where day = ${i};
            -- 将原来的小文件分区删掉
            alter table $tb drop if exists partition(day = ${i});
            -- 将临时分区,rename到正式大文件分区
            alter table $tb partition (day = '19700101') rename to partition(day = ${i});
            -- 将临时分区删掉
            alter table $tb drop if exists partition(day = '19700101');
            "
            if [ $? != 0 ];then
               currenttime=`date +'%Y-%m-%d-%H:%M:%S'`
    	   msg="[$currenttime]$tb小文件合并出问题"
               sh /opt/edw/bin/oozie-job-dingtalk-warn.sh $msg
    	   break
            fi
    	echo $tb"小文件合并完成..."
            #将表名替换成表路径
            tbfilepath=${tb//'.'/'.db/'}
            fileday=${i//"'"/""}
            #删除合并过程中产生中间文件夹
            hadoop fs -test -e /user/hive/warehouse/$tbfilepath/day=$fileday/.hive-staging_hive_*
            if [ $? == 0 ] 
    	  then  hadoop fs -rm -r /user/hive/warehouse/$tbfilepath/day=$fileday/.hive-staging_hive_*
       	fi
       done
    done
    }
    #并行跑
    starttime=`date +'%Y-%m-%d %H:%M:%S'`
    runMerge 'databasename1.tablename1' &
    runMerge 'databasename2.tablename2' &
    runMerge 'databasename3.tablename3' 
    wait
    endtime=`date +'%Y-%m-%d %H:%M:%S'`
    
    start_seconds=$(date --date="$starttime" +%s)
    end_seconds=$(date --date="$endtime" +%s)
    echo "$starttime $endtime $sqlscript本次运行时间: "$((end_seconds-start_seconds))"s"
    
    
    
    展开全文
  • hive变量调用 hive和shell hdfs命令交互调用 hiverc预定义初始化       1 hive使用外部变量: 分为4种情况,   hive中引用外部变量: 在代码中引用时使用${...}; 方式1: [root@h2single bin...
  • Oozie调用hive案例——Oozie4.3.1 oozie调用hive准备三个文件 job.properties、script.q、workflow.xml 1.job.properties # 当你配置了dfs高可用,fs.defaultFS参数对应的名字, # 否者写hdfs://deptest1:8020或者...
  • shell中循环调用hive sql 脚本的方法脚本tt.sh的内容如下:#!/bin/bashparams=$1for param in $paramsdoecho $paramdone运行方式为:sh tt.sh "1 2 3 4 5"输出为:12345所以参考上面的命令,可以把hql的脚本写为如下...
  • shell调用hive及执行HQL

    千次阅读 2014-04-04 16:43:18
    脚本是通过shell调用hive及执行HQL hive &lt;&lt;EOFselect * from smit_opentime limit 10;exit;EOF
  • 各位大佬,咨询个问题。 通过java调用hive的api往HDFS写入数据的话,如何按照ORCfile的格式写入的?
  • 使用python调用hive的hql及执行Linux命令 直接上代码 #!/usr/bin/env python # -*- coding: utf-8 -*- import os import sys import subprocess from Calendar import * import time class HiveTask: def __init__...
  • 执行HiveSQL有两种方式,一种是HiveServer1,另一种是HiveServer2的JDBC方式,两种各有优劣:beeline -u jdbc:hive2://192.168.0.131:10001 -n hive -p hive -f "$scriptPath"hive -f "$scriptPath"$HIVE_HOME/bin/...
  • 先度娘了一下,发现互联网上对于Shell调用Hive传参、回传,处理数据的综合脚本案例基本没有,现写一个,给大家参考。 #!/usr/bin/env bash HIVE_HOME="C:/apache-hive-2.3.5-bin" #项目是离线数据处理,...
  • Spark-Sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive
  • java程序调用hive查询的一个异常

    千次阅读 2016-08-24 14:39:23
    最近在java程序中调用hive做查询时,碰到一个异常,被困扰了许久,经过几番调试,逐步把问题定位清楚。 在异常描述前先给出异常信息:java.sql.SQLException: Error while processing statement: FAILED: Execution...
  • 1、安装hive  在安装hive前,请确保已经安装好了hadoop,如未安装,请参考centoos 安装hadoop集群进行安装;  1.1、下载,解压  下载hive2.1.1:...
  • 通过Crontab实现自动调用HIVE语句对ElasticSearch的索引进行读写操作
  • 使用presto调用hive

    千次阅读 2017-03-28 14:48:18
    启动hive metastore服务 hive --service hivestore & 关于最后的一个&,告诉小白一下是后台运行的意思 presto配置使用hive插件 presto所在的文件中etc(自建)的catalog(自建)中hive.properties(自建文件)中...
  • java调用hive

    千次阅读 2017-06-22 14:49:42
    1 pom.xml  dependency>  groupId>org.apache.hadoopgroupId>  artifactId>hadoop-commonartifactId>  version>2.7.2version>  
  • nohup启动java进程调用shell执行hive客户端命令导致nohup进程stopped,java进程消失了。 环境变量增加如下之后解决。 export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline....
  • java调用hive api

    2016-03-24 10:52:32
    基于hadoop的Hive数据仓库JavaAPI简单调用的实例,关于Hive的简介在此不赘述。hive提供了三种用户接口:CLI,JDBC/ODBC和 WebUI CLI,即Shell命令行JDBC/ODBC 是 Hive 的Java,与使用传统数据库JDBC的方式类似Web...
  • 使用Java通过jdbc调用Hive,执行hive sql时出现如下异常: Caused by: org.iq80.leveldb.DBException: java.sql.SQLException: The query did not generate a result set! at ...
  • Spark 调用 hive使用动态分区插入数据

    万次阅读 2019-07-24 17:11:39
    spark 调用sql插入hive 失败 ,执行语句如下 spark.sql("INSERT INTO default.test_table_partition partition(province,city) SELECT xxx,xxx md5(province),md5(city) FROM test_table") 报错如下,需动态插入...
  • 使用java通过jdbc调用hive,执行hive sql时出现如下异常: Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun....
  • Java 调用Hive 自定义UDF

    2017-08-18 00:12:05
    Hive 具有一个可选的组件叫做HiveServer,它允许通过在一定的端口访问hive. 将自定义的UDF的jar拷贝到安装的hive服务器中(如 /home/Hadoop下) 具体的不啰嗦了,看代码吧! package com.hive.client; impor
  • 背景很多时候,我们在编写好Spark应用程序之后,想要读取Hive表测试一下,但又不想操作 (打jar包——>上传集群——>spark-submit) 这些步骤时,那我们就可以在本地直连Hive,直接运行你的Spark应用程序中的...
  • 来源于.../bin/sh#参数传递source /etc/profile;source ~/.bash_profile;BASEDIR=`dirname $0`cd $BASEDIR#classpath优先当前目录CLASSPATH=$BASEDIR#classpath其次是con...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,174
精华内容 469
关键字:

调用hive