Impala 操作/读写 Kudu,使用druid连接池

8 篇文章 1 订阅
2 篇文章 0 订阅

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


 

大数据组件使用 总文章



如果Maven下载ImpalaJDBC41不下来的话,可以到 http://repo.odysseusinc.com/artifactory/community-libs-release-local/com/cloudera/ImpalaJDBC41/2.6.3/ 下载

	    <!-- https://mvnrepository.com/artifact/com.cloudera/ImpalaJDBC41 -->
        <dependency>
            <groupId>com.cloudera</groupId>
            <artifactId>ImpalaJDBC41</artifactId>
            <version>2.6.3</version>
        </dependency>

第一种方式 

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Impala_jdbc {
    private static String DRIVER = "com.cloudera.impala.jdbc41.Driver";
    private static String URL = "jdbc:impala://IP:21050/数据库名";

    public static void main(String[] args)
    {
        Connection conn = null;
        ResultSet rs = null;
        PreparedStatement pst = null;


        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL);
            pst = conn.prepareStatement("select * from 数据库名.表名 limit 3");
            rs = pst.executeQuery();
            while (rs.next()) {
                //rs.get类型(字段列):字段列从1开始算起
                System.out.println(rs.getString(1) + "," + rs.getObject(2) + "," + rs.getObject(3));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                conn.close();
                pst.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

}

 


第二种方式:druid连接池方式

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.7</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.cloudera/ImpalaJDBC41 -->
        <dependency>
            <groupId>com.cloudera</groupId>
            <artifactId>ImpalaJDBC41</artifactId>
            <version>2.6.3</version>
        </dependency>

\src\main\resources\Impaladruid.properties

driverClassName=com.cloudera.impala.jdbc41.Driver
url=jdbc:impala://IP:21050/数据库名

initialSize=10
maxActive=100
maxWait=60000

timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class MysqlUtil
{
    private static DataSource dataSource; //Druid 连接池
    private static Connection conn; //数据库连接对象
    private static Logger logger = LogManager.getLogger(MysqlUtil.class);
    private static InputStream in = null;
    private final static MysqlUtil mysqlUtil = new MysqlUtil();
    static
    {
        //使用druid.properties属性文件的配置方式 设置参数,文件名称没有规定但是属性文件中的key要一定的
        // 从druid.properties属性文件中获取key参数对应的value配置信息
        Properties properties = new Properties();
        try
        {
            //resources目录下的配置文件实际都会被编译进到 \target\classes 目录下
            in = mysqlUtil.getClass().getResourceAsStream("/Impaladruid.properties");
            properties.load(in);
            in.close();
        }
        catch (IOException e)
        {
            logger.error("ERROR:",e);//错误异常完整写入日志文件
//            e.printStackTrace();//窗口也打印错误信息
        }
        // 创建 Druid 连接池
        try {
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (Exception e) {
            logger.error("ERROR:",e);//错误异常完整写入日志文件
//            e.printStackTrace();//窗口也打印错误信息
        }

        //从 连接池中获取一个 数据库连接对象
//        Connection  数据库连接对象conn  =  dataSource.getConnection();
        //调用数据库连接对象的close()方法,把连接对象归还给连接池,并不是关闭连接
//        conn.close();
    }

    //获得连接池
    public static DataSource getDataSource()
    {
        return dataSource;
    }

    //从 连接池中获取一个 数据库连接对象
    public static Connection getConnection()
    {
        //从 连接池中获取一个 数据库连接对象
        try {
//            System.out.println("从 连接池中获取一个 数据库连接对象");
            conn  =  dataSource.getConnection();
        } catch (Exception e) {
//            e.printStackTrace();//窗口也打印错误信息
            logger.error("ERROR:",e);//错误异常完整写入日志文件
        }
        return conn;
    }

    /*
        new QueryRunner(MysqlUtil.getDataSource())
                QueryRunner中传入连接池,交由QueryRunner自动操作连接池中的连接。提供了自定事务处理、自动释放资源等操作,无需再手动。
                所以无需手动调用conn.close(),交由QueryRunner自动管理。
    */
    //调用数据库连接对象的close()方法,把指定的连接对象归还给连接池,并不是关闭连接
    public static void connectionClose(Connection conn)
    {
        //调用数据库连接对象的close()方法,把连接对象归还给连接池,并不是关闭连接
        try {
            conn.close();
        } catch (SQLException e) {
//            e.printStackTrace();//窗口也打印错误信息
            logger.error("ERROR:",e);//错误异常完整写入日志文件
        }
    }

}

注意

1.druid连接池既可用于mysql,也可用于Impala 

2.QueryRunner queryRunner = new QueryRunner(MysqlUtil.getDataSource()) 
     new QueryRunner(DataSource dataSource):表示从连接池中取出一条Connection对象,并且交给连接池自动管理、自动close回收到连接池中
     因此 每次执行新的sql之前,都应该获取新的连接对象,即先执行 new QueryRunner(DataSource dataSource) 或 DataSource对象.getConnection() 获取连接对象,再使用新的连接对象执行新的sql

 

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import java.sql.*;
import java.util.List;

public class ImpalaTest
{

     public static void main(String[] args)
    {
        QueryRunner queryRunner = new QueryRunner(MysqlUtil.getDataSource());
        List<Object[]> arrayListResult = null;
        String sql =  "";
        try
        {
            arrayListResult = queryRunner.query(sql, new ArrayListHandler());
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
        for (Object[] o : arrayListResult1)
        {
            System.out.println(o[0].toString());
        }
    }
}

 

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
impala是一种高性能分析型数据库,它基于Hadoop生态系统,可以快速执行复杂的查询。它使用列式存储、编译器技术和并行查询执行来实现高性能。 druid是一个快速、实时的数据存储和分析引擎,它适用于大规模的实时数据处理和探索式分析。它支持实时数据摄取、查询和可视化,可用于数据仪表盘和实时报告等应用。 presto是一种开源的分布式SQL查询引擎,它可以快速查询多种数据源,包括Hadoop、MySQL等。它具有高度可伸缩性和灵活性,可用于快速进行复杂的数据分析和联机查询。 kylin是一种开源的分布式分析引擎,它可以快速处理大规模数据集。它支持多维分析和复杂的OLAP查询,并提供了数据立方体和预计算功能,用于加速查询速度。 clickhouse是一种列式数据库管理系统,专门用于高性能分析型应用。它支持实时查询和高并发访问,并具有低延迟和高容量的优势,适用于大规模的数据分析和数据仪表盘等应用。 greenplum是一种高性能的并行关系数据库管理系统,适用于大规模数据仓库和分析型应用。它具有高度可伸缩性、并行查询和优化的特性,用于高速查询和处理大规模数据。 总的来说,这些数据库和查询引擎都旨在提供高性能和灵活性,以满足大规模数据分析和查询的需求,但它们在技术架构、数据存储方式和查询优化等方面存在一些差异。选择适合特定需求的数据库和查询引擎取决于实际情况和使用场景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值