下载
cdh5.3.6 密码:bqgj
【cdh】
链接: https://pan.baidu.com/s/1ASwsAS2eRrV7WpymuQS3-w 密码: bqgj
配置
1.sqoop-env-template.sh
去除template
//更新前
#Set path to where bin/hadoop is available
#export HADOOP_COMMON_HOME=
#Set path to where hadoop-*-core.jar is available
#export HADOOP_MAPRED_HOME=
#Set the path to where bin/hive is available
#export HIVE_HOME=
//更新后
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/opt/cdh5.3.6/hadoop-2.5.0-cdh5.3.6
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/opt/cdh5.3.6/hadoop-2.5.0-cdh5.3.6
#Set the path to where bin/hive is available
export HIVE_HOME=/opt/cdh5.3.6/hive-0.13.1-cdh5.3.6
2.将mysql-connector-java-5.1.47-bin.jar(从上述cdh地址下载解压,并找到该文件)拷贝到sqoop的lib目录下
使用
查看命令
bin/sqoop help
查看数据库
bin/sqoop list-databases \
--connect jdbc:mysql://wqq:3306 \
--username root \
--password 123456
在mysql中造数据
my_user_sql.txt 见cdh下载地址
import功能
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user
执行完之后,可以在 hadoop 根目录下,读取导入的文件(路径/user/root/my_user/part-m-00001)
bin/hdfs dfs -text /user/root/my_user/part-m-00001
设置导入目录,以及map数
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/my_user/sqoop/imp_myuser \
--num-mappers 1
此时sqoop根目录下会生成,my_user.java
导入的文件默认是textfile,设置成 parquetfile
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/my_user/sqoop/imp_myuser_parquet \
--num-mappers 1 \
--as-parquetfile
hive操作
在hive中,删除表
drop table if exists default.hive_user;
在hive中,创建 hive_user 表
create table default.hive_user (
id int,
account string,
pwd string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS parquet;
在hive中,并加载数据
load data inpath '/user/root/my_user/sqoop/imp_myuser_parquet' into table default.hive_user;
发现加载出来的数据是空的???
通过 query 条件查询部分内容
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--query 'select id,account from my_user where $CONDITIONS' \
--target-dir /user/root/my_user/sqoop/imp_myuser_query \
--num-mappers 1
compress 压缩
执行之前,先将hadoop下的lib/native空文件夹删除,然后将cdh下载地址中 hadoop-2.5.0-cdh5.3.6-snappy-contos7-native.tar 解压后的native 放入 hadoop的lib/native目录下,
delete-target-dir 是删除已有文件夹,若是之前未创建,去除该参数。
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--delete-target-dir \
--target-dir /user/root/my_user/sqoop/imp_myuser_sannpy \
--num-mappers 1 \
--compress \
--compression-codec org.apache.hadoop.io.compress.SnappyCodec
hive读取压缩文件并存储
执行 bin/hive 重启hive(因为上面hadoop引入了native,为了生效),创建hive表,将上述snappy文件加载到hive表中
create table default.hive_user_snappy (
id int,
account string,
pwd string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
load data inpath '/user/root/my_user/sqoop/imp_myuser_sannpy' into table default.hive_user_snappy;
select * from hive_user_snappy;
此时hive命令行,可以看到数据已经加载到表中。
流程:从mysql获取数据,sqoop将其压缩存储到hdfs文件系统,在hive中创建对应的表,然后从文件系统读取文件存入hive表中。
增量数据的导入(两种)
1.query中用where条件
2.sqoop incremental import
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/my_user/sqoop/imp_myuser_incre \
--num-mappers 1 \
--incremental append \
--check-column id \
--last-value 4
使用 direct 优化
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--target-dir /user/root/my_user/sqoop/imp_myuser_incre_direct \
--num-mappers 1 \
--direct
export功能
把 cdh下载地址中的 my_user_2.txt 放入 /opt/module/dataresource 下
hadoop中上传文件
bin/hdfs dfs -mkdir -p /user/root/my_user/sqoop/exp/user/
bin/hdfs dfs -put /opt/module/dataresource/my_user_2.txt /user/root/my_user/sqoop/exp/user/
文件数据导出到mysql
bin/sqoop export \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--export-dir /user/root/my_user/sqoop/exp/user/ \
--num-mappers 1
执行完之后,sql中查询my_user 表,发现数据已经导出到mysql。
sqoop导入导出hive
import hive table
先在hive中创建 user_hive 表 ,下述命令可以直接放入hive命令行;也可以放入 *.sql 文件,使用 bin/hive -f file_path 生成表
use default;
drop table if exists user_hive;
create table user_hive (
id int,
account string,
pwd string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
在hdfs上创建文件,并将数据存入hive表中,一行命令即可(效果如同上述两步操作,先import到hdfs,然后hive再load data到表中)
bin/sqoop import \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user \
--num-mappers 1 \
--delete-target-dir \
--fields-terminated-by '\t' \
--hive-import \
--hive-database default \
--hive-table user_hive
import mysql table
先在mysql中创建表
use test;
CREATE TABLE IF NOT EXISTS `my_user2`(
`id` INT UNSIGNED AUTO_INCREMENT,
`account` VARCHAR(100) NOT NULL,
`pwd` VARCHAR(40) NOT NULL,
PRIMARY KEY ( `id` )
);
从hive导出数据到mysql
bin/sqoop export \
--connect jdbc:mysql://wqq:3306/test \
--username root \
--password 123456 \
--table my_user2 \
--export-dir /user/hive/warehouse/user_hive \
--num-mappers 1 \
--input-fields-terminated-by '\t'
成功之后,再去查看mysql的my_user2 表,发现表中已有数据。
- -options-file
实际运用中,脚本更加方便。写一个示例,见cdh下载的 sqoop_import_hdfs.txt 文件,上传到 /opt/module/dataresource 下
然后执行
bin/sqoop --options-file /opt/module/dataresource/sqoop_import_hdfs.txt
=================================================================
个人博客
Github
个人公众号:Flutter小同学
个人网站