cdh6.2.1下hive on spark配置使用,hue使用,beeline使用,hive-jdbc使用及日志进度获取

CDH6.2.1 环境

1、开启hive on spark配置:

在hive配置中搜索 spark ,更改一下配置:

YARN 服务上的 Spark 选择spark

默认执行引擎 hive.execution.engine :spark

执行程序初始数 spark.dynamicAllocation.initialExecutors :2 ,启动sparksession时,默认初始启动的executor个数,如果配置了 set spark.executor.instances=3 (启动的executor个数),则启动sparksession时,为3个executor。

执行程序下限数 spark.dynamicAllocation.minExecutors :1 ,最少的executor个数,也就是当开启动态资源分配后,移除空闲的executor后,最少剩余1个executor存在。

执行程序上限数 spark.dynamicAllocation.maxExecutors :4 ,最多的executor个数,也就是启动sparksession时,最多扩展的executor个数。

各应用程序的 Spark 执行程序 spark.executor.instances :2 ,启动sparksession时,指定启动的executor个数。相当于初始化启动的executor个数,该值需介于minExecutors和maxExecutors之间。
在这里插入图片描述
在这里插入图片描述

2、hue中测试hive on spark

select * from a;
select count(*) from a;
create temporary function pinjie as 'com.topnet.MyUDF' using jar 'hdfs:///user/hive/udf/hiveUDF-1.0.jar';
select pinjie(name) from a;
drop function pinjie;

​ 由于 sql1执行不会在底层创建application,会直接返回数据,所以查询时间很快。

​ sql2 底层会创建app,向yarn申请资源,由于是初次创建sparksession,时间会比较久,当再次执行count查询时就会很快反回数据,是因为第一次创建完sparksession后,session不会关闭,会驻留在内存中,当再有执行计划来时,省去启动session的时间,直接执行sql语句。
在这里插入图片描述

sql3、sql4、sql5 为创建使用删除临时udf函数。

3、通过beeline连接hive

[root@hadoop163 ~]# beeline -u jdbc:hive2://hadoop162:10000 -n hive
0: jdbc:hive2://hadoop162:10000> select * from a;
+-------+---------+
| a.id  | a.name  |
+-------+---------+
| 1     | 小明      |
+-------+---------+
1 row selected (1.293 seconds)
0: jdbc:hive2://hadoop162:10000> select count(*) from a;
INFO  : Compiling command(queryId=hive_20210330102334_8c2258a0-2c5f-42ab-8d47-65f033967bc8): select count(*) from a
INFO  : Semantic Analysis Completed
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:_c0, type:bigint, comment:null)], properties:null)
INFO  : Completed compiling command(queryId=hive_20210330102334_8c2258a0-2c5f-42ab-8d47-65f033967bc8); Time taken: 0.101 seconds
INFO  : Executing command(queryId=hive_20210330102334_8c2258a0-2c5f-42ab-8d47-65f033967bc8): select count(*) from a
INFO  : Query ID = hive_20210330102334_8c2258a0-2c5f-42ab-8d47-65f033967bc8
INFO  : Total jobs = 1
INFO  : Launching Job 1 out of 1
INFO  : Starting task [Stage-1:MAPRED] in serial mode
INFO  : Running with YARN Application = application_1616659825062_0057
INFO  : Kill Command = /opt/cloudera/parcels/CDH-6.2.1-1.cdh6.2.1.p0.1425774/lib/hadoop/bin/yarn application -kill application_1616659825062_0057
INFO  : Hive on Spark Session Web UI URL: http://hadoop161:44976
INFO  : 
Query Hive on Spark job[0] stages: [0, 1]
INFO  : Spark job[0] status = RUNNING
INFO  : Job Progress Format
CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount
INFO  : 2021-03-30 10:24:38,990	Stage-0_0: 0(+1)/1	Stage-1_0: 0/1	
INFO  : 2021-03-30 10:24:42,005	Stage-0_0: 0(+1)/1	Stage-1_0: 0/1	
INFO  : 2021-03-30 10:24:43,010	Stage-0_0: 1/1 Finished	Stage-1_0: 0/1	
INFO  : 2021-03-30 10:24:44,013	Stage-0_0: 1/1 Finished	Stage-1_0: 1/1 Finished	
INFO  : Spark job[0] finished successfully in 9.09 second(s)
INFO  : Completed executing command(queryId=hive_20210330102334_8c2258a0-2c5f-42ab-8d47-65f033967bc8); Time taken: 69.551 seconds
INFO  : OK
+------+
| _c0  |
+------+
| 1    |
+------+
1 row selected (69.711 seconds)

查看yarn,可以看到启动的APP,其type为spark,可以看到使用的相关资源。
在这里插入图片描述
在这里插入图片描述

再次运行count语句,只使用了1s多,可以看到省去启动sparksession的时间。

