用kettle将mysql数据导入到hive中为啥执行效率很低
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用kettle将mysql数据导入到hive中为啥执行效率很低相关的知识,希望对你有一定的参考价值。
参考技术A 数据库机制不一样,整个库导入是不可能的。如果数据不多,你用 plsql developper 的tool->export tables 选择sql insert导出数据好了。这将生成一般的sql insert 语句。本回答被提问者采纳sqoop从mysql导入到hive为啥0变成null
1.链接mysql数据库的时候权限错误,这属于前期扫盲错误。Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.ConnectException
MESSAGE: Connection refused
解决方法:http://www.lishiyu.cn/post/56.html
2.表不存在----一般为分隔符的不匹配,我们需要在sqoop导入时指定分隔符
Status : FAILED
java.io.IOException: Can’t export data, please check task tracker logs
Caused by: java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:350)
at test.__loadFromFields(test.java:252)
at test.parse(test.java:201)
at org.apache.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:83)
导出数据到MySQL,当然数据库表要先存在,否则会报错,此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。hive默认的字段分隔符为'\001',sqoop的默认分隔符是 ','。 参考技术A hive 版本hive-0.11.0
sqoop 版本 sqoop-1.4.4.bin__hadoop-1.0.0
从hive导到mysql
mysql 表:
MySQL> desc cps_activation;
+————+————-+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+————+————-+——+—–+———+—————-+
| id | int(11) | NO | PRI | NULL | auto_increment |
| day | date | NO | MUL | NULL | |
| pkgname | varchar(50) | YES | | NULL | |
| cid | varchar(50) | YES | | NULL | |
| pid | varchar(50) | YES | | NULL | |
| activation | int(11) | YES | | NULL | |
+————+————-+——+—–+———+—————-+
6 rows in set (0.01 sec)
Hive表
hive> desc active;
OK
id int None
day string None
pkgname string None
cid string None
pid string None
activation int None
测试链接成功
[hadoop@hs11 ~]sqoop list-databases –connect jdbc:mysql://localhost:3306/ –username root –password admin
Warning: /usr/lib/hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
13/08/20 16:42:26 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
13/08/20 16:42:26 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
easyhadoop
mysql
以上是关于用kettle将mysql数据导入到hive中为啥执行效率很低的主要内容,如果未能解决你的问题,请参考以下文章
Sqoop从本地MySQL导入到Hive为啥要求Sqoop一定要在HDFS中
Sqoop从hive导数据到mysql中为啥一直报 ERROR tool.ExportTool:
实战使用 Kettle 工具将 mysql 数据增量导入到 MongoDB 中