sqoop从mysql导入到HDFS

题目

sqoop从mysql导入数据到HDFS,请使用snappy压缩
​ a) 练习sqoop的用法
​ b) 安装snappy并整合使用

环境

Linux版本: CentOS 6.5

jdk版本: JDK1.8

hadoop版本: 2.6.0-cdh5.7.0

sqoop版本:1.4.6-cdh5.7.0

hive版本: 1.1.0-cdh5.7.0

mysql版本: 5.6.23

一份数据:page_views.dat 18.1M

检查snappy是否已经安装

1
$ hadoop checknative

如果你的环境还没有snappy类库请参考编译hadoop源码

创建一张表

在mysql 上面创建一张表用来存放我们的数据

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE sqoop_export_test
(
id int PRIMARY KEY NOT NULL auto_increment,
event_time datetime,
target_url varchar(1000),
acc_token varchar(100),
aim_url varchar(1000),
ip_address varchar(100),
comment varchar(100),
some_no int
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
注意: 如果数据中存在中文记得加字符集编码

上传数据

1
2
3
4
$ cd ~/data
## 这个目录上传我们page_views.dat
$ rz
$ hdfs dfs -put page_views.dat /usr/tmp/

将数据传到mysql

1
2
3
4
5
6
7
8
9
10
11
$ sqoop export \
--connect jdbc:mysql://192.168.137.189:3306/hive \
--username root \
--password 123456 \
--mapreduce-job-name test1 \
--table sqoop_export_test \
--columns 'event_time,target_url,acc_token,aim_url,ip_address,comment,some_no' \
--export-dir /user/tmp/page_views.dat \
--input-null-string '\\N' \
--input-null-non-string '\\N' \
--input-fields-terminated-by '\t'

将数据从mysql导入hive

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ sqoop import \
--connect jdbc:mysql://192.168.137.189:3306/hive \
--username root \
--password 123456 \
--m 1 \
--mapreduce-job-name aaaa \
--table sqoop_export_test \
--columns 'event_time,target_url,acc_token,aim_url,ip_address,comment,some_no' \
--compression-codec 'snappy' \
--target-dir /user/hadoop/SQOOP_SNAPPY \
--fields-terminated-by ',' \
--delete-target-dir \
--null-non-string '' \
--null-string ''

完成

1
$ hdfs dfs -ls /user/hadoop/SQOOP_SNAPPY

1
$ hdfs dfs -text /user/hadoop/SQOOP_SNAPPY/part-m-00000.snappy

至此,我们完成了sqoop从mysql导入数据到HDFS,以sqoop压缩格式导入。