sqoop
1)概述
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的文件系统中导出数据到关系数据库mysql等
2)工作机制
将导入或导出命令翻译成mapreduce程序来实现,在翻译出的mapreduce中主要对inputformat 和outputformat进行定制
3)sqoop安装:
1.前提有hadoop与jdk
下载:官网
2.修改配置文件
改名字
cd $SQOOP_HOME/conf
mv sqoop-env-template.sh sqoop-env.sh
在sqoop-env.sh中添加
export HADOOP_COMMON_HOME=/uer/local/chun/hadoop-2.7.7/
export HADOOP_MAPRED_HOME=/uer/local/chun/hadoop-2.7.7/
export HIVE_HOME=/usr/local/hive
把jdbc驱动包加入到lib下,注意驱动版本向下兼容
4)启动验证
cd $SQOOP_HOME/bin
sqoop-version
预期的输出:
sqoop-version
Warning: /usr/local/sqoop-1.4.6/../hcatalog does not exist! HCatalog jobs will fail.
Please set $HCAT_HOME to the root of your HCatalog installation.
Warning: /usr/local/sqoop-1.4.6/../accumulo does not exist! Accumulo imports will fail.
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
错误: 找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty
19/08/27 21:08:58 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6
Sqoop 1.4.6
git commit id c0c5a81723759fa575844a0a1eae8f510fa32c25
Compiled by root on Mon Apr 27 14:38:36 CST 2015
无法找不到或无法加载主类 org.apache.hadoop.hbase.util.GetJavaProperty:
因为hbase和hadoop版本有点不兼容,咱们没出现什么错误,就咱们不更换,我这里hbase是2.1.5,换到2.0.6就可以。
5)验证sqoop到mysql业务库之间的连通性:
sqoop-list-databases --connect jdbc:mysql://localhost:3306 --username root --password adminsqoop-list-tables --connect jdbc:mysql://localhost:3306/test --username root --password admin
6)Sqoop的数据导入
“导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据)
1。从mysql导出到hdfs
bin/sqoop import \ //sqoop命令表导入
--connect jdbc:mysql://localhost:3306/hive \
//告诉jdbc,连接mysql的url连接MySQL使用的库
--username root \ //连接mysql的用户名
--password admin \ //连接mysql的密码
--target-dir \ //目标的目录
/sqooptest \
--fields-terminated-by ‘,’ \ //指定输出文件中的字段分隔符
--table emp \ //你要导的表
--split-by id \ //如果你的map指定的个数大于1,那就必须指定一个字段
--m 1 //指定的maptask()
\可以转到下一行继续写
可以查看导出的数据 cat查看part-m-*
hdfs dfs -cat /mysql/import1/part-m-*
dake 22 failedman
dake 23 goodman
chun3 25 failedman
chun1 24 successfulman
chun2 23 goodman
2.导入关系表到HIVE
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password root --table emp --hive-import --split-by id --m 1
3.导入表数据子集
bin/sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password admin \
--where "city ='sec-bad'" \
--target-dir /wherequery \
--table emp_add \--m 1