sqoop简单操作-从mysql导入导出数据
2017-02-07 13:43
881 查看
转: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
列与data1.txt中的数据对应,并给出数据分割的字符,在data1.txt中是空格符“ ” 所以FIELDS TERMINATED BY ' '
注意:hive本身是不存储数据的,简单一点来说可以把它看做是mapreduce的一个包装,让使用者可以通过简单的方式调用mapreduce来访问hdfs中的数据。事实上它的数据本身还是放在hdfs上的。还记得之前在配置的时候设置了hive在hdfs中的warehouse吗?那就是hive放数据的地方。那就看一下table1的数据位置吧:
可以看到实际上它只是把data1.txt放到了自己对应的hdfs的目录下,table1的数据本事还是存储在data1.txt这个文本文件中的。
查询一下table1中的数据:
选择数据库hive
创建表import1用来存储数据
实际上还是从hdfs中导出文件到mysql,所以还是要给出input-fields-terminated-by ' '
再查看MySQL中的表import中的数据:
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
安装和配置:
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
相关文章推荐
- sqoop简单操作-从mysql导入导出数据
- 利用sqoop将hive数据导入导出数据到mysql
- Ubuntu命令行下MySQL数据导出与导入简单示例
- Ubuntu命令行下MySQL数据导出与导入简单示例
- 大数据基础(二)hadoop, mave, hbase, hive, sqoop在ubuntu 14.04.04下的安装和sqoop与hdfs,hive,mysql导入导出
- 股票数据导出分析(一)---数据导入MySQL以及网页表格简单show出来
- 用Sqoop2在Mysql和hadoop导入导出数据
- postgresql 数据库中数据的导入导出(简单操作+示例)
- 基于Linux的MySQL操作实例之数据导入/导出,新增/查询表记录
- 利用sqoop将hive数据导入导出数据到mysql
- 利用sqoop将hive数据导入导出数据到mysql
- MySQL 数据库表操作和数据导入导出方式总结笔记
- 6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法
- mysql 数据表备份导出,恢复导入操作实践
- Sqoop_详细总结 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- 使用Sqoop将HDFS/Hive/HBase与MySQL/Oracle中的数据相互导入、导出
- Ubuntu命令行下MySQL数据导出与导入简单示例
- 利用sqoop将hive数据导入导出数据到mysql (转)
- Sqoop进行MySQL和Hive间的导入导出操作
- MySQL数据表简单的导出excel和导入文件