介绍
(1)sqoop是Apache的顶级项目
(2)大数据Hadoop框架生态系统中一员
(3)底层就是MapReduce程序,并行计算的框架,并且仅仅只有Map Task
(4)官网:http://archive.cloudera.com/cdh5/cdh/5/sqoop-1.4.6-cdh5.7.6/
(5)版本:
sqoop 1.x版本 使用的时候非常简单,仅仅只需要执行一个命令即可
sqoop 2.x版本 相当于一个MYSQL数据库一样,启动一个服务 执行Job
安装
sqoop使用
1.帮助命令:bin/sqoop help
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
import Import a table from a database to HDFS
import-all-tables Import tables from a database to HDFS
import-mainframe Import datasets from a mainframe server to HDFS
job Work with saved jobs
list-databases List available databases on a server
list-tables List available tables in a database
merge Merge results of incremental imports
metastore Run a standalone Sqoop metastore
version Display version information
2.测试:连接MYSQL数据库,读取指定database中所有表名
注意:如果失败可能是mysql jar包没有导入到sqoop lib目录下
bin/sqoop list-tables \
--connect jdbc:mysql://主机地址/数据库名称 \
--username 数据库用户 \
--password 数据库密码
成功之后显示数据库中的表
实操:从大数据环境出来叫导出,反之叫导入
1.HDFS导出到MYSQL表:帮助命令:bin/sqoop export --help
思路:HDFS上一个文件(URL) >>>> MYSQL 数据库 表(表名)
注:目标表需要存在
bin/sqoop export \
//主机地址 数据库
--connect jdbc:mysql://bigdata-hpsk01.huadian.com/test \
--username root \
--password 123456 \
// 目标表(需要提前创建表结构)
--table tb_emp \
//那些字段(可省略部分)
--columns empno,ename,job,mgr,hiredate,sal,comm,deptno \
//导出文件在HDFS上的路径
--export-dir /user/hive/warehouse/db_0708.db/emp \
//需要几个map来处理
--num-mappers 2 \
//分割符号
--input-fields-terminated-by '\t'
如果报错:.NoClassDefFoundError: org/json/JSONObject
需要导一个 JSON转换库 jar包 到lib目录下
2.从RDBMS中数据导入HDFS上
思路:表 -> import -> HDFS(文件)
bin/sqoop import \
--connect jdbc:mysql://bigdata-hpsk01.huadian.com/test \
--username root \
--password 123456 \
//需要导入的表名称
--table tb_emp \
//字段
--columns empno,ename,job,mgr,hiredate,sal,comm,deptno \
//导到HDFS上哪个路径 路径不存在会创建
--target-dir /user/huadian/sqoop/emp-import \
//map任务数量
--num-mappers 2 \
//字段之间分割符号,
--fields-terminated-by ',' \
//如果目录存在先删除掉
--delete-target-dir
3.将RDBMS表中数据导入到HIve表中
思路:表->HDFS ->Hive
bin/sqoop import \
--connect jdbc:mysql://bigdata-hpsk01.huadian.com/test \
--username root \
--password 123456 \
//需要导入的表
--table tb_word \
//字段
--columns word,count \
//指定是hive表
--hive-import \
//指定数据库
--hive-database default \
//创建一个表来存储
--create-hive-table \
//接收数据表名称
--hive-table ht_word \
//字段分割符号
--fields-terminated-by ',' \
//map任务数量
--num-mappers 1 \
//覆盖
--hive-overwrite \
--delete-target-dir
注:
1.SQOOP:依赖Hadoop和Hive,hive相关Jar包没有加载到SQOOP的运行环境上
先运行:export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:/opt/cdh5.7.6/hive-1.1.0-cdh5.7.6/lib/*
2.需要hive-site.xml放到Hadoop/etc/haddop/下面:使用软连接
ln -s /opt/cdh5.7.6/hive-1.1.0-cdh5.7.6/conf/hive-site.xml /opt/cdh5.7.6/hadoop-2.6.0-cdh5.7.6/etc/hadoop