加入收藏 | 设为首页 | 会员中心 | 我要投稿 济宁站长网 (https://www.0537zz.cn/)- 行业智能、边缘计算、专有云、AI硬件、5G!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Hive 如何快速拉取大批量数据

发布时间:2020-11-07 06:44:50 所属栏目:优化 来源:网络整理
导读:用hive来做数仓类操作,或者大数据的运算,是没有疑问的,至少在你没有更多选择之前。 当我们要hive来做类似于大批量数据的select时,也许问题就会发生了变化。 1. 通用解决方案之分页 首先,我们要基于一个事实,就是没有哪个数据库可以无限制的提供我们s

// 查看所有分片数据文件列表 hdfs dfs -ls hdfs://xx/hive/mydb.db/* // 下载所有数据文件到 /tmp/local_hdfs 目录 hdfs dfs -get hdfs://xx/hive/mydb.db/* /tmp/local_hdfs 

我们可以通过以上命令,将数据文件下载到本地,也可以hdfs的jar包,使用 hdfs-client 进行下载。优缺点是:使用cli的方式简单稳定但依赖于服务器环境,而使用jar包的方式则部署方便但需要自己写更多代码保证稳定性。各自选择即可。

最后,我们还剩下1个问题:如何处理临时表的问题?hive目前尚不支持设置表的生命周期(阿里云的maxcompute则只是一个 lifecycle 选项的问题),所以,需要自行清理文件。这个问题的实现方式很多,比如你可以自行记录这些临时表的创建时间、位置、过期时间,然后再每天运行脚本清理表即可。再简单点就是你可以直接通过表名进行清理,比如你以年月日作为命令开头,那么你可以根据这日期删除临时表即可。如:

-- 列举表名 show tables like 'dbname.tmp_20201101*'; -- 删除具体表名 drop table dbname.tmp_2020110100001 ;  

至此,我们的所有问题已解决。总结下:首先使用临时表并行地将结果写入;其次通过hdfs将文件快速下载到本地即可;最后需要定时清理临时表;这样,你就可以高效,无限制的为用户拉取大批量数据了。

不过需要注意的是,我们的步骤从1个步骤变成了3个步骤,增加了复杂度。(实际上你可能还会处理更多的问题,比如元数据信息的对应问题)复杂度增加的最大问题就在于,它会带来更多的问题,所以我们一定要善于处理好这些问题,否则将会带来一副作用。

 

(编辑:济宁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读