【impala数据源】Java连impala数据源问题:1、Memory limit exceeded;2、Auth Mech was set to default:NOAUTH

           需求场景:为让数据可视化,在smartBI(报表工具)开发后通过可视化子系统(后称‘A’项目),连接smartBI获取数据,通过A项目呈现到前台。A项目上线后,因为数据并发量较大,A项目没有问题,但是频繁的连接和查询导致smartBI挂掉,smartBI除了A系统在用外,其他报表系统也在使用。为不影响smartBI的正常功能,重开新项目B,直连A系统所用到的数据源,代替smartBi的功能,B系统需要连三个数据MySql、Orcale、Impala。这里主要分析一下我在连impala数据源后,压测时遇到的数据源连接的问题。

            压测问题分析(单接口压测):

        10并发下 成功率100% 响应时间1.6秒 90%响应时间1.9秒
        30并发下 成功率98% 平均每2分半会出现一次内存不够的问题  响应时间4.6秒 90响应时间5.9秒
        50并发下 c3p0 最大连接池30,成功率95%,响应时间8.1,90响应时间15.5秒,主要问题是SQL连接失败
        50并发下 c3p0 最大连接池50,成功率60%,SQL连接失败问题解决,但是更大的压力在Impala 都是内存问题。
        其他发现的问题:Auth Mech was set to default:NOAUTH

            问题重现:(1)impala数据库内部内存设定不够(错误信息:Memory limit exceeded)

                             (2)B项目连接impala用c3p0做连接池管理(报警告:Auth Mech was set to default:NOAUTH)

1、impala数据库内部内存设定不够(错误信息:Memory limit exceeded),我们的设定为900多KB,问题报错问题截图如下:

出错原因:查询消耗内存超出设定范围,导致请求无法继续访问数据库。

解决方法:修改impala中的内存限制,将其取消(改为-1)或者增加,如图:

               

 

2、频繁报Auth Mech was set to default:NOAUTH警告,错误截图如下:

    

 

原c3p0连接配置如下:

<bean id="impaldataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">

<property name="jdbcUrl" value="${jdbc.impalurl}" />
<property name="user" value="${jdbc.impalusername}" />
<property name="password" value="${jdbc.impalpassword}" />
<property name="driverClass" value="${jdbc.impalDriverClass}" />
<property name="minPoolSize" value="10" />
<property name="initialPoolSize" value="10" />
<property name="maxPoolSize" value="50" />
<property name="idleConnectionTestPeriod" value="600" />
<property name="checkoutTimeout" value="30000" />
<property name="maxIdleTime" value="600" />
<!– #acquireIncrement:连接池在无空闲连接可用时一次性创建的新数据库连接数,default : 3 –><property name="acquireIncrement" value="5" />
<!– #重连相关配置 #acquireRetryAttempts:连接池在获得新连接失败时重试的次数,如果小于等于0则无限重试直至连接获得成功。default : 30(建议使用) –>
<property name="acquireRetryAttempts" value="5" />
<!– #acquireRetryDelay:两次连接中间隔时间,单位毫秒,连接池在获得新连接时的间隔时间。default : 1000 单位ms(建议使用) –>
<property name="acquireRetryDelay" value="1000" />
<!– #c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能 通过多线程实现多个操作同时被执行。Default: 3 –>
<property name="numHelperThreads" value="10" />

</bean>

错误原因:imapla官方给出的连接管理驱动为:com.cloudera.impala.jdbc4.DataSource。

解决方法:修改imapla的连接驱动,即将c3p0的连接池管理换成如下的配置配置:

<bean id="impaldataSource" class="com.cloudera.impala.jdbc4.DataSource">
		<property name="loginTimeout" value="30000"/>
		<property name="URL" value="jdbc:impala://……"/>
		<property name="userID" value=""/>
		<property name="password" value=""/>
</bean>

        改为完再进行压测就不会出现上面的两种情况了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值