HUE=Hadoop User Experience
Hue是一个开源的Apache Hadoop UI系统,由Cloudera Desktop演化而来,最后Cloudera公司将其贡献给Apache基金会的Hadoop社区,它是基于Python Web框架Django实现的。
通过使用Hue,可以在浏览器端的Web控制台上与Hadoop集群进行交互,来分析处理数据,例如操作HDFS上的数据,运行MapReduce Job,执行Hive的SQL语句,浏览HBase数据库等等。
Hue是一个友好的界面集成框架,可以集成各种大量的大数据体系软件框架,通过一个界面就可以做到查看以及执行所有的框架。
Hue提供的这些功能相比Hadoop生态各组件提供的界面更加友好,但是一些需要debug的场景可能还是要使用原生系统才能更加深入的找到错误的原因。
官方下载源码包、手动编译安装
使用CM集群在线安装
方式一:从CM集群页面进入
http://hadoop01:7180/cmf 用户名密码:admin
方式二:浏览器直接进入
http://hadoop02:8889/hue 用户名密码:hue
-
新建文件、文件夹
-
上传、下载文件
-
查看文件内容
-
在线实时编辑文件内容
-
删除文件
-
修改文件权限
ETL定义
百科定义:ETL(Extract-Transform-Load)是将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。
ETL较常用在数据仓库中,是将原始数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。
==数据抽取(E)==
确定数据源,需要确定从哪些源系统进行数据抽取; --1、确定数据源
定义数据接口,对每个源文件及系统的每个字段进行详细说明;--2.定义数据接口
确定数据抽取的方法:是主动抽取还是由源系统推送? --3.抽取方式的主动和被动 扩展:实时领域?
是增量抽取还是全量抽取?是按照每日抽取还是按照每月抽取? --4、增量、全量
常见的抽取源系统:
#1、从RDBMS抽取数据
通常OLTP系统采用RDBMS存储业务操作数据,从RDBMS抽取操作型数据是最多一种数据抽取方式。
数据从RDBMS抽取后通常会先以文件的方式存储到分布式文件系统中(例如HDFS),方便ETL程序读取原始数据。也有的是将抽取后的数据直接存储到数据仓库中,采用第二种方法需要提前在数据仓库创建与原始数据相同结构的数据仓库模型。
#2、从日志文件抽取
OLTP系统通过日志系统将用户的操作日志、系统日志等存储在OLTP服务器上,由专门的采集程序从服务器上采集日志文件信息。
#3、从数据流接口抽取
OLTP系统提供对外输出数据的接口(比如telnet),采集系统与该接口对接,从数据流接口抽取需要的数据。
==数据转换(T)==
数据转换也叫做数据清洗转换。是将采集过来的原始数据(通常原始数据存在一定的脏数据)清洗(过虑)掉不符合要求的脏数据,并且根据数据仓库的要求对数据格式进行转换。
通常经过数据清洗转换后是符合数据仓库要求的数据。
什么样的数据叫做好数据?数据质量好坏评价? 需求相关性
#具体包括
剔除错误:明显和需求无关的数据进行剔除处理
空值处理:可捕获字段空值,进行加载或替换为其他含义数据
数据标准:统一标准字段、统一字段类型定义 date timestamp
数据拆分:依据业务需求做数据拆分,如身份证号,拆分区划、出生日期、性别等
数据验证:时间规则、业务规则、自定义规则
数据转换:格式转换或者内容转换
数据关联:关联其他数据或数学,保障数据完整性
#栗子
枚举 :有穷数据的集合
星期:1 2 3 4 5 6 7
颜色:a b c d e f g
a--红色
b--绿色
省份: 31 32 33 34 35
数据加载(L)
数据加载就是清洗转换后的数据存储到数据仓库中,数据加载的方式包括:全量加载、增量加载。
#全量加载:
全量加载相当于覆盖加载的方式,每个加载都会覆盖原始数据将数据全部加载到数据仓库。此类加载方式通常用于维度数据。
#增量加载:
增量加载按照一定的计划(通常是时间计划)逐步的一批一批的将数据加载到数据仓库,此类加载方式通常用于OLTP的业务操作数据。
按其字面含义理解就是按照E-T-L这个顺序流程进行处理:先抽取、然后转换、完成后加载到目标中。
在ETL架构中,数据的流向是从源数据流到ETL工具,ETL工具是一个单独的数据处理引擎,一般会在单独的硬件服务器上,实现所有数据转化的工作,然后将数据加载到目标数据仓库中。
如果要增加整个ETL过程的效率,则只能增强ETL工具服务器的配置,优化系统处理流程(一般可调的东西非常少)。
ELT架构则把“L”这一步工作提前到“T”之前来完成:先抽取、然后加载到目标数据库中、在目标数据库中完成转换操作。
比如Hive作为数据仓库工具,本身就具备通过SQL对数据进行各种转换的操作。(insert+select )
结论
-
如果是做传统的数仓 需要 一款专门专业ETL工具 完成数据抽取转换加载动作 而且是在进入数仓之前完成
-
大数据时代的数仓发生了改变 把转换动作放置在数仓中完成 因此在数仓之前只需要抽取和加载即可。
这样的话ETL工具职责就可以大大降低了。
-
当下的语境中,把ETL的范围描述更大:从数据产生开始到最终应用之前,经历的各种调整转换都叫着ETL。因此有的公司把数仓工程师叫做ETL工程师(包括离线和实时)
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。
导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;
导出数据:从Hadoop的HDFS、HIVE中导出数据到关系数据库mysql等。
sqoop sql+hadoop
Sqoop工作机制是将导入或导出命令翻译成mapreduce程序来实现。
在翻译出的mapreduce中主要是对inputformat和outputformat进行定制。
DBInputFormat DBOutPutformat
sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456
#sqoop要求命令及参数 必须写在一行 如果遇到回车换行符 就自动提交
sqoop list-databases
--connect jdbc:mysql://localhost:3306/
--username root
--password 123456
#也可以这么写 \表示命令未完待续 下一行还有命令参数 否则遇到回车换行就会自动提交执行
sqoop list-databases \
--connect jdbc:mysql://localhost:3306/ \
--username root \
--password 123456
sqoop list-databases \
--connect jdbc:mysql://localhost:3306/ \
--username root \
--password 123456
知识点08:增量数据、全量数据
-
全量数据(Full data)
就是全部数据,所有数据。如对于表来说,就是表中的所有数据。
-
增量数据(Incremental data)
就是上次操作之后至今产生的新数据。
-
数据子集
也叫做部分数据。整体当中的一部分。
全量导入MySQL数据到HDFS
指定分隔符
--fields-terminated-by '\001' \
指定任务并行度(maptask个数)
part-r-00000 r表示reducetask 说明这个mr程序是一个标准的两个阶段的程序
part-m-00000 m表示maptask 说明这个mr是一个只有map阶段没有reduce阶段的程序
方式一:先复制表结构、再导入数据
方式二:直接导入数据(包括建表)
总结
实际工作中通常采用自己在hive中建表 只使用sqoop导入数据操作。
理由是自己建表可以精准的控制表的各种属性 包括分隔符 序列化类 存储格式 是否压缩。
sqoop API 原生方式
所谓sqoop原生的方式指的是sqoop自带的参数完成的数据导入。
但是有什么不好的地方呢?请看下面案例
--注意,这里指定了表的文件存储格式为ORC。
--从存储效率来说,ORC格式胜于默认的textfile格式。
#注意,因为hive的表是用户自己创建的,并且建表中的分隔符是\t制表符
#而sqoop默认导入hive中分隔符是\001 因此需要在导入数据的时候使用参数--fields-terminated-by 修改分隔符
HCatalog API方式
Apache HCatalog是基于Apache Hadoop之上的数据表和存储管理服务。
包括:
提供一个共享的模式和数据类型的机制。
抽象出表,使用户不必关心他们的数据怎么存储,底层什么格式。
提供可操作的跨数据处理工具,如Pig,MapReduce,Streaming,和Hive。
sqoop的官网也做了相关的描述说明,使用HCatalog支持ORC等数据格式。
#数据格式支持(这是实际中使用HCatalog的主要原因,否则还是原生的灵活一些)
Sqoop方式支持的数据格式较少;
HCatalog支持的数据格式多,包括RCFile, ORCFile, CSV, JSON和SequenceFile等格式。
#数据覆盖
Sqoop方式允许数据覆盖,HCatalog不允许数据覆盖,每次都只是追加。
#字段名匹配
Sqoop方式比较随意,不要求源表和目标表字段相同(字段名称和个数都可以不相同),它抽取的方式是将字段按顺序插入,比如目标表有3个字段,源表有一个字段,它会将数据插入到Hive表的第一个字段,其余字段为NULL。
但是HCatalog不同,源表和目标表字段名需要相同,字段个数可以不相等,如果字段名不同,抽取数据的时候会报NullPointerException错误。HCatalog抽取数据时,会将字段对应到相同字段名的字段上,哪怕字段个数不相等。
-
结论
虽然sqoop支持很多种方式把数据从mysql导入到hive中,但是,实际中用的最多的是:
1、用户自己手动在hive中建表,并且根据自己的需求指定存储格式、分隔符、是否压缩等属性
2、使用sqoop新的API---Hcatalog API将输入导入到hive表中。
所谓的条件部分指的就是数据的子集。全量数据一部分。
-
where过滤
功能类似于sql语法中where 可以实现过滤
query查询
使用sql query语句来进行查找时,不能加参数--table;
并且必须要添加where条件;
并且where条件后面必须带一个$CONDITIONS这个字符串;
并且这个sql语句必须用单引号,不能用双引号。
方式一:sqoop自带参数实现
设计思路:对某一列值进行判断,只要大于上一次的值就会导入。
所谓的增量实现,肯定需要一个判断的依据,上次到哪里了,这次从哪里开始。
#增量导入3个相关参数
--check-column:以哪一列的值作为增量的基准
--last-value:指定上一次这一列的值是什么
--incremental:指定增量的方式
- append模式
- lastmodified模式
append模式
要求:必须有一列自增的值,按照自增的int值进行判断
特点:只能导入增加的数据,无法导入更新的数据
并且还可以结合sqoop job作业,实现sqoop自动记录维护last-value值,
lastmodifield模式
要求:必须包含动态时间变化这一列,按照数据变化的时间进行判断
特点:既导入新增的数据也导入更新的数据
方式二:用户条件过滤实现
通过where对字段进行过滤
指定分区目录
sqoop导出操作最大的特点是,目标表需要自己手动提前创建。
全量数据导出
#注意,如果Hive中的表底层是使用ORC格式存储的,那么必须使用hcatalog API进行操作。
增量数据导出
updateonly:只增量导出更新的数据
allowerinsert:既导出更新的数据,也导出新增的数据
工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。
工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息或者任务。
一个完整的数据分析系统通常都是由多个前后依赖的模块组合构成的:数据采集、数据预处理、数据分析、数据展示等。各个模块单元之间存在时间先后依赖关系,且存在着周期性重复。
核心概念:依赖执行 周期重复执行
工作流实现方式
-
自己开发实现调度工具
-
使用第三方调度软件
工作流 -----DAG(有向无环图)
Oozie是一个用来管理 Hadoop生态圈job的工作流调度系统。由Cloudera公司贡献给Apache。
Oozie是运行于Java servlet容器上的一个java web应用。
Oozie的目的是按照DAG(有向无环图)调度一系列的Map/Reduce或者Hive等任务。Oozie 工作流由hPDL(Hadoop Process Definition Language)定义(这是一种XML流程定义语言)。
适用场景包括:
需要按顺序进行一系列任务;
需要并行处理的任务;
需要定时、周期触发的任务;
可视化作业流运行过程;
运行结果或异常的通报。
#Oozie Client
提供命令行、java api、rest等方式,对Oozie的工作流流程的提交、启动、运行等操作;
#Oozie WebApp
即 Oozie Server,本质是一个java应用。可以使用内置的web容器,也可以使用外置的web容器;
#Hadoop Cluster
底层执行Oozie编排流程的各个hadoop生态圈组件;
知识点17:Oozie工作流类型
workflow 一次性普通工作流 没有定时和条件触发功能。
coordinator 定时工作流 可以设置执行周期和频率
bundle 批处理工作流 一次可以提交执行多个coordinator
已完成:::::::::::::