博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sqoop 导入导出
阅读量:7234 次
发布时间:2019-06-29

本文共 5318 字,大约阅读时间需要 17 分钟。

hot3.png

sqoop  mysql 导入,导出

1.安装(前提hadoop启动)

[hadoop@h91 ~]$ tar -zxvf sqoop-1.3.0-cdh3u5.tar.gz 

[hadoop@h91 hadoop-0.20.2-cdh3u5]$ cp hadoop-core-0.20.2-cdh3u5.jar /home/hadoop/sqoop-1.3.0-cdh3u5/lib/

[hadoop@h91 ~]$ cp ojdbc6.jar sqoop-1.3.0-cdh3u5/lib/

[hadoop@h91 ~]$ vi .bash_profile 

添加 

export SQOOP_HOME=/home/hadoop/sqoop-1.3.0-cdh3u5

[hadoop@h91 ~]$ source .bash_profile 

2.

[hadoop@h91 ~]$ cd sqoop-1.3.0-cdh3u5/bin/

[hadoop@h91 bin]$ vi configure-sqoop 

注释掉hbase和zookeeper检查

## Moved to be a runtime check in sqoop.

#if [ ! -d "${HBASE_HOME}" ]; then

#  echo "Warning: $HBASE_HOME does not exist! HBase imports will fail."

#  echo 'Please set $HBASE_HOME to the root of your HBase installation.'

#fi

3.mysql 授权

mysql> insert into mysql.user(Host,User,Password) values("localhost","sqoop",password("sqoop"));

mysql> flush privileges;

mysql> grant all privileges on *.* to 'sqoop'@'%' identified by 'sqoop' with grant option;

mysql> flush privileges;

mysql> use test;

mysql> create table sss (id int,name varchar(10));

mysql> insert into sss values(1,'zs');

mysql> insert into sss values(2,'ls');

4.测试sqoop能否连接上mysql

[hadoop@h91 mysql-connector-java-5.0.7]$ cp mysql-connector-java-5.0.7-bin.jar /home/hadoop/sqoop-1.3.0-cdh3u5/lib/

列出mysql数据库中的所有数据库

sqoop list-databases --connect jdbc:mysql://192.168.4.117:35577/ -username search -password search1223

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop list-tables --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop

(显示有sss表)

5.将mysql中的sqoop用户下sss 导入到HDFS中

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop import --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --table sss -m 1

(-m 为并行  默认并行度为4)

[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -ls

多出个sss目录

[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -ls /user/hadoop/sss

[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -cat /user/hadoop/sss/part-m-00000

看到 sss表内容

1,zs

2,ls

6.从HDFS导入到mysql中

mysql> delete from sss;

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop export --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --table sss --export-dir hdfs://h91:9000/user/hadoop/sss/part-m-00000

[root@o222 ~]# mysql -usqoop -p

mysql> use test

mysql> select * from sss;

表中的数据 又 回来了

7. 将mysql中的数据导入到hive中

sqoop import --connect jdbc:mysql://192.168.4.150:3306/test --direct --username sqoop --password sqoop --table ss --hive-table tb2 --hive-import -m 1

sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table users --username dyh --password 000000 --hive-table users  --fields-terminated-by "\0001"  --lines-terminated-by "\n";

参数说明:

--fields-terminated-by "\0001"  是设置每列之间的分隔符,"\0001"是ASCII码中的1,它也是hive的默认行内分隔符, 而sqoop的默认行内分隔符为"," 

--lines-terminated-by "\n"  设置的是每行之间的分隔符,此处为换行符,也是默认的分隔符;

其中--table tb1是mysql sqoop数据库中的一张表,--hive-table tb1是导入到hive中该表的名字,不需要事先建表。

关系型数据的表结构复制到hive中

8. 将hive中的数据导入到mysql中

sqoop export --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --direct --table ss --export-dir /newzqpic1/nutch/hive/warehouse/tb1/part-m-00000 --input-fields-terminated-by '\001'

将数据从关系数据库导入文件到hive表中,--query 语句使用

 sqoop import --append --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --query "select id from ss where \$CONDITIONS"  -m 1  --target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by ",";

将数据从关系数据库导入文件到hive表中,--columns  --where 语句使用

 sqoop import --append --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --table ss --columns "id,age,name"  --where "id > 3 and (age = 88 or age = 80)"  -m 1  --target-dir /user/hive/warehouse/userinfos2 --fields-terminated-by ",";

注意:--target-dir /user/hive/warehouse/userinfos2   可以用  --hive-import --hive-table userinfos2 进行替换

---------------------------------------------------------

配置 sqoop导入的 

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop export --connect jdbc:mysql://192.168.8.51:3306/test --username sqoop --password sqoop --table qqq --export-dir hdfs://h851:9000/user/hadoop/qqq.txt --input-fields-terminated-by '\t'

****--input-fields-terminated-by '\t'    

 声明分隔符*******

----------------------------------------------------------

sqoop eval工具:

sqoop下 使用sql语句对 关系型数据库进行操作

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop eval --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --query "select * from sss"

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop eval --connect jdbc:mysql://192.168.4.150:3306/test --username sqoop --password sqoop --query "insert into sss values(3,'ww')"

============================================================

sqoop oracle

1.测试sqoop 连接oracle

[hadoop@h91 ~]$ cp ojdbc6.jar sqoop-1.3.0-cdh3u5/lib/

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop list-tables --connect jdbc:oracle:thin:@192.168.8.222:1521:TEST --username scott --password abc

2.导出到HDFS中 

[hadoop@h91 sqoop-1.3.0-cdh3u5]$ bin/sqoop import --connect jdbc:oracle:thin:@192.168.8.222:1521:TEST --username SCOTT --password abc --verbose -m 1 --table S1

(表名字 和 用户名要大写 )

HDFS 中查看

[hadoop@h91 hadoop-0.20.2-cdh3u5]$ bin/hadoop fs -cat /user/hadoop/S1/part-m-00000

101,zhangsan

102,lisi

版本问题:

hadoop-core-1.2.0.jar,hadoop/lib目录下的commons-configuration-1.6.jar和mysql的jdbc连接的jar包一同复制到sqoop/lib目录下,删除,该目录下面原有的hadoop-core-*.jar,避免版本冲突。

转载于:https://my.oschina.net/u/2510243/blog/601726

你可能感兴趣的文章
Hyper-V虚拟机联网设置图文教程(转载)
查看>>
链表的简单操作
查看>>
文件服务器 之 vsFTPd 服务器初学者指南
查看>>
Python 匿名函数
查看>>
Leetcode算法刷题:第14题 Longest Common Prefix
查看>>
C++ 11 - STL - 函数对象(Function Object) (下)
查看>>
SQL学习之数据列去空格函数
查看>>
重写ProgressDialog,实现各种个性进度条需求(含源码)
查看>>
Android NDK 环境搭建 + 测试例程
查看>>
雨林木风XP.com上线 宣称已获得微软授权售卖正版Windows 7
查看>>
数据库优化的一些方向
查看>>
Bootstrap3基础 form-inline 输入框在同一行
查看>>
php魔术方法
查看>>
附加作业
查看>>
大数据算法摘录
查看>>
有序线性表合并
查看>>
IIC,AT24C02
查看>>
介绍自己
查看>>
双线性插值算法进行图像缩放及性能效果优化
查看>>
[Usaco2007 Dec]宝石手镯
查看>>