1. MySQL数据库管理工具有哪些
1、phpMyAdmin
phpMyAdmin是最常用的MySQL维护工具,是一个用PHP开发的基于Web方式架构在网站主机上的MySQL管理工具,支持中文,管理数据库非常方便。不足之处在于对大数据库的备份和恢复不方便。
2、MySQLDumper
MySQLDumper使用PHP开发的MySQL数据库备份恢复程序,解决了使用PHP进行大数据库备份和恢复的问题,数百兆的数据库都可以方便的备份恢复,不用担心网速太慢导致中间中断的问题,非常方便易用。这个软件是德国人开发的,还没有中文语言包。
3、Navicat
Navicat是一个桌面版MySQL数据库管理和开发工具。和微软SQLServer的管理器很像,易学易用。Navicat使用图形化的用户界面,可以让用户使用和管理更为轻松。支持中文,有免费版本提供。
4、MySQL GUI Tools
MySQL GUI Tools是MySQL官方提供的图形化管理工具,功能很强大,值得推荐,可惜的是没有中文界面。
5、MySQL ODBC Connector
MySQL官方提供的ODBC接口程序,系统安装了这个程序之后,就可以通过ODBC来访问MySQL,这样就可以实现SQLServer、Access和MySQL之间的数据转换,还可以支持ASP访问MySQL数据库。
2. 大数据工程师常用的大数据BI工具是什么
【导语】目前,无论是大企业还是小企业,都面临着数字化转型的挑战。如何在大数据中获得更好地洞察力,有效改善用户体验,同时达到优化生产力的效果,这时候进行数据分析就显得尤为重要了,那么大数据工程师常用的大数据BI工具是什么?
1、亿信ABI
亿信ABI是亿信华辰开发的一款全能型数据分析平台。支持连接多种类型的数据源,包括:关系型数据库,分布式数据库,文件数据源,接口数据源等;也能灵活支持跨源跨库的数据分析。内置了数仓实施工具,通过拖拽式的流程设计,实现了数据抽取、清洗、转换、装载及调度。支持业务人员自助分析,拖拖拽拽就能做出数据分析。
2、Tableau
Tableau是国外比较流行的一款数据可视化工具,可视化功能很强大,对计算机的硬件要求较高,部署较复杂。支持与Matlab进行集成计算。目前在数据挖掘领域做得相对比较简单,只是内置了预测和聚类两个挖掘分析算法,但支持R语言等挖掘语言集成。
3、QlikView
QlikView比较灵活,展示样式多样。它允许设置和调整每个对象的每个小方面,并自定义可视化和仪表板的外观。QlikView数据文件(QVD文件)概念的引入,一定程度上取代了ETL工具的功能,拥有可集成的ETL(提取,转换,加载)引擎,能够执行普通的数据清理操作,但是这可能会很昂贵。
4、Power BI
Power
BI是微软提供的一种商业分析产品,因为是微软的产品,所以它的知名度很高。在产品的功能、易用性、美观程度上都有很好的表现。这个产品的学习成本较低、上手快,因为桌面版不提供协作选项,因此最适合独立用户或在同一个办公区工作的人使用,对于有复杂业务场景需求的客户,包括有定制开发需求的客户来说,存在不小的障碍。
5、Finebi
Finebi是帆软开发的一款敏捷BI工具,帆软早期专注于传统报表的图表组件功能,以价格优势占到了不低的市场份额,作为传统报表起步的公司,在敏捷BI的冲击下市场受到了冲击并开始转向敏捷路线。Finebi做到了将IT人员从分析环节的中心淡去,提供了从数据采集到数据加工处理、数据存储、数据分析、数据可视化为一体的一站式商业智能解决方案。
关于大数据工程师常用的大数据BI工具,就给大家说明到这里了,其实大数据行业的发展未来前景一路看好,希望大家能够抓住机遇,加油!
3. 什么是ETL调度系统
对于做过 BI 开发的朋友,ETL 并不陌生,只要涉及到数据源的数据抽取、数据的计算和处理过程的开发,都是 ETL,ETL 就这三个阶段,Extraction 抽取,Transformation 转换,Loading 加载。
从不同数据源抽取数据 EXTRACTION ,按照一定的数据处理规则对数据进行加工和格式转换 TRASFORMATION,最后处理完成的输出到目标数据表中也有可能是文件等等,这个就是 LOADING。
再通俗一点讲,ETL 的过程就跟大家日常做菜一样,需要到菜市场的各个摊位买好菜,把菜买回来要摘一下,洗一洗,切一切最后下锅把菜炒好端到饭桌上。菜市场的各个摊位就是数据源,做好的菜就是最终的输出结果,中间的所有过程像摘菜、洗菜、切菜、做菜就是转换。
在开发者歼的时候,大部分时候会通过 ETL 工具去实现,比如常用的像 KETTLE、PENTAHO、IBM DATASTAGE、INFORNAICA、微软 SQL SERVER 里面的 SSIS 等等,在结合基本的 SQL 来实现整个 ETL 过程。
也有的是自己通过程序开发,然后控制一些数据处理脚本跑批,基本上就是程序加 SQL 实现。
哪种方式更好,也是需要看使用场景和开发人员对那种方式使用的更加得心应手。我看大部分软件程序开发人员出身的,碰到数据类项目会比较喜欢用程序控制跑批,这是程序思维的自然延续。纯 BI 开发人员大部分自然就选择成熟的 ETL 工具来开发,当然也有一上来就写程序脚本的,这类 BI 开发人员的师傅基本上是程序人员转过来的。
用程序的好处就是适配性强,可扩展性强,可以集成或拆解到到任何的程序处理过程中,有的时候使用程序开发效率更高。难就难在对维护人员有一定的技术要求,经验转移和可复制性不够。
用 ETL 工具的好处,第一是整个 ETL 的开发过程可视化了,特别是在数据处理流程的分层设计中可以很清晰的管理。第二是链接到不同数据源的时候,各种数据源、数据库的链接协议已经内置了,直接配置就可以,不需要再去写程序去实现。第三是各种转换控件基本上拖拉拽就可以使用,起到简化的代替一部分 SQL 的开发,不需要写代码去实现扮陪。第四是可以非常灵活的设计各种 ETL 调度规则,高度配置化,这个也不需要写代码实现。
所以在大多数通用的项目中,在项目上使用 ETL 标准组件开发会比较多一些。
ETL 从逻辑上一般可以分为两层,控制流和数据流,这也是很多 ETL 工具设计的理念,不同的 ETL 工具可能叫法不同。
控制流就是控制每一个数据流与数据流处理的先后流程,一个控制流可以包含多个数据流。比厅嫌蠢如在数据仓库开发过程中,第一层的处理是ODS层或者Staging 层的开发,第二层是DIMENSION维度层的开发,后面几层就是DW 事实层、DM数据集市层的开发。通过ETL的调度管理就可以让这几层串联起来形成一个完整的数据处理流程。
数据流就是具体的从源数据到目标数据表的数据转换过程,所以也有 ETL 工具把数据流叫做转换。在数据流的开发设计过程中主要就是三个环节,目标数据表的链接,这两个直接通过 ETL 控件配置就可以了。中间转换的环节,这个时候就可能有很多的选择了,调 SQL 语句、存储过程,或者还是使用 ETL 控件来实现。
有的项目上习惯使用 ETL 控件来实现数据流中的转换,也有的项目要求不使用标准的转换组件使用存储过程来调用。也有的是因为数据仓库本身这个数据库不支持存储过程就只能通过标准的SQL来实现。
我们通常讲的BI数据架构师其实指的就是ETL的架构设计,这是整个BI项目中非常核心的一层技术实现,数据处理、数据清洗和建模都是在ETL中去实现。一个好的ETL架构设计可以同时支撑上百个包就是控制流,每一个控制流下可能又有上百个数据流的处理过程。之前写过一篇技术文章,大家可以搜索下关键字 BIWORK ETL 应该在网上还能找到到这篇文章。这种框架设计不仅仅是ETL框架架构上的设计,还有很深的ETL项目管理和规范性控制器思想,包括后期的运维,基于BI的BI分析,ETL的性能调优都会在这些框架中得到体现。因为大的BI项目可能同时需要几十人来开发ETL,框架的顶层设计就很重要。
4. 调度工具(ETL+任务流)
kettle是一个ETL工具,ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)。
kettle中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。
所以他的重心是用于数据
oozie是一个工作流,Oozie工作流是放置在控制依赖DAG(有向无环图桐顷 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Rece作业、Pig作业等),其中指定了动作执行的顺序。
oozie工作流中是有数据流动的,但是重心是在于工作流的定义。
二者虽然都有相关功能及数据的流动,但是其实用途是不一样的。
查看帮助
列举出所有linux上的数据库
列举出所有Window上的数据库
查看数据库下的所有表
(1)确定mysql服务启动正常
查询控制端口和查询进程来确定,一下两种办法可以确认mysql是否在启动状态
办法1:查询端口
MySQL监控的TCP的3306端口,如果显示3306,证明MySQL服务在运行中
办法二:查询进程
可以看见mysql的进程
没有指定数据导入到哪个目录,默认是/user/root/表名
原因:
如果表中有主键,m的值可以设置大于1的值;如果没有主键只能将m值设置成为1;或者要将m值大于1,需要使用--split-by指定一个字段
设置了-m 1 说明只有一个maptask执行数据导入,默认是4个maptask执行导入操作,但是必须指定一个列来作为划分依据
导入数据到指定目录
在导入表数据到HDFS使用Sqoop导入工具,我们可以指定目标目录。使用参数 --target-dir来指定导出目的地,使用参数—delete-target-dir来判断导出目录是否存在,如果存在就删掉
查询导入
提示:must contain '$CONDITIONS' in WHERE clause。
where id <=1 匹配条件
$CONDITIONS:传递作用。
如果 query 后使用的是双引号,则 $CONDITIONS前必须加转义符,防止 shell 识别为自己的变量。
--query时不能使用--table一起使用
需要指定--target-dir路径
导入到hdfs指定目录并指茄运定局纳陆要求
数据导出储存方式(数据存储文件格式---( textfil parquet)--as-textfileImports data as plain text (default)--as-parquetfile Imports data to Parquet Files)
导入表数据子集到HDFS
sqoop导入blob数据到hive
对于CLOB,如xml文本,sqoop可以迁移到Hive表,对应字段存储为字符类型。
对于BLOB,如jpg图片,sqoop无法直接迁移到Hive表,只能先迁移到HDFS路径,然后再使用Hive命令加载到Hive表。迁移到HDFS后BLOB字段存储为16进制形式。
2.1.3导入关系表到Hive
第一步:导入需要的jar包
将我们mysql表当中的数据直接导入到hive表中的话,我们需要将hive的一个叫做hive-exec-1.1.0-cdh5.14.0.jar的jar包拷贝到sqoop的lib目录下
第二步:开始导入
导入关系表到hive并自动创建hive表
们也可以通过命令来将我们的mysql的表直接导入到hive表当中去
通过这个命令,我们可以直接将我们mysql表当中的数据以及表结构一起倒入到hive当中去
--incremental 增量模式。
append id 是获取一个某一列的某个值。
lastmodified “2016-12-15 15:47:35” 获取某个时间后修改的所有数据
-append 附加模式
-merge-key id 合并模式
--check-column 用来指定一些列,可以去指定多个列;通常的是指定主键id
--last -value 从哪个值开始增量
==注意:增量导入的时候,一定不能加参数--delete-target-dir 否则会报错==
第一种增量导入方式(不常用)
1.Append方式
使用场景:有个订单表,里面每个订单有一个唯一标识的自增列id,在关系型数据库中以主键的形式存在。之前已经将id在0-1000之间的编号的订单导入到HDFS 中;如果在产生新的订单,此时我们只需指定incremental参数为append,--last-value参数为1000即可,表示只从id大于1000后开始导入。
(1)创建一个MySQL表
(2)创建一个hive表(表结构与mysql一致)
注意:
append 模式不支持写入到hive表中
2.lastModify方式
此方式要求原有表有time字段,它能指定一个时间戳,让sqoop把该时间戳之后的数据导入到HDFS;因为后续订单可能状体会变化,变化后time字段时间戳也会变化,此时sqoop依然会将相同状态更改后的订单导入HDFS,当然我们可以只当merge-key参数为order-id,表示将后续新的记录和原有记录合并。
# 将时间列大于等于阈值的数据增量导入HDFS
使用 lastmodified 方式导入数据,要指定增量数据是要 --append(追加)还是要 --merge-key(合并)last-value 指定的值是会包含于增量导入的数据中。
第二种增量导入方式(推荐)
==通过where条件选取数据更加精准==
2.1.5从RDBMS到HBase
会报错
原因:sqoop1.4.6 只支持 HBase1.0.1 之前的版本的自动创建 HBase 表的功能。
解决方案:手动创建 HBase 表
导出前,目标表必须存在与目标数据库中
默认操作是将文件中的数据使用insert语句插入到表中
数据是在HDFS当中的如下目录/sqoop/emp,数据内容如下
第一步:创建MySQL表
第二步:执行导出命令
通过export来实现数据的导出,将hdfs的数据导出到mysql当中去
全量导出
增量导出
更新导出
总结:
参数介绍
--update-key 后面也可以接多个关键字列名,可以使用逗号隔开,Sqoop将会匹配多个关键字后再执行更新操作。
--export-dir 参数配合--table或者--call参数使用,指定了HDFS上需要将数据导入到MySQL中的文件集目录。
--update-mode updateonly和allowinsert。 默认模式为updateonly,如果指定--update-mode模式为allowinsert,可以将目标数据库中原来不存在的数据也导入到数据库表中。即将存在的数据更新,不存在数据插入。
组合测试及说明
1、当指定update-key,且关系型数据库表存在主键时:
A、allowinsert模式时,为更新目标数据库表存的内容,并且原来不存在的数据也导入到数据库表;
B、updateonly模式时,为更新目标数据库表存的内容,并且原来不存在的数据也不导入到数据库表;
2、当指定update-key,且关系型数据库表不存在主键时:
A、allowinsert模式时,为全部数据追加导入到数据库表;
B、updateonly模式时,为更新目标数据库表存的内容,并且原来不存在的数据也不导入到数据库表;
3、当不指定update-key,且关系型数据库表存在主键时:
A、allowinsert模式时,报主键冲突,数据无变化;
B、updateonly模式时,报主键冲突,数据无变化;
4、当不指定update-key,且关系型数据库表不存在主键时:
A、allowinsert模式时,为全部数据追加导入到数据库表;
B、updateonly模式时,为全部数据追加导入到数据库表;
实际案例:
(1)mysql批量导入hive
使用shell脚本:
笔者目前用sqoop把mysql数据导入到Hive中,最后实现命令行导入,sqoop版本1.4.7,实现如下
最后需要把这个导入搞成job,每天定时去跑,实现数据的自动化增量导入,sqoop支持job的管理,可以把导入创建成job重复去跑,并且它会在metastore中记录增值,每次执行增量导入之前去查询
创建job命令如下
创建完job就可以去执行它了
sqoop job --exec users
可以把该指令设为Linux定时任务,或者用Azkaban定时去执行它
hive导出到MySQL时,date类型数据发生变化?
问题原因:时区设置问题,date -R查看服务器时间,show VARIABLES LIKE "%time_zone"查看Mysql时间,system并不表示中国的标准时间,要将时间设置为东八区
(1):对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。
(2):功能:
两者均可以调度maprece,pig,java,脚本工作流任务;
两者均可以定时执行工作流任务;
(3):工作流定义:
Azkaban使用Properties文件定义工作流;
Oozie使用XML文件定义工作流;
(4):工作流传参:
Azkaban支持直接传参,例如${input};
Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)};
(5):定时执行:
Azkaban的定时执行任务是基于时间的;
Oozie的定时执行任务基于时间和输入数据;
(6):资源管理:
Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作;
Oozie暂无严格的权限控制;
(7):工作流执行:
Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点);
Oozie作为工作流服务器运行,支持多用户和多工作流;
(8):工作流管理:
Azkaban支持浏览器以及ajax方式操作工作流;
Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流;
浏览器页面访问
http://node03:8081/
使用Oozie时通常整合hue,用户数据仓库调度
就是刚才选择的脚本
脚本里需要的参数,尽量设置为动态自动获取,如 ${date}
第一步的参数是所有文件和当天日期,后面的只需要日期,最后一步是导出所有结果,相应填入
添加文件和设置相应参数
运行后会有状态提示页面,可以看到任务进度
点击调度任务的页面情况
修改定时任务名和描述
添加需要定时调度的任务
sm-workflow的参数都是写死的,没有设置动态,这里的下拉列表就不会有可选项。
设置参数
将sm-workflow的日期修改为 ${do_date},保存
进入定时计划sm-dw中,会看到有参数 do_date
填入相应参数,前一天日期
Oozie常用系统常量
当然,也可以通过这样将参数传入workflow任务中,代码或者shell中需要的参数。
如,修改sm-workflow 中的 sqoop_import.sh,添加一个参数 ${num}。
编辑文件(需要登陆Hue的用户有对HDFS操作的权限),修改shell中的一个值为参数,保存。
在workflow中,编辑添加参数 ${num} ,或者num=${num} 保存。
进入schele中,可以看到添加的参数,编辑输入相应参数即可。
Bundle统一管理所有定时调度,阶段划分:Bundle > Schele > workflow