Linux虚拟机安装sqoop-1.4.5-cdh5.3.6

下载

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小同学
Flutter小同学
个人网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值