大数据协作框架
“大数据协作框架”其实是一个统称,主要是以下四个框架
- 数据转换工具 Sqoop
- 文件收集库框架 Flume
- 任务调度框架 Oozie
- 大数据WEB工具Hue
Sqoop作用
将关系数据库中的某张表数据抽取到Hadoop的HDFS文件系统中,底层运行的还是MapReduce。
利用MapReduce加快数据传输速度。
批处理方式进行数据传输。
也可以将HDFS上的文件数据或者Hive表中的数据导出到关系型数据库当中的某张表中。
HDFS →RDBMS
sqoop export \
--connect jdbc:mysql://xxx:3306/xxx \
--username xxx \
--password xxx \
--table xxx \
--export-dir xxx
RDBMS→Hive
sqoop import \
--connect jdbc:mysql://xxx:3306/xxx \
--username xxx \
--password xxx \
--fields-terminated-by "\t" \
--table xxx \
--hive-import \
--hive-table xxx
Hive→RDBMS
sqoop export \
--connect jdbc:mysql://xxx:3306/xxx \
--username xxx \
--password xxx \
--table xxx \
--export-dir xxx \
--input-fields-terminated-by '\t'
RDBMS→HDFS
sqoop import \
--connect jdbc:mysql://xxx:3306/xxx \
--username xxx \
--password xxx \
--table xxx \
--target-dir xxx
规律:
- 从RDBMS导入到HDFS或者Hive中的都使用import;从HDFS或者Hive导出到RDBMS中的都使用export;以HDFS和Hive为参考,根据数据流向选择关键字。
- connect、username、password、table四个参数为每一种传输都必须的;其中connect参数格式均为--connect jdbc:mysql://主机名:3306/数据库名(使用mysql数据库);table是指明mysql中的表名。
- export-dir参数只有在导出数据到RDBMS中时才会用到,含义为表在hdfs中存放的路径。
区别:
- HDFS →RDBMS:指明table:mysql中的表,需要自行先创建;指明export-dir:HDFS中数据的存储路径
- RDBMS→Hive:指明fields-terminated-by:指定分隔符,分隔符指的是存放在Hive中的数据的分隔符,如果目标将存储在Hive中可理解为编码格式,若目标将存储在RDBMS上,则可理解为解码格式;指明table:mysql中的表名;指明hive-import:导入到hive操作;指明hive-table:hive中的表名。注意:table参数不可以与用户家目录下已存在的目录重名,因为sqoop导数据到hive会先将数据导入到HDFS上,然后再将数据load到hive中,最后把这个目录再删除掉。
- Hive→RDBMS:指明table:mysql中的表名;指明export-dir:hive在hdfs中存储的路径;指明hive-table:hive中的表名。
- RDBMS→HDFS:指明table:mysql里的表名;指明target-dir:hdfs存储数据的目录;
Sqoop安装
配置Sqoop1.x
conf目录【sqoop-env-template.sh】
- export HADOOP_COMMON_HOME=Hadoop目录
- export HADOOP_MAPRED_HOME=Hadoop目录
- export HIVE_HOME=Hive目录
- export ZOOCFGDIR=Zookeeper目录
将mysqlJDBC驱动包拷到sqoop的lib目录下
测试sqoop
bin/sqoop list-databases \
--connect jdbc:mysql://主机名:3306 \
--username root \
--password 123456 \
查看本地mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| metastore |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| my_user |
+----------------+
1 row in set (0.00 sec)
mysql> desc my_user;
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | tinyint(4) | NO | PRI | NULL | auto_increment |
| account | varchar(255) | YES | | NULL | |
| passwd | varchar(255) | YES | | NULL | |
+---------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> select * from my_user;
+----+----------+----------+
| id | account | passwd |
+----+----------+----------+
| 1 | admin | admin |
| 2 | johnny | 123456 |
| 3 | zhangsan | zhangsan |
| 4 | lisi | lisi |
| 5 | test | test |
| 6 | qiqi | qiqi |
| 7 | hangzhou | hangzhou |
+----+----------+----------+
7 rows in set (0.00 sec)
hive创建相同结构的空表
hive (test)> create table h_user(