0: jdbc:hive2://hadoop162:10000> select count(*) from a;
INFO  : Compiling command(queryId=hive_20210330102952_17ea110d-01c4-4bba-8378-3876fbcf1cb0): select count(*) from a
INFO  : Semantic Analysis Completed
INFO  : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:_c0, type:bigint, comment:null)], properties:null)
INFO  : Completed compiling command(queryId=hive_20210330102952_17ea110d-01c4-4bba-8378-3876fbcf1cb0); Time taken: 0.108 seconds
INFO  : Executing command(queryId=hive_20210330102952_17ea110d-01c4-4bba-8378-3876fbcf1cb0): select count(*) from a
INFO  : Query ID = hive_20210330102952_17ea110d-01c4-4bba-8378-3876fbcf1cb0
INFO  : Total jobs = 1
INFO  : Launching Job 1 out of 1
INFO  : Starting task [Stage-1:MAPRED] in serial mode
INFO  : 2021-03-30 10:29:54,097	Stage-2_0: 1/1 Finished	Stage-3_0: 1/1 Finished	
INFO  : Spark job[1] finished successfully in 1.00 second(s)
INFO  : Completed executing command(queryId=hive_20210330102952_17ea110d-01c4-4bba-8378-3876fbcf1cb0); Time taken: 1.109 seconds
INFO  : OK
+------+
| _c0  |
+------+
| 1    |
+------+
1 row selected (1.271 seconds)
0: jdbc:hive2://hadoop162:10000> 

4、通过java代码连接hive on spark,使用hive-jdbc

引入pom文件

<dependency>
   <groupId>org.apache.hive</groupId>
   <artifactId>hive-jdbc</artifactId>
   <version>2.1.1</version>
</dependency>
import java.sql.*;
import java.util.Scanner;

public class HiveJDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {
        String driverName = "org.apache.hive.jdbc.HiveDriver";
        String url = "jdbc:hive2://hadoop162:10000";
        String dbName = "default";
        Connection con = null;
        Statement state = null;
        ResultSet res = null;

        Class.forName(driverName);
        //这里必须指定用户名和密码,密码可以为空字符串,如果不指定则或报错启动sparksession失败
        con= DriverManager.getConnection(url+"/"+dbName,"hive","");
        state = con.createStatement();
        Scanner scan = new Scanner(System.in);
        String sql=null;
		//创建临时udf,可以不创建
        state.execute("create temporary function pinjie as 'com.topnet.MyUDF' using jar 'hdfs:///user/hive/udf/hiveUDF-1.0.jar'");
        while (true){
            System.out.println("亲输入sql:");
            if(scan.hasNext()){
                sql=scan.nextLine();
            }
            System.out.println(sql);
            res = state.executeQuery(sql);
            while (res.next()) {
                System.out.println(res.getString(1));
            }
            Thread.sleep(100);
        }
    }
}

在这里插入图片描述

5、运行sql的执行日志获取

使用hive-jdbc运行时,如果想获取sql的执行日志,则可以通过这几个方法获取运行的日志信息。List<String> getQueryLog()List<String> getQueryLog(boolean incremental, int fetchSize)boolean hasMoreLogs()三个方法,在进行hive的sql查询时,有时一个sql可能需要运行很长时间,借助这三个方法,还可以实时显示sql 的查询进度。

想要实时的显示sql查询进度,则需要再开启一个线程进行日志获取打印。

public class HiveJDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {
        Logger log = LoggerFactory.getLogger(HiveJDBC.class);
        String driverName = "org.apache.hive.jdbc.HiveDriver";
        String url = "jdbc:hive2://hadoop162:10000";
        String dbName = "default";
        Connection con = null;
        Statement state = null;
        ResultSet res = null;

        Class.forName(driverName);
        //这里必须指定用户名和密码,密码可以为空字符串,如果不指定则或报错启动sparksession失败
        con = DriverManager.getConnection(url + "/" + dbName, "hive", "");
        state = con.createStatement();
        Scanner scan = new Scanner(System.in);
        String sql = null;
        
        //开启线程获取sql执行日志
        Thread logThread = new Thread(new HiveLog((HiveStatement) state));
        logThread.setDaemon(true);
        logThread.start();

		//注册临时udf函数,可以不创建
        state.execute("create temporary function pinjie as 'com.topnet.MyUDF' using jar 'hdfs:///user/hive/udf/hiveUDF-1.0.jar'");
        while (true) {
            System.out.println("亲输入sql:");
            if (scan.hasNext()) {
                sql = scan.nextLine();
            }
            log.error("打印日志sql语句:" + sql);
            res = state.executeQuery(sql);
            while (res.next()) {
                System.out.println(res.getString(1));
            }
            Thread.sleep(100);
        }
    }

    static class HiveLog extends Thread {
        private final HiveStatement state;

        HiveLog(HiveStatement state) {
            this.state = state;
        }
        
        private void updateQueryLog() {
            try {
                List<String> queryLogs = state.getQueryLog();
                for (String log : queryLogs) {
                    System.out.println("进度信息-->" + log);
                }
            } catch (Exception e) {
            }
        }
        
        @Override
        public void run() {
            try {
                //循环不断的获取sql执行的日志
                while (true) {
                    if (state.hasMoreLogs()) {
                        updateQueryLog();
                    }
                    Thread.sleep(100);
                }
            } catch (InterruptedException e) {
                e.getStackTrace();
            }
        }
    }
}

