1.HUE
2.ooize
3.1 ooize的基本介绍
Oozie 是一个开源的工作流和协作服务引擎,基于 Apache Hadoop 的数据处理任务.
什么是工作流? 业务过程的部分或整体在计算机应用环境下的自动化
工作流具有特点:
- 整个流程可以被分为多个节点
- 各个节点存在依赖关系(前序没有干, 后续就无法执行)
- 此流程需要周而复始不断的干
总结: 如果以后发现有个任务满足了以上三个特征, 那么就可以尝试使用工作流来解决
如何选择azkaban和ooize
- 如果从单独使用角度来说azkaban更好。 通过配置类似于properties文件来定义工作流,只要时shell可以工作都能工作,本质上azkaban是一款shell调度器
- 如果从生态角度来说(综合使用hue来说)ooize更好,都是开源的并且整合之后使用也较为方便点点就行
3.sqoop
sqoop是一款负责将RDBMS和hadoop之间数据迁移的工具3.1常用命令
```1查看mysql中所有的数据库
sqoop list-databases —connect jdbc:mysql://hadoop01:3306 —username root —password 1234562查看mysql中某个库下所有的表
sqoop list-tables —connect jdbc:mysql://hadoop01:3306/scm —username root —password 123456 从mysql中将数据导入到HDFS(全量导入)
<a name="tWjXv"></a>
### 3.2mysql导入hdfs
全量导入 sqoop import \ —connect jdbc:mysql://hadoop01:3306/test \ —username root —password 123456 \ —table emp \ —delete-target-dir \ #(目的地目录存在, 先删除) —target-dir ‘/sqoop_emp’ \ #指定导入hdfs的目录 默认家目录的 —fields-terminated-by ‘ ‘ \ #指定分割符 默认分割符号为 逗号 —split-by id \ #表示按照那个字段进行分割表数据 建议添加 -m 2 #指定maptask数
条件导入 /usr/bin/sqoop import \ —connect jdbc:mysql://192.168.52.150:3306/test —username root —password 123456 \ —delete-target-dir -m 1 \ —query ‘select phno from emp_conn where 1=1 and $CONDITIONS’ \ —target-dir /sqoop/emp_conn
注意 1.条件导入不能出现—table 参数
2.$CONDITIONS 部分必须要存在如果条件部分是双引号那么 \$CONDITION用反引号处理
<a name="BZuGn"></a>
### 3.3使用sqoop导入到hive中(全量导入)
第一步: 在hive中先建立目标表 create database sqooptohive; use sqooptohive;
create table sqooptohive.emp_hive(
id int,
name string,
age int ,
class string
) row format delimited fields terminated by '\t' stored as orc;
第二部: 执行数据导入操作: HCataLog sqoop import \ —connect jdbc:mysql://192.168.52.150:3306/test \ —username root \ —password 123456 \ —table emp \ —fields-terminated-by ‘\t’ \ —hcatalog-database sqooptohive \ #指定数据库名称 —hcatalog-table emp_hive \ #指定表的名称 -m 1 注意: 使用此种方式, 在hive中建表的时候, 必须保证hive表字段和对应mysql表的字段名称保持一致
<a name="obOUW"></a>
### 3.3hadoop导出到RDBMS
第一步: 需要在mysql中创建目标表 (必须操作)
CREATE TABLE emp_out
(
id
INT(11) DEFAULT NULL,
name
VARCHAR(100) DEFAULT NULL,
deg
VARCHAR(100) DEFAULT NULL,
salary
INT(11) DEFAULT NULL,
dept
VARCHAR(10) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;
导出
sqoop export \ —connect jdbc:mysql://192.168.52.150:3306/test \ —username root \ —password 123456 \ —table emp_out \ —hcatalog-database sqooptohive \ —hcatalog-table emp_hive \ -m 1 ```
3.4 sqoop的相关参数
参数 | 说明 |
---|---|
—connect | 连接关系型数据库的URL |
—username | 连接数据库的用户名 |
—password | 连接数据库的密码 |
—driver | JDBC的driver class |
—query或—e | 将查询结果的数据导入,使用时必须伴随参—target-dir,—hcatalog-table,如果查询中有where条件,则条件后必须加上CONDITIONS关键字。 如果使用双引号包含sql,则CONDITIONS前要加上\以完成转义:\$CONDITIONS |
—hcatalog-database | 指定HCatalog表的数据库名称。如果未指定,default则使用默认数据库名称。提供 —hcatalog-database不带选项—hcatalog-table是错误的。 |
—hcatalog-table | 此选项的参数值为HCatalog表名。该—hcatalog-table选项的存在表示导入或导出作业是使用HCatalog表完成的,并且是HCatalog作业的必需选项。 |
—create-hcatalog-table | 此选项指定在导入数据时是否应自动创建HCatalog表。表名将与转换为小写的数据库表名相同。 |
—hcatalog-storage-stanza ‘stored as orc tblproperties (“orc.compress”=”SNAPPY”)’ \ | 建表时追加存储格式到建表语句中,tblproperties修改表的属性,这里设置orc的压缩格式为SNAPPY |
-m | 指定并行处理的MapReduce任务数量。 -m不为1时,需要用split-by指定分片字段进行并行导入,尽量指定int型。 |
—split-by id | 如果指定-split by, 必须使用$CONDITIONS关键字, 双引号的查询语句还要加\ |
—hcatalog-partition-keys —hcatalog-partition-values | keys和values必须同时存在,相当于指定静态分区。允许将多个键和值提供为静态分区键。多个选项值之间用,(逗号)分隔。比如: —hcatalog-partition-keys year,month,day —hcatalog-partition-values 1999,12,31 |
—null-string ‘\N’ —null-non-string ‘\N’ | 指定mysql数据为空值时用什么符号存储,null-string针对string类型的NULL值处理,—null-non-string针对非string类型的NULL值处理 |
—hive-drop-import-delims | 设置无视字符串中的分割符(hcatalog默认开启) |
—fields-terminated-by ‘\t’ | 设置字段分隔符 |
3.5 抽取方式的比较
支持数据格式 | 是否允许覆盖 | 字段名要求 | |
---|---|---|---|
原生APi | 支持的格式少 | 允许 | 字段名不要求按照顺序 |
HCatalog | 支持数据格式多比如ORC,SequenceFile,CSV, JSON | 不允许覆盖只能追加 | 要求字段名必须相同 |