CDH集群hive使用以及性能测试

1.CDH集群里面的Hive角色分配及作用


如图所示,Hive主要有三个角色:HiveServer2、Metastore Server、以及代理角色Gateway
主要两个服务端守护进程:
1、Hiveserver2:支撑JDBC访问,Thrift服务,部署在masternode3节点。
2、MetaStore Server:支撑访问元数据库的服务,部署在toolnode1节点。

2.Hive内核结构

Complier:编译器,编译hql语法。
Optimizer:优化hql代码,产生最优执行计划。通过explain select …查看执行计划。
Executor:执行最终转化的类(MRjob)。

3. Hive用户接口

用户接口主要有三个:CLI, JDBC/ODBC和WebGUI。

1、CLI,即hive shell命令行,Command line。
2、JDBC/ODBC是Hive的JAVA,与使用传统数据库JDBC的方式类似。
3、WebGUI是通过浏览器访问Hive,废弃功能。

4.添加数据到hive

下面测试一下从MySql导入一张千万数据量的测试表进入hive
下面是导入命令行:

sqoop import --connect jdbc:mysql://192.168.20.160:3306/test --username root --password 111111 --table card --fields-terminated-by '/t' --delete-target-dir --num-mappers 1 --hive-import --hive-database default --hive-table test

登陆hue,查看是否导入test表

SELECT count(*)
FROM test

查询结果一千万条

5.JAVA调用Hive

  1. 添加依赖
    新建一个spring boot项目,添加pom相关依赖(1.1.0版本hiveJDBC jar包)
    代码如下:
<!-- hive jdbc-->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>1.1.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.eclipse.jetty.aggregate</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
  1. 查询代码示例
ackage com.sanshi.hivetest;

import com.sanshi.hivetest.entity.Employee;
import com.sanshi.hivetest.util.HiveUtil;
import org.springframework.beans.factory.annotation.Autowired;

import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by lirui on 2019/3/29
 */
public class hivetest {
    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    private static String url = "jdbc:hive2://192.168.20.164:10000/default";
    private static String user = "hive";
    private static String password = "hive";

    private static Connection conn = null;
    private static Statement stmt = null;
    private static ResultSet rs = null;



    @Autowired
    Employee employee;

    public static void main(String[] args) throws InvocationTargetException, IntrospectionException, InstantiationException, IllegalAccessException {
        List<Map> result = new ArrayList<>();
        PreparedStatement pstmt = null;
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            System.out.println(e.toString());
        }

        try {
            conn = DriverManager.getConnection(url,user,password);
            stmt = conn.createStatement();
            String sql = "select * from customers where id ='17254' ";
            ResultSet res = stmt.executeQuery(sql);

            System.out.println("id" + "/t" + "姓名" + "/t" + "email" + "/t" + "地址" + "/t" + "其他" );
            while (res.next()) {
                System.out.println(res.getString("id") + "/t/t" + res.getString("name") + "/t/t" + res.getString("email_preferences") + "/t/t" + res.getString("addresses") + "/t/t" + res.getString("orders") );
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }
}
  1. 输出结果
{"email_format":"text","frequency":"daily","categories":{"promos":true,"surveys":true}}		{"shipping":{"street_1":"158 Jadewood Drive","street_2":"Apt 2","city":"Gary","state":"IN","zip_code":"46403"},"billing":{"street_1":"4169 Oakwood Lane","street_2":"","city":"Gary","state":"IN","zip_code":"46403"}}		[{"order_id":"I72T39","order_date":"2015-03-14T11:00:00-05:00","items":[{"product_id":4112183,"sku":"T513-091-2","name":"Tea for One","price":18.0,"qty":1}]}]

如上所示,这是一个简单的查询Sql,Java调用跟关系型数据库一样JDBC调用

6.性能测试

众所周知,hive的查询延迟是很高的,由于没有索引,需要扫描整张表,另一个原因是MapReduce计算框架,由于MapReduce本身具有很高的延迟,因此在利用MapReduce执行查询时,也会有很高的延迟,因此,我们决定使用Spark on Hive提升hive性能
测试表:customers

测试Sql:

select * from customers where id ='54362'


MapReduce测试时间:18 s
Hive on Spark第一次查询时间:1 min 13 s
因为第一次启动要开启各主机spark计算进程,所以比较耗时
Hive on Spark第二次查询时间:4 s
通过测试发现Hive on Spark对hive性能有明显提升,这还是运行在只有三个计算节点,每个计算节点只有4G内存的集群,在更高配置的集群里,Hive on Spark对hive的提升性能更加巨大。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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。这样就可以同时利用Hive和Spark的强大功能,实现对大规模数据的高效分析和处理。 ### 回答2: CDH配置Hive on Spark是指在CDH平台上配置使用Spark作为Hive的计算引擎。下面是具体的步骤: 1. 首先,确保已经在CDH平台上安装了Hive和Spark组件。 2. 在Hive的配置文件中,需要添加以下参数来启用Hive on Spark: hive.execution.engine = spark hive.spark.client.connect.timeout = 300s hive.spark.client.server.connect.timeout = 300s 3. 在Spark的配置文件中,需要增加以下参数来支持Hive on Spark: spark.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. 然后,重启Hive和Spark的服务。 5. 运行Hive脚本或者Hive命令时,可以在Hive使用"hive.execution.engine=spark"设置为Spark引擎,或者在命令行中使用"--engine=spark"参数。 配置完成后,Hive会将相应的作业提交给Spark来执行,利用Spark的分布式计算能力加速Hive查询的执行速度。需要注意的是,配置Hive on Spark需要确保CDH平台中的Hive和Spark是兼容的,并且调整Spark的资源配置以满足计算需求。 总之,通过CDH配置Hive on Spark可以充分发挥Spark的并行处理能力,提高Hive查询的执行效率和性能。 ### 回答3: CDH是一种大数据解决方案,用于配置Hive on Spark的步骤如下: 1. 首先,确保已安装CDH集群并启动了Hive和Spark组件。如果还没有安装,请按照CDH文档进行安装和配置。 2. 检查Hive和Spark的版本兼容性。Hive on Spark需要Hive和Spark版本之间的兼容性,查看CDH文档以了解哪些版本适用于您的集群。 3. 在Hive配置文件中启用Hive的Spark支持。打开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。通过使用CDHHive on Spark配置,您可以更好地处理和分析大规模的数据集。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值