hadoop程序中怎么快速调用数据库

[复制链接]
查看11 | 回复4 | 2021-1-27 06:11:03 | 显示全部楼层 |阅读模式
背景:
本人在做数据挖掘的程序中需要大量的全局变量(如某个词总共出现的词频),于是使用hbase作为存储全局变量。在hadoop程序的每个reducer部分都有访问数据库,查询全局变量。
问题:
在少量数据的时候程序运行的很快,但是数据量大的时候基本跑不动了。其中每个reducer只需要访问几个全局变量,不需要对全局变量进行修改,也就是只进行只读操作
想问一下给我高手都是怎么在hadoop程序中快速访问数据库的?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:11:03 | 显示全部楼层
全局变量可以放内存数据库里,效率肯定好于Hbase
回复

使用道具 举报

千问 | 2021-1-27 06:11:03 | 显示全部楼层
引用1楼zhoujiongfield的回复:全局变量可以放内存数据库里,效率肯定好于Hbase
数据量太大,没法直接放在内存中。而且全局数据都要经过事先的预处理,直接在内存中只有运行时从数据库中读入了。
回复

使用道具 举报

千问 | 2021-1-27 06:11:03 | 显示全部楼层
另外,如果直接运行数据库的话错误信息如下:
13/06/2713:18:20INFOmapred.JobClient:TaskId:attempt_201306271234_0004_m_042220_2,Status:FAILED
java.lang.RuntimeException:java.io.IOException:org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@5b7feb0bclosed
atorg.apache.hadoop.hbase.mapreduce.TableOutputFormat.setConf(TableOutputFormat.java:200)
atorg.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:62)
atorg.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117)
atorg.apache.hadoop.mapred.Task.initialize(Task.java:513)
atorg.apache.hadoop.mapred.MapTask.run(MapTask.java:353)
atorg.apache.hadoop.mapred.Child$4.run(Child.java:255)
atjava.security.AccessController.doPrivileged(NativeMethod)
atjavax.security.auth.Subject.doAs(Subject.java:415)
atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
atorg.apache.hadoop.mapred.Child.main(Child.java:249)
Causedby:java.io.IOException:org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation@5b7feb0bclosed
atorg.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:794)
atorg.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:782)
atorg.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:249)
atorg.apache.hadoop.hbase.client.HTable.(HTable.java:213)
atorg.apache.hadoop.hbase.client.HTable.(HTable.java:171)
atorg.apache.hadoop.hbase.mapreduce.TableOutputFormat.setConf(TableOutputFormat.java:195)
...9more
是不是配置的问题?
不使用hadoop程序的话直接调用数据库没有问题,运行hbaseshell也没有问题,但在hadoop中调用hbase或者使用TableReducer就会出错,是不是程序配置的问题?
回复

使用道具 举报

千问 | 2021-1-27 06:11:03 | 显示全部楼层
需要看你的代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行