A. hiveUDF函数能替换存储过程吗
直接新建一个Job,里面些匿名PLsql程序块即可: BEGIN INSERT INTO B SELECT A.ID, A.ANAME, A,ATYPE FROM A WHERE NOT EXISTS( SELECT 1 FROM B WHERE B.BID = A.AID AND B.BNAME=A.ANAME); END;
B. 大数据培训学校学哪些内容
首先我们要了解Java语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。
大数据
大数据
Java :只要了解一些基础即可,做大数据不需要很深的Java 技术,学java SE 就相当于有学习大数据基础。
Linux:因为大数据相关软件都是在Linux上运行的,所以Linux要学习的扎实一些,学好Linux对你快速掌握大数据相关技术会有很大的帮助,能让你更好的理解hadoop、hive、hbase、spark等大数据软件的运行环境和网络环境配置,能少踩很多坑,学会shell就能看懂脚本这样能更容易理解和配置大数据集群。还能让你对以后新出的大数据技术学习起来更快。
Hadoop:这是现在流行的大数据处理平台几乎已经成为大数据的代名词,所以这个是必学的。Hadoop里面包括几个组件HDFS、MapRece和YARN,HDFS是存储数据的地方就像我们电脑的硬盘一样文件都存储在这个上面,MapRece是对数据进行处理计算的,它有个特点就是不管多大的数据只要给它时间它就能把数据跑完,但是时间可能不是很快所以它叫数据的批处理。
Zookeeper:这是个万金油,安装Hadoop的HA的时候就会用到它,以后的Hbase也会用到它。它一般用来存放一些相互协作的信息,这些信息比较小一般不会超过1M,都是使用它的软件对它有依赖,对于我们个人来讲只需要把它安装正确,让它正常的run起来就可以了。
Mysql:我们学习完大数据的处理了,接下来学习学习小数据的处理工具mysql数据库,因为一会装hive的时候要用到,mysql需要掌握到什么层度那?你能在Linux上把它安装好,运行起来,会配置简单的权限,修改root的密码,创建数据库。这里主要的是学习SQL的语法,因为hive的语法和这个非常相似。
Sqoop:这个是用于把Mysql里的数据导入到Hadoop里的。当然你也可以不用这个,直接把Mysql数据表导出成文件再放到HDFS上也是一样的,当然生产环境中使用要注意Mysql的压力。
Hive:这个东西对于会SQL语法的来说就是神器,它能让你处理大数据变的很简单,不会再费劲的编写MapRece程序。有的人说Pig那?它和Pig差不多掌握一个就可以了。
Oozie:既然学会Hive了,我相信你一定需要这个东西,它可以帮你管理你的Hive或者MapRece、Spark脚本,还能检查你的程序是否执行正确,出错了给你发报警并能帮你重试程序,最重要的是还能帮你配置任务的依赖关系。我相信你一定会喜欢上它的,不然你看着那一大堆脚本,和密密麻麻的crond是不是有种想屎的感觉。
Hbase:这是Hadoop生态体系中的NOSQL数据库,他的数据是按照key和value的形式存储的并且key是唯一的,所以它能用来做数据的排重,它与MYSQL相比能存储的数据量大很多。所以他常被用于大数据处理完成之后的存储目的地。
Kafka:这是个比较好用的队列工具,队列是干吗的?排队买票你知道不?数据多了同样也需要排队处理,这样与你协作的其它同学不会叫起来,你干吗给我这么多的数据(比如好几百G的文件)我怎么处理得过来,你别怪他因为他不是搞大数据的,你可以跟他讲我把数据放在队列里你使用的时候一个个拿,这样他就不在抱怨了马上灰流流的去优化他的程序去了,因为处理不过来就是他的事情。而不是你给的问题。当然我们也可以利用这个工具来做线上实时数据的入库或入HDFS,这时你可以与一个叫Flume的工具配合使用,它是专门用来提供对数据进行简单处理,并写到各种数据接受方(比如Kafka)的。
Spark:它是用来弥补基于MapRece处理数据速度上的缺点,它的特点是把数据装载到内存中计算而不是去读慢的要死进化还特别慢的硬盘。特别适合做迭代运算,所以算法流们特别稀饭它。它是用scala编写的。Java语言或者Scala都可以操作它,因为它们都是用JVM的。
C. hivewithas不同的作业相同的临时表会有影响吗
会。
在同一个会话不同作用域的时候(例如:大存储过程内含小存储过程的场景),使用同一个临时表名,会引起错乱。
只要把这个@operNum=#Tab.oper_num的字段获取的值注释掉,就可以正常运行,不然运行的时候就一直'提示oper_num列无效',就很纳闷,这个字段是表中存在的,怎么会无效呢。
反复查找原因,发现原来是那个功能使用的存储过程里面有一段执行更新这个表的代码,而刚好在这个更新语句前面有个同样名的#Tab临时表,于是,在执行存储过程事务进程的时候,触发器在事务内就直接使用前面产生的临时表进行赋值操作,而导致列名不匹配,无效。
D. hive底层依赖hadoop中的哪些框架
1. 什么是hive
•Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
•本质是将HQL转换为MapRece程序
2. 为什么使用hive
•操作接口采用类SQL语法,提供快速开发的能力
•避免了去写MapRece,减少开发人员的学习成本
•扩展功能很方便
3. hive 特点
•可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务
•延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
•容错
良好的容错性,节点出现问题SQL仍可完成执行
4. hive 与hadoop 关系
发出HQL —> hive 转换成maprece—> maprece—> 对hdfs进行操作
5. hive 与传统数据对比
Hive
RDBMS
查询语言
HQL
SQL
数据存储
HDFS
Raw Device or Local FS
执行
MapRece
Excutor
执行延迟
高
低
处理数据规模
大
小
索引
0.8版本后加入位图索引
有复杂的索引
6. hive 的未来
•增加更多类似传统数据库的功能,如存储过程
•提高转换成的MapRece性能
•拥有真正的数据仓库的能力
•UI部分加强
Hive是基于Hadoop平台的,它提供了类似SQL一样的查询语言HQL。有了Hive,如果使用过SQL语言,并且不理解Hadoop MapRece运行原理,也就无法通过编程来实现MR,但是你仍然可以很容易地编写出特定查询分析的HQL语句,通过使用类似SQL的语法,将HQL查询语句提交Hive系统执行查询分析,最终Hive会帮你转换成底层Hadoop能够理解的MR Job。
对于最基本的HQL查询我们不再累述,这里主要说明Hive中进行统计分析时使用到的JOIN操作。在说明Hive JOIN之前,我们先简单说明一下,Hadoop执行MR Job的基本过程(运行机制),能更好的帮助我们理解HQL转换到底层的MR Job后是如何执行的。我们重点说明MapRece执行过程中,从Map端到Rece端这个过程(Shuffle)的执行情况,如图所示(来自《Hadoop: The Definitive Guide》)
基本执行过程,描述如下:
- 一个InputSplit输入到map,会运行我们实现的Mapper的处理逻辑,对数据进行映射操作。
- map输出时,会首先将输出中间结果写入到map自带的buffer中(buffer默认大小为100M,可以通过io.sort.mb配置)。
- map自带的buffer使用容量达到一定门限(默认0.80或80%,可以通过io.sort.spill.percent配置),一个后台线程会准备将buffer中的数据写入到磁盘。
- 这个后台线程在将buffer中数据写入磁盘之前,会首先将buffer中的数据进行partition(分区,partition数为Recer的个数),对于每个的数据会基于Key进行一个in-memory排序。
- 排序后,会检查是否配置了Combiner,如果配置了则直接作用到已排序的每个partition的数据上,对map输出进行化简压缩(这样写入磁盘的数据量就会减少,降低I/O操作开销)。
- 现在可以将经过处理的buffer中的数据写入磁盘,生成一个文件(每次buffer容量达到设置的门限,都会对应着一个写入到磁盘的文件)。
- map任务结束之前,会对输出的多个文件进行合并操作,合并成一个文件(若map输出至少3个文件,在多个文件合并后写入之前,如果配置了Combiner,则会运行来化简压缩输出的数据,文件个数可以通过min.num.splits.for.combine配置;如果指定了压缩map输出,这里会根据配置对数据进行压缩写入磁盘),这个文件仍然保持partition和排序的状态。
- rece阶段,每个rece任务开始从多个map上拷贝属于自己partition(map阶段已经做好partition,而且每个rece任务知道应该拷贝哪个partition;拷贝过程是在不同节点之间,Recer上拷贝线程基于HTTP来通过网络传输数据)。
- 每个rece任务拷贝的map任务结果的指定partition,也是先将数据放入到自带的一个buffer中(buffer默认大小为Heap内存的70%,可以通过mapred.job.shuffle.input.buffer.percent配置),如果配置了map结果进行压缩,则这时要先将数据解压缩后放入buffer中。
- rece自带的buffer使用容量达到一定门限(默认0.66或66%,可以通过mapred.job.shuffle.merge.percent配置),或者buffer中存放的map的输出的数量达到一定门限(默认1000,可以通过mapred.inmem.merge.threshold配置),buffer中的数据将会被写入到磁盘中。
- 在将buffer中多个map输出合并写入磁盘之前,如果设置了Combiner,则会化简压缩合并的map输出。
- 当属于该recer的map输出全部拷贝完成,则会在recer上生成多个文件,这时开始执行合并操作,并保持每个map输出数据中Key的有序性,将多个文件合并成一个文件(在rece端可能存在buffer和磁盘上都有数据的情况,这样在buffer中的数据可以减少一定量的I/O写入操作开销)。
- 最后,执行rece阶段,运行我们实现的Recer中化简逻辑,最终将结果直接输出到HDFS中(因为Recer运行在DataNode上,输出结果的第一个replica直接在存储在本地节点上)。
通过上面的描述我们看到,在MR执行过程中,存在Shuffle过程的MR需要在网络中的节点之间(Mapper节点和Recer节点)拷贝数据,如果传输的数据量很大会造成一定的网络开销。而且,Map端和Rece端都会通过一个特定的buffer来在内存中临时缓存数据,如果无法根据实际应用场景中数据的规模来使用Hive,尤其是执行表的JOIN操作,有可能很浪费资源,降低了系统处理任务的效率,还可能因为内存不足造成OOME问题,导致计算任务失败。
下面,我们说明Hive中的JOIN操作,针对不同的JOIN方式,应该如何来实现和优化:
生成一个MR Job
多表连接,如果多个表中每个表都使用同一个列进行连接(出现在JOIN子句中),则只会生成一个MR Job,例如:
1 SELECTa.val, b.val, c.valFROMaJOINbON(a.key= b.key1)JOINcON(c.key= b.key1)
三个表a、b、c都分别使用了同一个字段进行连接,亦即同一个字段同时出现在两个JOIN子句中,从而只生成一个MR Job。
生成多个MR Job
多表连接,如果多表中,其中存在一个表使用了至少2个字段进行连接(同一个表的至少2个列出现在JOIN子句中),则会至少生成2个MR Job,例如:
1 SELECTa.val, b.val, c.valFROMaJOINbON(a.key= b.key1)JOINcON(c.key= b.key2)
三个表基于2个字段进行连接,这两个字段b.key1和b.key2同时出现在b表中。连接的过程是这样的:首先a和b表基于a.key和b.key1进行连接,对应着第一个MR Job;表a和b连接的结果,再和c进行连接,对应着第二个MR Job。
E. hive怎么从数据库中提取数据
可以使用Sqoop、DataX、或者Hive存储过程来完成。搜索"lxw的大数据田地",里面有很多关于Hive的文章,肯定能找到你想要的。
F. ORACLE存储过程怎么迁移到HIVE
直接新建一个Job,里面些匿名PLSQL程序块即可: BEGIN INSERT INTO B SELECT A.ID, A.ANAME, A,ATYPE FROM A WHERE NOT EXISTS( SELECT 1 FROM B WHERE B.BID = A.AID AND B.BNAME=A.ANAME); END;
G. hive中怎么在当下数据库操作另一个数据库数据
可以使用Sqoop、DataX、或者Hive存储过程来完成。搜索"lxw的大数据田地",里面有很多关于Hive的文章,肯定能找到你想要的。
H. 好用的数据分析软件有哪些
1、思迈特软件Smartbi专注于商业智能(BI)、数据分析软件产品与服务。2、数据处理工具:Excel。数据分析师,在有些公司也会有数据产品经理、数据挖掘工程师等等。他们最初级最主要的工具就是Excel。有些公司也会涉及到像Visio,Xmind、PPT等设计图标数据分析方面的高级技巧。
3、数据库:MySQL。Excel如果能够玩的很转,能胜任一部分数据量不是很大的公司。但是基于Excel处理数据能力有限,如果想胜任中型的互联网公司中数据分析岗位还是比较困难。因此需要学会数据库技术,一般Mysql。
4、数据可视化:Tableau & 思迈特软件。如果说前面2条是数据处理的技术,那么在如今“颜值为王”的现在,如何将数据展现得更好看,让别人更愿意看,这也是一个技术活。
5、大数据分析:SPSS & Python& HiveSQL 等。如果说Excel是“轻数据处理工具”,Mysql是“中型数据处理工具”那么,大数据分析,涉及的面就非常广泛,技术点涉及的也比较多。这也就是为什么目前互联网公司年薪百万重金难求大数据分析师的原因。
数据分析软件靠不靠谱,来试试Smartbi,思迈特软件Smartbi经过多年持续自主研发,凝聚大量商业智能最佳实践经验,整合了各行业的数据分析和决策支持的功能需求。满足最终用户在企业级报表、数据可视化分析、自助探索分析、数据挖掘建模、AI智能分析等大数据分析需求。
思迈特软件Smartbi个人用户全功能模块长期免费试用
马上免费体验:Smartbi一站式大数据分析平台
I. 如何用sql来写动态sql,本文主要是hiveql
动态SQL语句在编译时,并不知道SQL语句的内容,SQL语句的内容“不确定”,只有在运行时,才建立、解析并执行SQL语句。利用动态SQL,在存储过程中,可以动态创建表、视图、触发器等。
动态SQL主要用在以下两种场景:
编译时,无法确定SQL语句的内容
静态SQL不支持的SQL语句,就比如上面代码中的create
我们可以看到,静态SQL在编译时就已经提前检查了SQL正确性,以及涉及的数据库对象和对应的权限关系,而动态SQL则需要在运行的时候才能判断,所以,静态SQL的效率高于动态SQL。说了这么多概念的东西,我们现在就来实际看看如何编写动态SQL,以及如何运行动态SQL。
J. etl工程师没基础能学吗
技术方面:需要学习使用数据源、目标端工具的基本使用(如 oracle MySQL hive等);需要学习etl工具的安装配置常用错误解决(如 kettle DataStage infa sqoop datax等)理论方面:懂得数仓分层架构,维度建模等。从ETL的字面来看,它主要包含三大阶段,分别是数据抽取、数据转换、数据加载。
1.数据抽取这个阶段的主要目标是汇总多种数据源,为下一步的转换做准备。2.数据转换这个阶段是ETL的核心环节,也是最复杂的环节。它的主要目标是将抽取到的各种数据,进行数据的清洗、格式的转换、缺失值填补、剔除重复等操作,最终得到一份格式统一、高度结构化、数据质量高、兼容性好的数据,为后续的分析决策提供可靠的数据支持。3.数据加载这个阶段的主要目标是把数据加载至目的地,比如数据仓库中。通常的做法是,将处理好的数据写成特定格式(如parquet、csv等)的文件,然后再把文件挂载到指定的表分区上。也有些表的数据量很小,不会采用分区表,而是直接生成最终的数据表。了解了ETL这部分的工作主要做什么,接下来再来说作为ETL工程师需要具备哪些技能,这些也就是需要学习的重点——1、精通SQL语言,具备存储过程开发能力,能熟练进行SQL查询优化;2、熟悉Hive数据仓库设计,了解数据仓库模型及思想、维度建模思想,了解数据仓库;3、熟悉Hadoop、Spark、Flink、Kafka等相关技术;4、熟练Python、Java中至少一种语言;5、熟悉Mysql、Nosql等常见数据库。