将海量数据从MySQL数据库导入到Hbase

任务二:MySQL数据库导入到Hbase

1.背景:

将第一次试验中的mysql数据导入到hbase中,对比SQL语句与Hbase查询语句的区别,对比Phoenix组件和原生Hbase查询的时间性能。尝试编程实现对Hbase数据库的访问。

2. 自行安装Hbase/Phoenix环境

由于设备条件有限,没有实现真正的分布式,于是使用的伪分布式进行的实验。
① Hadoop的安装和配置:
在这里插入图片描述
图2.1 Hadoop安装成功图
在这里插入图片描述
图2.2 HDFS配置完成展示
在这里插入图片描述
图2.3 HDFS配置完成
②Hbase安装配置:
在这里插入图片描述
图2.4 Hbase配置和安装完成
③ 以为要用sqoop进行数据的导入,所以安装了一个独立的zookeeper,方便后面从mysql导入hbase数据库数据。

在这里插入图片描述
图2.5 服务的启动

3. 实现数据从MySQL数据库导入Hbase数据库

1.	bin/sqoop import --connect jdbc:mysql://192.168.1.108:3306/imooc --username root --password '' --table tdb_goods --hbase-table test_imooc --column-family info --hbase-row-key goods_id  
2.	  
3.	sqoop import --connect jdbc:mysql://192.168.1.103:3306/taxi --username root --password '' --table taxi_infor_little--hbase-table taxi --column-family info --hbase-row-key infor_id  

找了一个小的数据表时可以正常的导入:
在这里插入图片描述

图3.1 导入的数据
通过程序连接Hbase数据库:
Hbase提供直接的java连接接口,如果想用其他的语言,要使用thrift。
进行连接:

5.	import happybase  
6.	#连接  
7.	connection = happybase.Connection('localhost')  
8.	connection.open()  
9.	   
10.	# connection.create_table('mytable', {'name' : dict(max_versions=5), 'course':dict()})  
11.	#打印所有的表  
12.	print(connection.tables())  
13.	table = connection.table('Score')  
14.	row = table.row(b'95001')  
15.	print(row[b'course:Math'])  
16.	   
17.	#插入数据  
18.	table.put(b'95002', {b'course:Math':b'65', b'course:English':b'77'} 
19.	# 扫描表  
20.	for key, data in table.scan():  
21.	    print(key, data)  
22.	 table.delete(b'95002')  
23.	 #断开连接  
24.	 connection.close()  

4.遇到的问题:

遇到的问题可以说是千奇百怪,按照遇到问题的先后顺序进行一个说明:
问题一:hbase无法启动。
刚开始进行配置安装完hadoop的HDFS后,无法启动Hbase的web访问页面,于是到网上去查询各种资料。最后结合着hadoop官网的指导按装教程和网上找来的资料,将hadoop的yarn、MapReduce均进行了配置。还找到了zookeeper的官网,一边查看官网的指导说明一边看网上的博客教程,正常将Hbase的web访问页面启动了起来。

问题二:无法通过虚拟机下的Ubuntu来访问Windows下的MySQL服务。
查询后发现是应为没有关闭Windows的防火墙。添加访问规则后将电脑重启终于可以正常访问到了Windows的MySQL服务。

问题三:MapReduce停留在0%,%0的地方不动。
查询后是因为yarn的配置问题,因为虚拟机的内存和硬件不够,于是在yarn中进行了配置。

问题四:job被无情的给kill掉了,并抛出了143错误代码。
就在数据sqoop的导入命令后,发现虚拟机和真机之间的数据交换量非常的大:
在这里插入图片描述
图4.1 数据交换量

此时以为要成功了,但是最后被告知超时600S,进程被杀。于是尝试将之前导入MySQL中的小数据进行一下导入,很正常的就导入了进去。查到的解决办法是说要在修改MapReduce的默认超时时间,但是根据在配置文件中进行修改后并没有起作用,依然是相同的问题。于是在小数据的基础上进行了实验。进行了查询等相关操作。
后面有同学在分享时提供了解决办法:在配置文件中添加相应的配置信息
在这里插入图片描述

在这里插入图片描述
图4.2 Job的完成情况
在这里插入图片描述
图4.3 导入小数据后的耗时情况
可以看到最后的一个job是成功的导入的,在Hbase的shell下面也可以查询到相应的数据:
在这里插入图片描述
图4.4 导入的数据
可以观察到,关于row-key的排列并不是像MySQL中那样,从小到大进行排列。

总结:
这次从平台的搭建到数据的导入,再到数据的的查询,遇到了很多的问题,当觉解决完这些问题后,感觉最大的收获是锻炼了自己解决问题的能力和手段,以后解决问题要多去官网查看相应的用户手册,官网的资料是最全面,也是最原始的。确保了信息的真实性。对于数据库的发展和方向,以及hadoop生态有了一个更加充分的认知,对于生态中各个软件的定位有了一个大致的了解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值