热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sqoop简单操作-从mysql导入导出数据

转:http:blog.csdn.netchaiyipingarticledetails40295881安装和配置:tar-zxvfsqoop-1.4.6.b

转:http://blog.csdn.net/chaiyiping/article/details/40295881


安装和配置:

  

tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

vi /etc/profile
#sqoop environment
export SQOOP_HOME=/home/hadoop/cloud/sqoop-1.4.6.bin__hadoop-2.0.4-alpha
export PATH=$PATH:$SQOOP_HOME/bin
保存退出
source /etc/profile


一,将本地数据放入hive表中

1,本地数据

本地文件data1.txt中有两列数据,如下:

1 aaa  
2 bbb
3 ccc
4 ddd
5 eee
...

2,在hive中创建表

hive> create table table1                                    
> (id int,name string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ' '
> STORED AS TEXTFILE;
OK
Time taken: 0.082 seconds

列与data1.txt中的数据对应,并给出数据分割的字符,在data1.txt中是空格符“ ” 所以FIELDS TERMINATED BY ' '

3,上传文件中的数据到表table1中

load data local inpath '/home/hadoop/data1.txt' into table  default.table1

注意:hive本身是不存储数据的,简单一点来说可以把它看做是mapreduce的一个包装,让使用者可以通过简单的方式调用mapreduce来访问hdfs中的数据。事实上它的数据本身还是放在hdfs上的。还记得之前在配置的时候设置了hive在hdfs中的warehouse吗?那就是hive放数据的地方。那就看一下table1的数据位置吧:
hive> dfs -ls /user/hive/warehouse/table1  
> ;
Found 1 items
-rw-r--r-- 1 hadoop supergroup 131 2014-10-20 09:06 /user/hive/warehouse/table1/data1.txt

可以看到实际上它只是把data1.txt放到了自己对应的hdfs的目录下,table1的数据本事还是存储在data1.txt这个文本文件中的。

查询一下table1中的数据:

hive> select * from table1;  
OK
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
...
Time taken: 0.093 seconds, Fetched: 20 row(s)

二,通过sqoop把hive中的表导出到mysql数据库

1,在mysql中创建表用来存储导入数据

mysql> use hive  
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

选择数据库hive
mysql> create table import1 (id int,name varchar(10));  
Query OK, 0 rows affected (0.07 sec)

创建表import1用来存储数据

2,利用sqoop将hive中的表导出到mysql的表中

sqoop export -connect jdbc:mysql://hadoop06:3306/hive -username root -password 123456 -table import1 -export-dir /user/hive/warehouse/table1 -input-fields-terminated-by ' ';

实际上还是从hdfs中导出文件到mysql,所以还是要给出input-fields-terminated-by ' '

再查看MySQL中的表import中的数据:

mysql> select * from import1  
-> ;
+------+------+
| id | name |
+------+------+
| 17 | qqq |
| 18 | rrr |
| 19 | sss |
| 20 | ttt |
...
| 14 | nnn |
| 15 | ooo |
| 16 | ppp |
+------+------+
20 rows in set (0.00 sec)
可以看到乱序了,这是因为mapreduce的原因...

三,通过sqoop将mysql中的表导入到hive

sqoop import --connect jdbc:mysql://hadoop06:3306/hive --username root --password 123456 --table import1 --hive-import --split-by 'id'
     这里也要给出split-by参数,sqoop通过这里的参数值来分配mapreduce任务。sqoop会将切分的不同区域的任务分配给不同的map中。每个map再从数据库中一行一行的获取值然后写入到hdfs中。split-by根据不同的参数有不同的切分方法,例如int型,它会选取最大的值和最小的值根据传入的-m参数(默认为1)来确定划分几个区域。默认的split-by参数是要导入的表的主键,如果没有给出参数又没有主键,导入操作就会失败报错


1.执行导入的操作命令:在Sqoop的安装目录下输入命令 sqoop import --connect jdbc:mysql://数据库主机ip:3306/数据库名 --username root --password 123456 --table tablename --hive-import -m 1;


 2.对命令及出现的问题说明:


(1)执行导入时,实际上在内部执行了三个步骤:


        第一步将数据导入hdfs,
        第二步创建hive表名相同的表,
        第三步将hdfs上数据传入hive表中


(2)最开始执行导入后,可在Hadoop下使用fs命令在HDFS中看见导入的数据,在Hive中使用“show tables;”没法看见对应的表,原因是之前执行导入的命令中,没有加入 “--hive-import”参数;


(3)报异常:hive.HiveImport: Exception in thread "main" java.lang.NoSuchMethodError:  org.apache.thrift.EncodingUtils.setBit(BIZ)B。


     解决办法:这是因为在同路径下安装了hive和hbase,而hbase和hive的lib目录下的thrift版本不同。hbase下的为libthrift-0.8.0.jar,hive下的为libthrift-0.9.0.jar。将Hbase下的0.8.0版的删除,换为0.9.0的即可。ps:不知为什么Sqoop向Hive中导入数据还有Hbase的事;
 
报异常:ERROR tool.ImportTool: Encountered IOException running import job: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://ns1/user/hadoop/import1 already exists
 
解决办法:出现这个问题,啥也不用说,先把HDFS中的输出目录干掉 hadoop dfs -rmr /user/hadoop/import1;


导入完成之后查看 Hive 中的数据:

hive> select * from import1;  
OK
1 aaa
2 bbb
3 ccc
...
19 sss
20 ttt
16 ppp
Time taken: 0.293 seconds, Fetched: 20 row(s)

更详细操作

http://lib.csdn.net/article/hive/45629

http://lib.csdn.net/article/hive/45638


推荐阅读
  • 本文总结了Java中日期格式化的常用方法,并给出了示例代码。通过使用SimpleDateFormat类和jstl fmt标签库,可以实现日期的格式化和显示。在页面中添加相应的标签库引用后,可以使用不同的日期格式化样式来显示当前年份和月份。该文提供了详细的代码示例和说明。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
author-avatar
手机用户2602936771
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有