查看sql运行日志信息
在这里插入图片描述
查看yarn管理界面:
在这里插入图片描述
查看sparkUI:
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CDH(Cloudera's Distribution for Hadoop)是Cloudera公司针对Hadoop生态系统进行的一系列软件包和工具的集成,其中包括Hive on Spark配置Hive是一个建立在Hadoop之上的数据仓库基础架构,它提供了类似于SQL的查询语言HiveQL,方便用户使用SQL语言对存储在Hadoop中的大型数据集进行查询和分析。Spark是一个快速、通用的数据处理引擎,具有内存计算的特性,能在内存中高效地处理大规模数据。 在CDH中配置Hive on Spark需要进行以下步骤: 1. 确保CDH集群已经正确安装和配置,并且已经启动了Hive服务和Spark服务。 2. 在CDH管理界面中,选择Hive服务,然后点击“配置”选项卡。 3. 在配置页面中,找到“Hive 服务”下的“Ancillary Service Configuration”部分。在“Spark”部分中,填写正确的Spark主节点地址和端口号。 4. 点击“保存并重启”以应用配置更改。 5. 在CDH管理界面中,选择Spark服务,然后点击“配置”选项卡。 6. 在配置页面中,找到“Spark 特定”的部分。在“Spark 实例模式”中选择“Standalone”,表示将使用独立的Spark集群。 7. 在“Spark 主节点地址”中填写正确的Spark主节点的地址。 8. 点击“保存并重启”以应用配置更改。 9. 配置完成后,可以使用HiveQL语句在Hive使用Spark进行查询和分析数据。在Hive命令行或Hue界面中,编写需要的查询语句并执行。 通过以上步骤,就可以在CDH上成功配置Hive on Spark。这样就可以同时利用HiveSpark的强大功能,实现对大规模数据的高效分析和处理。 ### 回答2: CDH配置Hive on Spark是指在CDH平台上配置使用Spark作为Hive的计算引擎。下面是具体的步骤: 1. 首先,确保已经在CDH平台上安装了HiveSpark组件。 2. 在Hive配置文件中,需要添加以下参数来启用Hive on Sparkhive.execution.engine = spark hive.spark.client.connect.timeout = 300s hive.spark.client.server.connect.timeout = 300s 3. 在Spark配置文件中,需要增加以下参数来支持Hive on Sparkspark.master = yarn-client spark.deploy.mode = client spark.submit.deployMode = client spark.yarn.queue = default spark.executor.instances = 10 spark.executor.memory = 4G spark.executor.cores = 2 spark.driver.memory = 4G 4. 然后,重启HiveSpark的服务。 5. 运行Hive脚本或者Hive命令时,可以在Hive使用"hive.execution.engine=spark"设置为Spark引擎,或者在命令行中使用"--engine=spark"参数。 配置完成后,Hive会将相应的作业提交给Spark来执行,利用Spark的分布式计算能力加速Hive查询的执行速度。需要注意的是,配置Hive on Spark需要确保CDH平台中的HiveSpark是兼容的,并且调整Spark的资源配置以满足计算需求。 总之,通过CDH配置Hive on Spark可以充分发挥Spark的并行处理能力,提高Hive查询的执行效率和性能。 ### 回答3: CDH是一种大数据解决方案,用于配置Hive on Spark的步骤如下: 1. 首先,确保已安装CDH集群并启动了HiveSpark组件。如果还没有安装,请按照CDH文档进行安装和配置。 2. 检查HiveSpark版本兼容性。Hive on Spark需要HiveSpark版本之间的兼容性,查看CDH文档以了解哪些版本适用于您的集群。 3. 在Hive配置文件中启用HiveSpark支持。打开Hive配置文件(hive-site.xml),设置hive.execution.engine为spark。 4. 配置Spark属性。在Spark配置文件(spark-defaults.conf)中,设置spark.master为yarn-client或yarn-cluster,这取决于您的CDH集群配置。还可以通过设置其他属性来优化Spark执行引擎的性能。 5. 启动Hive服务。重启Hive服务以使配置更改生效。您可以使用以下命令重新启动Hive服务: sudo service hive-server2 restart 6. 测试Hive on Spark使用Hive命令行或其他Hive客户端,运行一些Hive查询并确认它们是否在Spark上执行。 配置Hive on Spark可以提供更好的性能和资源利用率。而且,使用Spark作为执行引擎还可以充分利用Spark提供的丰富的数据处理功能和API。通过使用CDH的Hive on Spark配置,您可以更好地处理和分析大规模的数据集。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值