我最近遇到了一个关于将数据从 Hive 迁移到 Hbase 的问题。 我们项目在 cdh5.5.1 集群上使用 Spark(7 个节点在 SUSE Linux Enterprise 上运行,具有 48 个内核,每个 256 GB RAM,hadoop 2.6)。作为初学者,我认为使用 Spark 从 Hive 加载表数据是个好主意。我正在使用正确的 Hive 列/Hbase ColumnFamily 和列映射在 HBase 中插入数据。
我找到了一些关于如何将数据批量插入 Hbase 的解决方案,例如我们可以使用 hbaseContext.bulkPut 或 rdd.saveAsHadoopDataset(我测试了两者的结果相似) .
结果是一个功能正常的程序,但工作真的太慢了(比如 10 分钟/GB,3GB 减慢到 1 小时),而且我的 regionServers 内存/堆大小使用太多(它们可能会崩溃,取决于我设置的配置)。
在一次又一次地修改regionServers和Hbase配置后,我尝试使用简单的Hive方式,即使用hbase存储处理程序创建一个外部表作为hbase的入口点,并加载
INSERT OVERWRITE TABLE entry_point
SELECT named_struct('rk_field1', rk_field1, 'rk_field2', rk_field2)
, field1
, field2
FROM hive_table
非常顺利,在 10 分钟内在 hbase 中插入了 22GB 的数据。 我的问题是,为什么那样会好很多?是配置问题吗?为什么它会成为 Spark 如此糟糕的用例?
编辑:即使使用最后一种技术,它仍然很慢(插入 150 GB 需要 2 小时)。我可以通过 cloudera 管理器看到的唯一问题是 GC 时间,平均为 8 秒,但有时会增加到 20 秒,具体取决于哪个区域服务器。
最佳答案
HBase数据加载慢的原因是因为put操作。 HBase 中的正常 put 操作包括,
如果您正在对 HBase 执行批量加载,那么您应该考虑通过 HfileFormat2 执行此操作,与常规 HBase put 相比它要快得多。
我们遇到了同样的情况,试图通过 put 将 2 TB 的数据加载到 HBase,加载数据大约需要 10 个小时,在配置和调整 HBase 之后,加载时间减少到 7-8 个小时。
然后我们决定加载为 HFileFormat,以实现此目的
关于hadoop - hive 到 Hbase : wrong use case for Spark?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37594261/
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
Region是HBase数据管理的基本单位,region有一点像关系型数据的分区。region中存储这用户的真实数据,而为了管理这些数据,HBase使用了RegionSever来管理region。Region的结构hbaseregion的大小设置默认情况下,每个Table起初只有一个Region,随着数据的不断写入,Region会自动进行拆分。刚拆分时,两个子Region都位于当前的RegionServer,但处于负载均衡的考虑,HMaster有可能会将某个Region转移给其他的RegionServer。RegionSplit时机:当1个region中的某个Store下所有StoreFile
目录:一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive常用DML操作七、查询结果插入到表八、更新和删除操作九、查询结果写出到文件系统十、HiveCLI和Beeline命令行的基本使用十一、Hive配置一、简介Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。特点:简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析;灵活性高,可以自定义用户函数(UDF)和
云计算实验中要求我们在Linux系统安装Hadoop,故来做一个简单的记录。· 注:我的操作系统环境是Ubuntu-20.04.3,安装的JDK版本为jdk1.8.0_301,安装的Hadoop版本为hadoop2.7.1。(不确定其他版本是否会出现版本兼容问题)Hadoop安装步骤如下: 一、更新apt和安装vim编辑器 二、配置本机无密码登录SSH 三、安装JAVA环境 四、下载安装Hadoop 五、伪分布式搭建一、更新apt和安装vim编辑器1、更新aptsudoapt-getupdate2、安装vim
存在哪些适用于Ruby的HBaseORM/适配器?哪些是最好的?为什么? 最佳答案 Rhino和Bigrecord似乎有几个月没有事件了。这是一个更活跃的hbaseRubyORM:https://github.com/CompanyBook/massive_record 关于ruby-用于Ruby的HBaseORM,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3645866/
一、设置免密登录1、系统偏好设置-----共享----勾选远程登录,所有用户2、打开终端,输入命令ssh-keygen-trsa,一直回车即可2.查看生成的公钥和私钥 cd~/.ssh ls会看到~/.ssh目录下有两个文件:①私钥:id_rsa②公钥:id_rsa.pub3.将公钥内容写入到~/.ssh/authorized_keys中 cat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys4.测试在terminal终端输入 sshlocalhost如果出现以下询问输入yes,不需要输入密码就能登录,说明配置成功Areyousureyouw
一、软件准备虚拟机(操作系统为Linux)中已有MySQL、已部署Hive。本地主机(操作系统为Windows)中下载navicat(我用的是navicatpremium15)。PS:其实用sqlyog也是可以连接虚拟机的Hive数据的。在决定用navicat还是sqlyog之前,可以思考这两个问题:①MySQL和hive的区别;②sqlyog和navicat的区别。对于第一个问题,我理解的最直接的区别是:MySQL的数据可以存储在本地,但是hive的数据一定是存储在分布式文件系统上的。尽管hive的操作数据的命令语法与MySQL非常接近,但hive不是MySQL。对于第二个问题,我理解的最直
目录一、权限控制初体验二、Ranger授权模型一、权限控制初体验A、查看默认的访问策略此时只有rangerlookup用户拥有对所有库、表和函数的访问权限,故理论上其余用户是不能访问任何Hive资源的。B、验证使用fancy用户尝试进行认证,认证成功后,使用beeline客户端连接Hiveserver2使用fancy用户认证,并按照提示输入密码[fancy@hadoop102~]$kinitfancy登录beeline客户端[fancy@hadoop102~]$beeline-u"jdbc:hive2://hadoop102:10000/;principal=hive/hadoop102@EX
目录一、get_json_object使用二、使用案例三、源码分析四、总结大家好,我是老六。在数据开发中,我们有大量解析json串的需求,我们选用的UDF函数无非就是:get_json_object和json_tuple。但是在使用get_json_object函数过程中,老六发现get_json_object无法解析key为中文的key:value对。带着这个问题,老六通过源码研究了get_json_object这个函数,探索其中奥秘。一、get_json_object使用语法:get_json_object(json_string,'$.key')说明:解析json的字符串json_str