目录
Sqoop部署
下载并解压
配置文件?
添加驱动
验证安装
sqoop使用
连接MySQL
导入数据
RDBMS导入HDFS?
RDBMS到Hive
RDBMS到Hbase
Sqoop部署
下载并解压
- 下载
- 上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到虚拟机中
- 解压安装包:
# 解压
tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /usr/local/src/
# 重命名
cd /usr/local/src/
mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop
配置文件?
- 复制 sqoop-env-template.sh 文件并重命名
# 进入 sqoop 的 conf 目录下
[root@master src]# cd sqoop/conf
# 查看目录下的文件
[root@master conf]# ls
oraoop-site-template.xml sqoop-env-template.sh sqoop-site.xml
sqoop-env-template.cmd sqoop-site-template.xml
# 拷贝一个文件并命名为 sqoop-env.sh
[root@master conf]# cp sqoop-env-template.sh sqoop-env.sh - 配置sqoop-env.sh
# 根据软件的安装路径配置文件(如果没有安装对应组件会出现警告,不影响使用)
export HADOOP_COMMON_HOME=/usr/local/src/hadoop
export HADOOP_MAPRED_HOME=/usr/local/src/hadoop
export HIVE_HOME=/usr/local/src/hive
export HBASE_HOME=/usr/local/src/hbase
export ZOOKEEPER_HOME=/usr/local/src/zookeeper
export ZOOCFGDIR=/usr/local/src/zookeeper
添加驱动
如果连接类似MySQL等关系型数据库,需要添加JDBC驱动
?点击下载:JDBC驱动?
cp mysql-connector-java-5.1.27-bin.jar /usr/local/src/sqoop/lib/
验证安装
# 切换到 sqoop 目录下
cd /usr/local/src/sqoop
# 执行验证命令
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
Sqoop操作
连接MySQL
bin/sqoop list-databases --connect jdbc:mysql://127.0.0.1:3306/ --username 用户 --password 密码
information_schema
hive
metastore
mysql
performance_schema
sys
导入数据
导入:从非大数据集群(RDBMS)向大数据集群(HDFS、HIVE、HBASE?)传输数据
RDBMS导入HDFS?
启动HDFS
-
??进入MySQL mysql -uroot -proot -
创建测试数据 # 创建数据库
create database tescdata;
# 进入 tescdata 数据库
use tescdata;
# 创建表
CREATE TABLE PIM(
id INT(4) PRIMARY KEY NOT NULL AUTO_INCREMENT,
NAME VARCHAR(255),
sex VARCHAR(255));
# 插入数据
INSERT INTO PIM(NAME, sex) VALUES('zhangshan', '1');
INSERT INTO PIM(NAME, sex) VALUES('lilei', '1');
INSERT INTO PIM(NAME, sex) VALUES('xiaohong', '0');
# 查看数据
mysql> select * from PIM;
+----+-----------+------+
| id | NAME | sex |
+----+-----------+------+
| 1 | zhangshan | 1 |
| 2 | lilei | 1 |
| 3 | xiaohong | 0 |
+----+-----------+------+
-
导入数据?
-
?全部导入? bin/sqoop import \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--table PIM \
--target-dir /user/tescdata \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"
[root@master sqoop]# hdfs dfs -cat /user/tescdata/part-m-00000
1 zhangshan 1
2 lilei 1
3 xiaohong 0 bin/sqoop import \ # 导入数据
--connect jdbc:mysql://localhost:3306/tescdata \ # 连接mysql
--username root \ # 用户名
--password root \ # 密码
--table PIM \ # 表名
--target-dir /user/tescdata \ # hdfs目录
--delete-target-dir \ # 如果有就删除(不建议使用)
--num-mappers 1 \ # 指定map数
--fields-terminated-by "\t" # 指定文件分割符 -
查询导入??? bin/sqoop import \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--target-dir /user/tescdata \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--query 'select * from PIM where sex = 1 and $CONDITIONS' [root@master sqoop]# hdfs dfs -cat /user/tescdata/*
1 zhangshan 1
5 lilei 1
--query 查询(执行sql语句进行查询,and $CONDITIONS 不可省略
-
导入指定列 bin/sqoop import \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--columns id,name \
--table PIM \
--target-dir /user/tescdata \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t"
--columns?指定列名(使用查询导入执行 select id,name?from PIM where?$CONDITIONS; 效果一致)
- 导入筛选
bin/sqoop import \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--target-dir /user/tescdata \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by "\t" \
--table PIM \
--where "id>2 and sex = 1"
--where 指定条件 (使用查询导入执行 select *?from PIM where id>2 and sex = 1?and $CONDITIONS; 效果一致)
RDBMS到Hive
bin/sqoop import \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--table PIM \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table hive_PIM
hive> show tables;
OK
hive_pim
Time taken: 0.09 seconds, Fetched: 1 row(s)
hive> select * from hive_pim;
OK
1 zhangshan 1
3 xiaohong 0
5 lilei 1
过程分为两步,第一步将数据导入到HDFS(默认的临时目录是/user/username/表名),第二步将导入到HDFS的数据迁移到Hive仓库
?
?
?RDBMS到Hbase
bin/sqoop import \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--table PIM \
--columns "id,name,sex" \
--column-family "info" \
--hbase-create-table \
--hbase-row-key "id" \
--hbase-table "hbase_PIM" \
--num-mappers 1 \
--split-by id
?导出
导出:从大数据集群(HDFS、HIVE、HBASE?)向非大数据集群(RDBMS)传输数据
HIVE/HDFS到RDBMS
bin/sqoop export \
--connect jdbc:mysql://localhost:3306/tescdata \
--username root \
--password root \
--table PIM \
--num-mappers 1 \
--export-dir /user/hive/warehouse/hive_pim \
--input-fields-terminated-by "\t"
MySQL表必须存在,否则不会自动创建
|