搜档网
当前位置:搜档网 › hive调优参数

hive调优参数

hive调优参数
hive调优参数

第一部分:Hadoop 计算框架的特性

什么是数据倾斜

由于数据的不均衡原因,导致数据分布不均匀,造成数据大量的集中到一点,造成数据热点。

Hadoop框架的特性

1)不怕数据大,怕数据倾斜

2)jobs数比较多的作业运行效率相对比较低,比如即使有几百行的表,如果多次关联多次

汇总,产生十几个jobs,耗时很长。原因是map reduce作业初始化的时间是比较长的3)sum,count,max,min等UDAF,不怕数据倾斜问题,hadoop在map端的汇总合并优化,使

数据倾斜不成问题

4)count(distinct ),在数据量大的情况下,效率较低,因为count(distinct)是按group by 字段

分组,按distinct字段排序,一般这种分布方式是很倾斜的。

第二部分:优化的常用手段

优化的常用手段

1)解决数据倾斜问题

2)减少job数

3)设置合理的map reduce的task数,能有效提升性能。

4)了解数据分布,自己动手解决数据倾斜问题是个不错的选择

5)数据量较大的情况下,慎用count(distinct)。

6)对小文件进行合并,是行至有效的提高调度效率的方法。

7)优化时把握整体,单个作业最优不如整体最优。

第三部分:Hive的数据类型方面的优化

优化原则

按照一定规则分区(例如根据日期)。通过分区,查询的时候指定分区,会大大减少在无用数据上的扫描, 同时也非常方便数据清理。

合理的设置Buckets。在一些大数据join的情况下,map join有时候会内存不够。如果使用Bucket Map Join的话,可以只把其中的一个bucket放到内存中,内存中原来放不下的内存表就变得可以放下。这需要使用buckets的键进行join的条件连结,并且需要如下设置set hive.optimize.bucketmapjoin = true

第四部分:Hive的操作方面的优化

全排序

Hive的排序关键字是SORT BY,它有意区别于传统数据库的ORDER BY也是为了强调两者的区别–SORT BY只能在单机范围内排序。

怎样做笛卡尔积

当Hive设定为严格模式(hive.mapred.mode=strict)时,不允许在HQL语句中出现笛卡尔积,MapJoin是的解决办法。

MapJoin,顾名思义,会在Map端完成Join操作。这需要将Join操作的一个或多个表完全读入内存MapJoin的用法是在查询/子查询的SELECT关键字后面添加/*+ MAPJOIN(tablelist) */提示优化器转化为MapJoin(目前Hive的优化器不能自动优化MapJoin)其中tablelist可以是一个表,或以逗号连接的表的列表。tablelist中的表将会读入内存,应该将小表写在这里在大表和小表做笛卡尔积时,规避笛卡尔积的方法是,给Join 添加一个Join key,原理很简单:将小表扩充一列join key,并将小表的条目复制数倍,join key各不相同;将大表扩充一列join key为随机数。

控制Hive的Map数

通常情况下,作业会通过input的目录产生一个或者多个map任务。

主要的决定因素有:input的文件总个数,input的文件大小,集群设置的文件块大小(目前为128M, 可在hive中通过set dfs.block.size;命令查看到,该参数不能自定义修改)。

是不是map数越多越好?

答案是否定的。如果一个任务有很多小文件(远远小于块大小128m),则每个小文件也会被当做一个块,用一个map任务来完成,而一个map任务启动和初始化的时间远远大于逻辑处理的时间,就会造成很大的资源浪费。

而且,同时可执行的map数是受限的是不是保证每个map处理接近128m的文件块,就高枕无忧了?

答案也是不一定。比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。

针对上面的问题3和4,我们需要采取两种方式来解决:即减少map数和增加map数;是不是保证每个map处理接近128m的文件块,就高枕无忧了?

答案也是不一定。比如有一个127m的文件,正常会用一个map去完成,但这个文件只有一个或者两个小字段,却有几千万的记录,如果map处理的逻辑比较复杂,用一个map任务去做,肯定也比较耗时。针对上面的问题3和4,我们需要采取两种方式来解决:即减少map数和增加map数;

举例:

a) 假设input目录下有1个文件a,大小为780M,那么hadoop会将该文件a分隔成7个块(6个128m的块和1个12m的块),从而产生7个map数。

b) 假设input目录下有3个文件a,b,c,大小分别为10m,20m,130m,那么hadoop会分隔成4个块(10m,20m,128m,2m),从而产生4个map数。即,如果文件大于块大小(128m),那么会拆分,如果小于块大小,则把该文件当成一个块。

怎样决定reducer个数

Hadoop MapReduce程序中,reducer个数的设定极大影响执行效率,不指定reducer个数的情况下,Hive会猜测确定一个reducer个数,基于以下两个设定:

参数1:hive.exec.reducers.bytes.per.reducer(默认为1G)

参数2 :hive.exec.reducers.max(默认为999)

计算reducer数的公式:N=min(参数2,总输入数据量/参数1)

依据Hadoop的经验,可以将参数2设定为0.95*(集群中TaskTracker个数)reduce个数并不是越多越好。同map一样,启动和初始化reduce也会消耗时间和资源;

另外,有多少个reduce,就会有多少个输出文件,如果生成了很多个小文件,那么如果这些小文件作为下一个任务的输入,则也会出现小文件过多的问题

什么情况下只有一个reduce很多时候你会发现任务中不管数据量多大,不管你有没有设置调整reduce个数的参数,任务中一直都只有一个reduce任务;

其实只有一个reduce任务的情况,除了数据量小于hive.exec.reducers.bytes.per.reducer参数值的情况外,还有以下原因:

a) 没有group by的汇总

b) 用了Order by

合并MapReduce 操作

Multi-group by是Hive的一个非常好的特性,它使得Hive中利用中间结果变得非常方便FROM log:

insert overwrite table test1 select log.id group by log.id

insert overwrite table test2 select https://www.sodocs.net/doc/f112121564.html, group by https://www.sodocs.net/doc/f112121564.html,

上述查询语句使用了Multi-group by特性连续group by了2次数据,使用不同的group by key。这一特性可以减少一次MapReduce操作。

Bucket 与Sampling

Bucket是指将数据以指定列的值为key进行hash,hash到指定数目的桶中。这样就可以支持高效采样了Sampling可以在全体数据上进行采样,这样效率自然就低,它还是要去访问所有数据。而如果一个表已经对某一列制作了bucket,就可以采样所有桶中指定序号的某个桶,这就减少了访问量。

如下例所示就是采样了test中32个桶中的第三个桶。

SELECT * FROM test 、、、TABLESAMPLE(BUCKET 3 OUT OF 32);

JOIN 原则

在使用写有Join 操作的查询语句时有一条原则:应该将条目少的表/子查询放在Join 操作符的左边,原因是在Join 操作的Reduce 阶段,位于Join 操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生OOM 错误的几率。

Map Join

Join 操作在Map 阶段完成,不再需要Reduce,前提条件是需要的数据在Map 的过程中可以访问到

例如:

INSERT OVERWRITE TABLE phone_traffic

SELECT /*+ MAPJOIN(phone_location) */ l.phone,p.location,l.traffic from phone_location p join log l on (p.phone=l.phone);

相关的参数为:

hive.join.emit.interval = 1000

How many rows in the right-most join operand Hive should buffer before emitting the join result.

hive.mapjoin.size.key = 10000

hive.mapjoin.cache.numrows = 10000

Group By

Map 端部分聚合,并不是所有的聚合操作都需要在Reduce 端完成,很多聚合操作都可以先在Map 端进行部分聚合,最后在Reduce 端得出最终结果基于Hash参数包括:hive.map.aggr = true // 是否在Map 端进行聚合,默认为True

hive.groupby.mapaggr.checkinterval = 100000 // 在Map 端进行聚合操作的条目数目有数据倾斜的时候进行负载均衡

hive.groupby.skewindata = false

当选项设定为true,生成的查询计划会有两个MR Job。第一个MR Job 中,Map 的输出结果集合会随机分布到Reduce 中,每个Reduce 做部分聚合操作,并输出结果,这样处理的结果是相同的Group By Key 有可能被分发到不同的Reduce 中,从而达到负载均衡的目的;第二个MR Job 再根据预处理的数据结果按照Group By Key 分布到Reduce 中(这个过程可以保证相同的Group By Key 被分布到同一个Reduce 中),最后完成最终的聚合操作。

合并小文件

文件数目过多,会给HDFS 带来压力,并且会影响处理效率,可以通过合并Map 和Reduce 的结果文件来消除这样的影响:

hive.merge.mapfiles = true // 是否和并Map 输出文件,默认为True

hive.merge.mapredfiles = false // 是否合并Reduce 输出文件,默认为False

hive.merge.size.per.task = 256*1000*1000 // 合并文件的大小

排序优化

Order by 实现全局排序,一个reduce实现,效率低

Sort by 实现部分有序,单个reduce输出的结果是有序的,效率高,通常和DISTRIBUTE BY 关键字一起使用(DISTRIBUTE BY关键字可以指定map 到 reduce端的分发key)CLUSTER BY col1 等价于DISTRIBUTE BY col1 SORT BY col1

使用分区

Hive中的每个分区都对应hdfs上的一个目录,分区列也不是表中的一个实际的字段,而是一个或者多个伪列,在表的数据文件中实际上并不保存分区列的信息与数据。Partition关键字中排在前面的为主分区(只有一个),后面的为副分区

静态分区:静态分区在加载数据和使用时都需要在sql语句中指定

案例:(stat_date='20120625',province='hunan')

动态分区:使用动态分区需要设置hive.exec.dynamic.partition参数值为true,默认值为false,在默认情况下,hive会假设主分区时静态分区,副分区使用动态分区;如果想都使用动态分区,需要设置set hive.exec.dynamic.partition.mode=nostrick,默认为strick 案例:(stat_date='20120625',province)

Distinct 使用

Hive支持在group by时对同一列进行多次distinct操作,却不支持在同一个语句中对多个列进行distinct操作。

Hql使用自定义的mapred脚本

注意事项:在使用自定义的mapred脚本时,关键字MAP REDUCE 是语句SELECT TRANSFORM ( ... )的语法转换,并不意味着使用MAP关键字时会强制产生一个新的map过程,使用REDUCE关键字时会产生一个red过程。

自定义的mapred脚本可以是hql语句完成更为复杂的功能,但是性能比hql语句差了一些,应该尽量避免使用,如有可能,使用UDTF函数来替换自定义的mapred脚本

回到顶部。

UDTF

UDTF将单一输入行转化为多个输出行,并且在使用UDTF时,select语句中不能包含其他的列,UDTF不支持嵌套,也不支持group by 、sort by等语句。如果想避免上述限制,需要使用lateral view语法,案例:

select a.timestamp, get_json_object(a.appevents, '$.eventid'), get_json_object(a.appenvets, '$.even tname') from log a;

select a.timestamp, b.*

from log a lateral view json_tuple(a.appevent, 'eventid', 'eventname') b as f1, f2;

其中,get_json_object为UDF函数,json_tuple为UDTF函数。

UDTF函数在某些应用场景下可以大大提高hql语句的性能,如需要多次解析json或者xml 数据的应用场景。

聚合函数count和sum

Count和sum函数可能是在hql语句中使用的最为频繁的两个聚合函数了,但是在hive中count函数在计算distinct value时支持加入条件过滤。

第五部分JVM重用、并行执行、调整reducer个数的用处

JVM重用

JVM重用是hadoop调优参数的内容,对hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或者task特别多的场景,这类场景大多数执行时间都很短。hadoop默认配置是使用派生JVM来执行map和reduce任务的,这是jvm的启动过程可能会造成相当大的开销,尤其是执行的job包含有成千上万个task任务的情况。

JVM重用可以使得JVM实例在同一个JOB中重新使用N次,N的值可以在Hadoop的mapre-site.xml文件中进行设置

mapred.job.reuse.jvm.num.tasks

也可在hive的执行设置:

set mapred.job.reuse.jvm.num.tasks=10;

JVM的一个缺点是,开启JVM重用将会一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡“的job中有几个reduce task 执行的时间要比其他reduce task消耗的时间多得多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。

并行执行

并行执行,意思是同步执行hive的多个阶段,hive在执行过程,将一个查询转化成一个或者多个阶段。某个特定的job可能包含众多的阶段,而这些阶段可能并非完全相互依赖的,也就是说可以并行执行的,这样可能使得整个job的执行时间缩短

hive执行开启:set hive.exec.parallel=true

调整reducer个数

设置hive.exec.reducers.bytes.per.reducer(默认为1GB),受hive.exec.reducers.max(默认为999)影响:

mapred.reduce.tasks = min ( 参数2,总输入数据量/参数1 )

三个优化的场景

采用一个数据源多份处理的SQL来执行:

FROM TABLE1

INSERT OVERWRITE LOCAL DIRECTORY '/data/data_table/data_table1.txt' SELECT 20140303, col1, col2, 2160701, COUNT(DISTINCT col) WHERE col3 <= 20140303 AND col3 >= 20140201 GROUP BY col1, col2

INSERT OVERWRITE LOCAL DIRECTORY '/data/data_table/data_table2.txt' SELECT 20140302, col1, col2, 2160701, COUNT(DISTINCT col) WHERE col3 <= 20140302 AND col3 >= 20140131 GROUP BY col1, col2

INSERT OVERWRITE LOCAL DIRECTORY '/data/data_table/data_table3.txt' SELECT 20140301, col1, col2, 2160701, COUNT(DISTINCT col) WHERE col3 <= 20140301 AND col3 >= 20140130 GROUP BY col1, col2

INSERT OVERWRITE LOCAL DIRECTORY '/data/data_table/data_table4.txt' SELECT 20140228, col1, col2, 2160701, COUNT(DISTINCT col) WHERE col3 <= 20140228 AND col3 >= 20140129 GROUP BY col1, col2

INSERT OVERWRITE LOCAL DIRECTORY '/data/data_table/data_table5.txt' SELECT 20140227, col1, col2, 2160701, COUNT(DISTINCT col) WHERE col3 <= 20140227 AND col3 >= 20140128 GROUP BY col1, col2

INSERT OVERWRITE LOCAL DIRECTORY '/data/data_table/data_table6.txt' SELECT 20140226, col1, col2, 2160701, COUNT(DISTINCT col) WHERE col3 <= 20140226 AND col3 >= 20140127 GROUP BY col1, col2

………………省略

没设置前的,执行时间是450s

设置参数:

set mapred.job.reuse.jvm.num.tasks=20

set hive.exec.reducers.bytes.per.reducer=150000000

set hive.exec.parallel=true;

执行时间缩短到273s ,合理利用一个参数调整,可以达到部分调优

第六部分Hive的阶段进展

Hive的基础架构

基本组成

1)用户接口主要有三个:CLI,Client 和WUI。其中最常用的是CLI,Cli启动的时

候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。

在启动Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive

Server。WUI是通过浏览器访问Hive。

2)Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,

表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

3)解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化

以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce

调用执行。

4)Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的

查询,比如select * from tbl不会生成MapRedcue任务)。

5)Hive将元数据存储在RDBMS中

1.各组件的基本功能

1)用户接口主要有三个:CLI,JDBC/ODBC和WebUI

2)CLI,即Shell命令行

3)JDBC/ODBC 是Hive 的JA V A,与使用传统数据库JDBC的方式类似

4)WebGUI是通过浏览器访问Hive

5)Hive 将元数据存储在数据库中,目前只支持mysql、derby,下一版本会支持更多

的数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是

否为外部表等),表的数据所在目录等

6)解释器、编译器、优化器完成HQL 查询语句从词法分析、语法分析、编译、优化

以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce

调用执行

7)Hive 的数据存储在HDFS 中,大部分的查询由MapReduce 完成(包含* 的查

询,比如select * from table 不会生成MapRedcue 任务)。

2.Metastore

1)Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信

2)Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似

系统的一个特征

3)Metastore包含如下的部分:

Database 是表(table)的名字空间。默认的数据库(database)名为‘default’。

Table 表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息。

Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。

这一特征将被用来支持Hive中的模式演变(schema evolution)。

https://www.sodocs.net/doc/f112121564.html,piler

1)Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML

或查询语句

2)编译器将字符串转化为策略(plan)

3)策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操

作只包含LOAD语句

4)对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图

(directedacyclic graph,DAG)组成

Hive的数据元数据

(表相关信息)存在关系数据库中。

为什么要存在RDBMS中,获取元数据信息需要很低的延时,这在hdfs上是无法满足。分析HiveSQL之后生成的MapReduce任务在运行的时候如果需要访问元数据信息时,它并不会直接去访问MetaStore。那么,他们是如何获得需要的元数据信息的呢?原来,当将生

成的物理计划序列化到plan.xml的时候,已经将相应的元数据信息保存到了plan.xml中。而plan.xml文件之后会被放入Hadoop的分布式缓存中,所以MapReduce任务就可以从分布式缓存中获得需要的元数据信息。

数据存在hdfs中。

Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive 中的表,只需要在创建表的时候告诉Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。

第一,不加外部链接创建的表,数据存储在hive-site.xml配置的${hive.metastore.warehouse.dir} 指定的数据仓库的目录下;数据需要load。

例子:

hive.metastore.warehouse.dir

/user/hive/warehouse

location of default database for the warehouse

第二,加外部链接穿件的表,数据存在创建表时指定的hdfs路径下。

数据的存储关系Partition 对应于数据库中的Partition 列的密集索引,但是Hive 中Partition 的组织方式和数据库中的很不相同。在Hive 中,表中的一个Partition 对应于表下的一个目录,所有的Partition 的数据都存储在对应的目录中。例如:pvs 表中包含ds 和city 两个Partition,则对应于ds = 20090801, ctry = US 的HDFS 子目录为:/wh/pvs/ds=20090801/ctry=US;对应于ds = 20090801, ctry = CA 的HDFS 子目录为;/wh/pvs/ds=20090801/ctry=CA。

Buckets 对指定列计算hash,根据hash 值切分数据,目的是为了并行,每一个Bucket 对应一个文件。将user 列分散至32 个bucket,首先对user 列的值计算hash,对应hash 值为0 的HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash 值为20 的HDFS 目录为:/wh/pvs/ds=20090801/ctry=US/part-00020这些信息属于元数据信息,可以去mysql 中查看。

Hive的执行原理

HiveSQL的数据类型

Primitive types:

TINYINT

SMALLINT

INT

BIGINT

BOOLEAN

FLOAT

DOUBLE

STRING

BINARY(Note: Only available starting with Hive 0.8.0)

TIMESTAMP(Note: Only available starting with Hive 0.8.0)

Complex types:

arrays: ARRAY

maps: MAP

structs: STRUCT union: UNIONTYPE

符合类型的应用:

CREATE TABLE union_test(

foo UNIONTYPE, struct>);

SELECT foo FROM union_test;

{0:1}

{1:2.0}

{2:["three","four"]}

{3:{"a":5,"b":"five"}}

{2:["six","seven"]}

{3:{"a":8,"b":"eight"}}

{0:9}

{1:10.0}

Hive的数据模型介绍

1.Hive数据库

类似传统数据库的DataBase,在第三方数据库里实际是一张表。简单示例命令行hive > create database test_database;

2.内部表

Hive的内部表与数据库中的Table在概念上是类似。每一个Table在Hive中都有一个相应的目录存储数据。例如一个表pvs,它在HDFS中的路径为/wh/pvs,其中wh是在hive-site.xml 中由${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的Table数据(不包括External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除。

内部表简单示例:

创建数据文件:test_inner_table.txt

创建表:create table test_inner_table (key string)

加载数据:LOAD DA TA LOCAL INPATH ‘filepath’INTO TABLE test_inner_table 查看数据:select * from test_inner_table; select count(*) from test_inner_table

删除表:drop table test_inner_table

3.外部表

外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCA TION),实际数据是存储在LOCATION后面指定的HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。

外部表简单示例:

创建数据文件:test_external_table.txt

创建表:create external table test_external_table (key string)

加载数据:LOAD DA TA INPATH ‘filepath’INTO TABLE test_inner_table

查看数据:select * from test_external_table; ?select count(*) from test_external_table

删除表:drop table test_external_table

4.分区

Partition对应于数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。例如pvs表中包含ds和city两个Partition,则对应于ds = 20090801, ctry = US 的HDFS子目录为/wh/pvs/ds=20090801/ctry=US;对应于ds = 20090801, ctry = CA 的HDFS子目录为/wh/pvs/ds=20090801/ctry=CA。

分区表简单示例:

创建数据文件:test_partition_table.txt

创建表:create table test_partition_table (key string) partitioned by (dt string)

加载数据:LOAD DA TA INPATH ‘filepath’INTO TABLE test_partition_table partition (dt=‘2006’)

查看数据:select * from test_partition_table; select count(*) from test_partition_table

删除表:drop table test_partition_table

5.桶

Buckets是将表的列通过Hash算法进一步分解成不同的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。例如将user 列分散至32个bucket,首先对user列的值计算hash,对应hash值为0的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00000;hash值为20的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00020。如果想应用很多的Map任务这样是不错的选择。

桶的简单示例:

创建数据文件:test_bucket_table.txt

创建表:create table test_bucket_table (key string) clustered by (key) into 20 buckets

加载数据:LOAD DA TA INPATH ‘filepath’INTO TABLE test_bucket_table

查看数据:select * from test_bucket_table; set hive.enforce.bucketing = true;

(6)Hive的视图

视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。?如果不指定视图的列,会根据select语句后的生成。

示例:create view test_view as select * from test

Hive构建在Hadoop编译流程

1)HQL中对查询语句的解释、优化、生成查询计划是由Hive完成的。

2)所有的数据都是存储在Hadoop中。

3)查询计划被转化为MapReduce任务,在Hadoop中执行(有些查询没有MR任务,

如:select * from table)。

4)Hadoop和Hive都是用UTF-8编码的。

Hive编译器将一个Hive QL转换操作符。操作符Operator是Hive的最小的处理单元,每个操作符代表HDFS的一个操作或者一道MapReduce作业。Operator都是hive定义的一个处理过程,其定义有:

protected List > childOperators;

protected List > parentOperators;

protected boolean done; // 初始化值为false

所有的操作构成了Operator图,hive正是基于这些图关系来处理诸如limit, group by, join 等操作。

图6.2 Hive QL的操作符

操作符如下:

TableScanOperator:扫描hive表数据

ReduceSinkOperator:创建将发送到Reducer端的

JoinOperator:Join两份数据

SelectOperator:选择输出列

FileSinkOperator:建立结果数据,输出至文件

FilterOperator:过滤输入数据

GroupByOperator:GroupBy语句

MapJoinOperator:/*+mapjoin(t) */

LimitOperator:Limit语句

UnionOperator:Union语句

Hive通过ExecMapper和ExecReducer执行MapReduce任务。在执行MapReduce时有两种模式,即本地模式和分布式模式。

Hive编译器的组成:

图2.3 Hive编译器的组成编译流程如下:

图2.4 Hive QL编译流程

(完整版)第三方软件测试报告[模板]

第三方软件测试报告(暂定) 1.引言 1.1.编写目的 本文档作为该系统测试的测试标准,内容关系到本次系统测试可能涉及到的测试内容和测试技术解决方案。 1.2.系统概述 略 2.测试描述 2.1.测试范围与内容 我方(北京圆规创新公司)对XX公司“XX”项目进行测试,保证使用方的功能正确,保证系统核心模块的稳定和安全,为项目的验收提供参考。以此,本计划列出了在此次功能测试过程中所要进行的内容和实施的方案及测试资源的安排,作为测试活动的依据和参考。 本次测试的对象为XX公司“XX”项目,测试范围为:略。 本次测试的主要内容有功能测试(含容错测试)、易用性测试。 2.2.测试依据 本次测试所依据的文档包含开发方提供的《需求规格说明书》、《操作手册》、《用户手册》,《维护手册》,《设计文档》等相关开发文档。

并依据IT行业项目的通用标准,包括功能测试标准、缺陷标准、易用性标准。 对于项目的易用性标准,原则上由测试方提出易用性问题修改的建议,由开发方对测试方提交的问题进行确认。 3.测试解决方案 我公司针对用户方提出的测试要求,根据以往项目的实际经验,撰写测试技术解决方案。该解决方案包含了本次系统测试可能涉及到的测试类型,并分别介绍不同测试类型的内容和相关标准。 3.1.系统功能测试 实施系统功能测试,完成对被测系统的功能确认。 采用黑盒测试方法,根据需求规格说明书和用户手册,将功能点转换为功能测试需求,根据测试需求编写测试用例,保证所有功能点必须被测试用例覆盖。 测试用例的编写采用基于场景的测试用例编写原则,便于以使用者的角度进行测试。用例设计上兼顾正常业务逻辑和异常业务逻辑。测试数据的选取可采用GUI测试,等价类划分、边界值分析、错误推测、比较测试等测试方法中的一种或者几种数据的组合,一般以等价类划分和边界值法为主。 3.1.1.系统功能项测试 对《软件需求规格说明书》中的所有功能项进行测试(列表); 3.1.2.系统业务流程测试 对《软件需求规格说明书》中的典型业务流程进行测试(列表); 3.1.3.系统功能测试标准 ?可测试的功能点100%作为测试需求(如未作为测试需求,必须在测试计划中标注原因并通知用户方负责人);

HIVE从入门到精通

HIVE从入门到精通 目录 HIVE介绍 (2) 二、hive的安装和配置 (8) 三、hive与hbase集成 (13) 四、HIVE创建目录和表 (16) 六、HIVE查询 (23) 七、HIVE视图 (29) 八、索引 (30) 九、hive schema (30) 十、Hive join (33) 十一、Hive基本语法 (37) 十二、Hive操作语句 (40) 十三、数据操作语句 (50) Hive 优化 (56)

HIVE介绍 主要介绍 背景及体系结构 1背景 应用于工业的商务智能收集分析所需的数据集正在大量增长,使 得传统的数据仓库解决方案变得过于昂贵。Hadoop 是一个流行的开源map-reduce实现,用于像yahoo, Facebook一类的公司。来存储和处 理商用硬件上的大范围数据集。然而map-reduce程序模型还是处于很 低级别,即需要开发者来书写客户程序,这些程序往往难于维护与重用。 用hbase做数据库,但由于hbase没有类sql查询方式,所以操作 和计算数据非常不方便,于是整合hive,让hive支撑在hbase数据库层面的hql查询。hive也叫做数据仓库。 2定义 Hive是基于Hadoop(HDFS, MapReduce)的一个数据仓库工具,可 以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。 本质是将SQL转换为MapReduce程序。 3体系结构 Hive本身建立在Hadoop的体系结构上,可以将结构化的数据文 件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语 句转换为MapReduce任务进行。并按照该计划生成MapReduce任务后 交给Hadoop集群处理,Hive的体系结构如图1-1所示:

整理和总结hive sql

进入hive shell #hive或者hive --service cli Hive 的启动方式: hive 命令行模式,直接输入/hive/bin/hive的执行程序,或者输入hive –service cli hive web界面的启动方式,hive –service hwi hive 远程服务(端口号10000) 启动方式,hive --service hiveserver hive 远程后台启动(关闭终端hive服务不退出): nohup hive -–service hiveserver & 显示所有函数: hive> show functions; 查看函数用法: hive> describe function substr; 查看hive为某个查询使用多少个MapReduce作业 hive> Explain select a.id from tbname a; -------------------------------------------------------------------------- 表结构操作: 托管表和外部表 托管表会将数据移入Hive的warehouse目录;外部表则不会。经验法则是,如果所有处理都由Hive完成, 应该使用托管表;但如果要用Hive和其它工具来处理同一个数据集,则使用外部表。 创建表(通常stored as textfile): hive> create table tbName (id int,name string) stored as textfile; 创建表并且按分割符分割行中的字段值(即导入数据的时候被导入数据是以该分割符划分的,否则导入后为null,缺省列为null); hive> create table tbName (id int,name string) row format delimited fields terminated by ','; 创建外部表: hive>create external table extbName(id int, name string); 创建表并创建单分区字段ds(分区表指的是在创建表时指定的partition的分区空间。): hive> create table tbName2 (id int, name string) partitioned by (ds string); 创建表并创建双分区字段ds: hive> create table tbname3 (id int, content string) partitioned by (day string, hour string); 表添加一列: hive> alter table tbName add columns (new_col int); 添加一列并增加列字段注释: hive> alter table tbName add columns (new_col2 int comment 'a comment'); 更改表名: hive> alter table tbName rename to tbName3; 删除表(删除表的元数据,如果是托管表还会删除表的数据): hive>drop table tbName; 只删除内容(只删除表的内容,而保留元数据,则删除数据文件): hive>dfs –rmr ‘warehouse/my-table’; 删除分区,分区的元数据和数据将被一并删除: hive>alter table tbname2 drop partition (dt='2008-08-08', hour='09'); -------------------------------------------------------------------------- 元数据存储(从HDFS中将数据导入到表中都是瞬时的):

系统测试报告参考文档

系统测试报告 1 系统测试报告写作的目的 1、软件测试人员对整个系统测试工作进行总结,对被测试对象进行评估,并对以后的测试工作给出建议 2、测试经理通过测试报告了解被测试产品的质量情况、测试过程的质量 3、软件开发项目经理通过软件测试报告了解开发产品的质量情况,并在下阶段的开发工作中采取应对措施 4、在软件测试报告中,软件测试人员作出的软件产品质量评估,可以作为软件产品是否对外发布的重要参考依据。 2 系统测试报告写作的要点 2.1 概述 简单介绍被测对象、测试特性及其版本/修订级别情况 指明本次系统测试活动所依据的测试计划、测试方案、测试用例及测试过程,对测试内容也要进行简要说明 2.2 测试时间、地点、人员 描述本次测试的时间,地点和测试人员,以及人员分工。 例如: 2.3 环境描述 描述本次测试的环境,包括软硬件、测试仪器、组网图等。

2.4 总结和评价 2.4.1 测试过程质量统计评估 1、工作量数据统计 例如: 分析: 1)可以根据不同模块每千行代码投入的工作量来查看哪些模块测试比较充分;哪些模块测试不够充分。 2)结合模块的实际情况,对关键模块或者复杂模块投入的测试人时比例应相对较高;对非关键或者简单的模块投入的测试人时比例可以相对较低,根据该指标可以用来衡量测试过程中测试资源的分布是否合理。 2、用例数统计

分析: 1)可以根据用例数/KLOC来查看哪些模块用例设计的比较充分;哪些模块用例设计的相对比较少,结合模块的具体特点,需要进行分析,避免关键模块用例设计不充分的情况。2)可以根据不同模块用例数来了解不同测试人员的工作量;结合时间方面的数据,对工作量少而花费时间较多的情况进行调查分析,对其中存在的问题采取相关策略进行有效的规避。 3、用例对需求的覆盖率

Hive配置和基本操作

实验报告(四)

hive.exec.scratchdir /tmp/hive hive.server2.logging.operation.log.location /usr/local/hive/iotmp hive.downloaded.resources.dir /usr/local/hive/iotmp< /property> hive.querylog.location /usr/local/hive/iotmp hive.metastore.warehouse.dir /user/hive/warehouse javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver javax.jdo.option.ConnectionURL jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8 javax.jdo.option.ConnectionUserName hive javax.jdo.option.ConnectionPassword hive hive.metastore.local false hive.metastore.uris thrift://localhost:9083 二:Hive的基本操作 创建表: hive> CREATE TABLE pokes (foo INT, bar STRING);

hive自定义函数说明

Hive自定义函数说明函数清单:

用法: getID 通过UUID来生成每一行的唯一ID: select getid() ; oracle_concat hive的concat函数遇到空值的情况下会直接返回空,而在oracle中对于字符串类型空字符串与null是等价对待的 select default.oracle_concat('ff-',null,'','--cc'); Select concat('ff-',null,'','--cc'); getBirthDay 从身份证号码中截取生日信息,返回日期格式为’yyyy-MM-dd’

getGoodsInfo self_date_format 为格式化来自oracle的时间格式,将格式为’yyyy/MM/dd’和’yyyy/MM/dd HH:mm:ss’的日期格式转换为’yyyy-MM-dd’ Select default. self_date_format(‘2012-12-12’); Select default. self_date_format(‘20121212’,’yyyyMMdd’); oracle_months_between 由于当前版本hive不带months_between函数,所以添加 oracle_decode hive中的decode函数为字符编码函数和encode对应。Oracle中decode函数类似case when 函数,添加oracle_decode函数减少sql的改写。与为与oracle功能同步,本函数将null和字符串’’等价对待。 select default.oracle_decode('',null,1,2) r1, default.oracle_decode(null,'',1,2) r2, default.oracle_decode('aaa','','Nnull','aaa','is a*3','aaa') r3, default.oracle_decode('ccc','', 'Nnull','aaa','is a*3','aaa') r4, default.oracle_decode('','', 'Nnull','aaa','is a*3','aaa') r5; BinomialTest _FUNC_(expr1, expr2, p_value, alternativeHypothesis) alternativeHypothesis: 接受指定值的字符串 取值:TWO_SIDED , GREATER_THAN , LESS_THAN 二项分布检测函数。实现oracle中的二项分布检测功能。 计算expr1 等于exper2 的值占数据总数的二项分布检测结果,类型依据alternativeHypothesis 确定

Hive 基础操作

Hive 基础(2):库、表、字段、交互式查询的基本操作目录[-] ?1、命令行操作 ?2、表操作 ?3、列操作 ?4、查看变量 ?5、一个完整的建库、表例子 ?6、常用语句示例 ?7、Refer: 1、命令行操作 (1)打印查询头,需要显示设置: sethive.cli.print.header=true; (2)加"--",其后的都被认为是注释,但CLI 不解析注释。带有注释的文件只能通过这种方式执行: hive -f script_name (3)-e后跟带引号的hive指令或者查询,-S去掉多余的输出: hive -S -e "select * FROM mytable LIMIT 3" > /tmp/myquery (4)遍历所有分区的查询将产生一个巨大的MapReduce作业,如果你的数据集和目录非常多, 因此建议你使用strict模型,也就是你存在分区时,必须指定where语句hive> set hive.mapred.mode=strict;

(5)显示当前使用数据库 set hive.cli.print.current.db=true; (6)设置Hive Job 优先级 setmapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | V ERY_LOW (VERY_LOW=1,LOW=2500,NORMAL=5000,HIGH=7500,VERY _HIGH=10000) set mapred.job.map.capacity=M设置同时最多运行M个map 任务 set mapred.job.reduce.capacity=N设置同时最多运行N个red uce任务 (7)Hive 中的Mapper个数的是由以下几个参数确定的:mapred.min.split.size ,mapred.max.split.size ,dfs.block.siz e splitSize = Math.max(minSize, Math.min(maxSize, blockSiz e)); map个数还与inputfilles的个数有关,如果有2个输入文件,即使总大小小于blocksize,也会产生2个map mapred.reduce.tasks用来设置reduce个数。 2、表操作 (1)查看某个表所有分区 SHOW PARTITIONS ext_trackflow

hive函数大全

目录 一、关系运算: (4) 1. 等值比较: = (4) 2. 不等值比较: <> (4) 3. 小于比较: < (4) 4. 小于等于比较: <= (4) 5. 大于比较: > (5) 6. 大于等于比较: >= (5) 7. 空值判断: IS NULL (5) 8. 非空判断: IS NOT NULL (6) 9. LIKE比较: LIKE (6) 10. JAVA的LIKE操作: RLIKE (6) 11. REGEXP操作: REGEXP (7) 二、数学运算: (7) 1. 加法操作: + (7) 2. 减法操作: - (7) 3. 乘法操作: * (8) 4. 除法操作: / (8) 5. 取余操作: % (8) 6. 位与操作: & (9) 7. 位或操作: | (9) 8. 位异或操作: ^ (9) 9.位取反操作: ~ (10) 三、逻辑运算: (10) 1. 逻辑与操作: AND (10) 2. 逻辑或操作: OR (10) 3. 逻辑非操作: NOT (10) 四、数值计算 (11) 1. 取整函数: round (11) 2. 指定精度取整函数: round (11) 3. 向下取整函数: floor (11) 4. 向上取整函数: ceil (12) 5. 向上取整函数: ceiling (12) 6. 取随机数函数: rand (12) 7. 自然指数函数: exp (13) 8. 以10为底对数函数: log10 (13) 9. 以2为底对数函数: log2 (13) 10. 对数函数: log (13) 11. 幂运算函数: pow (14) 12. 幂运算函数: power (14) 13. 开平方函数: sqrt (14) 14. 二进制函数: bin (14)

软件测试报告模板

XXX_V X.X测试报告 作者: 日期: X X X限公司 版权所有

目录 目录 (2) 1. 概述 (4) 2. 测试时间、地点及人员 (4) 3. 测试环境 (4) 4. 缺陷统计 (5) 4.1 测试缺陷统计 (5) 4.2 测试用例执行情况统计 (5) 5. 测试活动评估 (6) 6. 测试对象评估 (6) 7. 测试设计评估及改进建议 (6) 8. 规避措施 (7) 9. 遗留缺陷列表 (7) 9.1 遗留缺陷统计 (7) 9.2 遗留缺陷详细列表 (7) 10. 附件 (8) 附件1:交付的测试工作产品 (8) 附件2:修改、添加的测试方案或测试用例 (9) 附件3:其他附件(如:PC-LINT检查记录,代码覆盖率分析报告等) (9)

XXX_V X.X测试报告 本文档中蓝色字体为说明性文字,黑色字体为测试报告文档中必需的部分。 本文档中内容包括测试的总结性报告、测试评估,测试缺陷报告和测试实测结果清单等内容。 测试报告可能是多个层次级别的,如系统测试报告、集成测试报告、单元测试报告等,而所有测试过程中各阶段的测试报告均遵从规范所定义的此模板。如果不同阶段测试报告有其特殊需求,可以增加其他段落作为补充。 关键词:列示文中涉及的关键词汇。 摘要:简略描述报告内容。 缩略语清单:对本文所用缩略语进行说明,要求提供每个缩略语的英文全名和中文解释.

1.概述 描述本报告是哪一个测试活动的总结,指明被测对象及其版本/修订级别。同时,指明该测试活动所依据的测试计划、测试方案、测试用例及测试过程为本测试报告文档的参考文档 2.测试时间、地点及人员 本次测试的时间、地点和测试人员如下表所示: 3.测试环境 描述本次测试的测试环境,包括硬件配置、所使用的软件及软件版本号、来源、测试工具等。

Hive学习总结及应用

一、文档说明 熟悉Hive功能,了解基本开发过程,及在项目中的基本应用。 注意:本文档中但凡有hive库操作的语句,其后面的“;”是语句后面的,非文档格式需要。每个hive语句都要以“;”来结束,否则将视相邻两个分号“;”之间的所有语句为一条语句。 二、Hive(数据提取)概述 Hive是构建在HDFS 和Map/Reduce之上的可扩展的数据仓库。是对HADOOP的Map-Reduce进行了封装,类似于sql语句(hive称之为HQL)计算数据从而代替编写代码对mapreduce的操作,数据的来源还是HDFS上面的文件。 Hive中的表可以分为托管表和外部表,托管表的数据移动到数据仓库目录下,由Hive管理,外部表的数据在指定位置,不在Hive 的数据仓库中,只是在Hive元数据库中注册。创建外部表采用“create external tablename”方式创建,并在创建表的同时指定表的位置。 Hive本身是没有专门的数据存储格式,也没有为数据建立索引,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。所以往Hive表里面导入数据只是简单的将数据移动到表所在的目录中(如果数据是在HDFS上;但如果数据是在本地文件系统中,那么是将数据复制到表所在的目录中)。

三、Hive的元数据 Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。 Hive metastore 三种存储方式: Hive的meta 数据支持以下三种存储方式,其中两种属于本地存储,一种为远端存储。远端存储比较适合生产环境。 1、使用derby数据库存储元数据(内嵌的以本地磁盘作为存储),这称为“内嵌配置”。 这种方式是最简单的存储方式,只需要在或做如下配置便可。使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。这种存储方式的弊端是在同一个目录下同时只能有一个hive客户端能使用数据库,否则会提示如下错误(这是一个很常见的错误)。 2、使用本机mysql服务器存储元数据,这称为“本地metastore”。这种存储方式需要在本地运行一个mysql服务器, 3、使用远端mysql服务器存储元数据。这称为“远程metastore”。这种存储方式需要在远端服务器运行一个mysql服务器,并且需要在Hive服务器启动meta服务。

Hadoop试题试题库

1. 以下哪一项不属于Hadoop可以运行的模式___C___。 A. 单机(本地)模式 B. 伪分布式模式 C. 互联模式 D. 分布式模式 2. Hadoop 的作者是下面哪一位__B____。 A. Martin Fowler B. Doug cutting C. Kent Beck D. Grace Hopper 3. 下列哪个程序通常与NameNode 在同一个节点启动__D___。 A. TaskTracker B. DataNode C. SecondaryNameNode D. Jobtracker 4. HDFS 默认Block Size 的大小是___B___。 A.32MB B.64MB C.128MB D.256M 5. 下列哪项通常是集群的最主要瓶颈____C__。 A. CPU B. 网络 C. 磁盘IO D. 内存 6. 下列关于MapReduce说法不正确的是_____C_。 A. MapReduce 是一种计算框架 B. MapReduce 来源于google 的学术论文 C. MapReduce 程序只能用java 语言编写 D. MapReduce 隐藏了并行计算的细节,方便使用 8. HDFS 是基于流数据模式访问和处理超大文件的需求而开发的,具有高容错、高可靠性、高可扩展性、高吞吐率等特征,适合的读写任务是__D____。 A.一次写入,少次读 B.多次写入,少次读 C.多次写入,多次读 D.一次写入,多次读

7. HBase 依靠__A____存储底层数据。 A. HDFS B. Hadoop C. Memory D. MapReduce 8. HBase 依赖___D___提供强大的计算能力。 A. Zookeeper B. Chubby C. RPC D. MapReduce 9. HBase 依赖___A___提供消息通信机制 A. Zookeeper B. Chubby C. RPC D. Socket 10. 下面与HDFS类似的框架是___C____? A. NTFS B. FAT32 C. GFS D. EXT3 11. 关于SecondaryNameNode 下面哪项是正确的___C___。 A. 它是NameNode 的热备 B. 它对内存没有要求 C. 它的目的是帮助NameNode 合并编辑日志,减少NameNode 启动时间 D. SecondaryNameNode 应与NameNode 部署到一个节点 12. 大数据的特点不包括下面哪一项___D___。 A. 巨大的数据量 B. 多结构化数据 C. 增长速度快 D. 价值密度高 HBase测试题 9. HBase 来源于哪一项? C

HiveQL详解

HiveQL详解 HiveQL是一种类似SQL的语言, 它与大部分的SQL语法兼容, 但是并不完全支持SQL标准, 如HiveQL不支持更新操作, 也不支持索引和事务, 它的子查询和join操作也很局限, 这是因其底层依赖于Hadoop云平台这一特性决定的, 但其有些特点是SQL所无法企及的。例如多表查询、支持create table as select和集成MapReduce脚本等, 本节主要介绍Hive的数据类型和常用的HiveQL操作。 1.hive client命令 a.hive命令参数 -e: 命令行sql语句 -f: SQL文件 -h, --help: 帮助 --hiveconf: 指定配置文件 -i: 初始化文件 -S, --silent: 静态模式(不将错误输出) -v,--verbose: 详细模式 b.交互模式 hive> show tables; #查看所有表名 hive> show tables 'ad*' #查看以'ad'开头的表名 hive>set命令 #设置变量与查看变量; hive>set-v #查看所有的变量 hive>set hive.stats.atomic #查看hive.stats.atomic变量 hive>set hive.stats.atomic=false #设置hive.stats.atomic变量 hive> dfs -ls #查看hadoop所有文件路径 hive> dfs -ls /user/hive/warehouse/ #查看hive所有文件 hive> dfs -ls /user/hive/warehouse/ptest #查看ptest文件 hive> source file #在client里执行一个hive脚本文件 hive> quit #退出交互式shell hive>exit #退出交互式shell hive> reset #重置配置为默认值 hive> !ls #从Hive shell执行一个shell命令 2.操作及函数 查看函数: hive> show functions; 正则查看函数名: show functions 'xpath.*'; 查看具体函数内容:

Hadoop、openstack、nosql虚拟化2048G资源分享

Hadoop、openstack、nos ql、虚拟化云资源资料大全 about云资源汇总指引V1.4 hadoop资料 云端云计算2G基础课程 (Hadoop简介、安装与范例) 炼数成金3G视频分享下载 虚拟机三种网络模式该如何上网指导此为视频 Hadoop传智播客七天hadoop(3800元)视频,持续更新 Hadoop传智播客最新的hadoop学习资料第一季 (1)需要简单了解Linux操作系统(本课程使用CentOS6.4操作系统); (2)需要java基础,因为hadoop是java语言写的,课程中会对hadoop源码进行简析。 第一天资料: 传智播客hadoop教程01-课程介绍以及hadoop的国内外发展状况 传智播客hadoop教程02-hadoop生态圈介绍,介绍hadoop周边的很多框架 传智播客hadoop教程03-hadoop的概念及其发展历程 传智播客hadoop教程04-HDFS和MapReduce的体系结构 传智播客hadoop教程05-hadoop的特点和集群特点 传智播客hadoop教程06-配置Linux的环境,为搭建hadoop做准备 传智播客hadoop教程07-介绍如何使用SSH进行免密码登陆以及如何安装JDK

传智播客hadoop教程08-介绍hadoop的伪分布安装过程 传智播客hadoop教程09-使用eclipse查看hadoop源码 传智播客hadoop教程10-去除hadoop的启动过程中警告信息 第二天资料: 传智播客hadoop教程11-分布式文件系统简介 传智播客hadoop教程12-HDFS的shell操作 传智播客hadoop教程13-NameNode体系结构 传智播客hadoop教程14-DataNode体系结构 传智播客hadoop教程15-使用浏览器查看HDFS目录结构 传智播客hadoop教程16-使用java操作HDFS 传智播客hadoop教程17-Hadoop的RPC通信原理 传智播客hadoop教程18-NameNode的RPC通信过程 ....... Hadoop技术内幕深入解析HADOOP COMMON和HDFS架构设计与实现原理大全1-9章如何进行Hadoop二次开发指导视频下载 hadoop架构40篇文档下载 DaaS for Iaas.pdf IaaS 存储架构分析 Oracle性能优化精髓 OpenShift:从中间件到PaaS云 软件架构趋势 OPenstack建设公有云平台 从企业角度重塑企业IT架构 SAE落地过程中的经验分享 大型企业集团于SaaS的核心业务平台建设 云计算加速企业创新 hadoop平台大数据整合 Cloud Foundry Paas平台对软件开发的影响 专家集成系统开启企业云计算之旅 我们为什么不赞同openstack 基于web标准的移动开发和测试 分布式存储在网盘和在线备份的应用研究 当当在大数据挖掘分析与管理一个性话精准营销方面的探索 高并发环境下数据产品的架构设计 低成本构建有效的云存储运维体系 将企业级软件迁移到共有云平台

常用函数大全

常用函数大全 mysql_affected_rows
mysql_affected_rows — 取得前一次 MySQL 操作所影响的记录行数 mysql_fetch_array —从结果集中取得一行作为关联数组或数字数组或二者兼 有:
mysql_fetch_array($result, MYSQL_NUM) , MYSQL_NUM 可用 MYSQL_BOTH 或
MYSQL_ASSOC 代替,也可以不写,默认为 MYSQL_BOTH
mysql_fetch_row — 从结果集中取得一行作为枚举数组: mysql_fetch_row($result); mysql_fetch_assoc($result)
mysql_fetch_row()从和指定的结果标识关联的结果集中取得一行数据并作为数组返回。每个结果 的列储存在一个数组的单元中,偏移量从 0 开始。 依次调用 mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回 FALSE。 mysql_fetch_assoc — 从结果集中取得一行作为关联数组 :
mysql_fetch_assoc() 和用 mysql_fetch_array() 加上第二个可选参数 MYSQL_ASSOC 完全相同。它 仅仅返回关联数组。这也是 mysql_fetch_array()起初始的工作方式。如果在关联索引之外还需要数字 索引,用 mysql_fetch_array()。 如果结果中的两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其它列,要么用 mysql_fetch_row()来取得数字索引或给该列起个别名。参见 mysql_fetch_array() 例子中有关别名说 明。 有一点很重要必须指出,用 mysql_fetch_assoc()并不明显 比用 mysql_fetch_row()慢,而且还提供了 明显更多的值。
mysql_query()
仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,
如果查询执行不正确则返回 FALSE。对于其它类型的 SQL 语句,mysql_query()在执行成功时返回 TRUE,出错时返回 FALSE。非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明 任何有关影响到的或返回的行数。 很有可能一条查询执行成功了但并未影响到或并未返回任何行。

最新测试报告模板(标准版)

变更历史记录

目录 [项目名称测试报告(标准版)] 0 [V1.0(版本号)] 0 [2010年9月9日] 0 第1章简介 (3) 1.1目的 (3) 1.2范围 (3) 1.3名词解释 (3) 1.4参考资料 (3) 第2章测试简介 (4) 2.1测试日期 (4) 2.2测试地点 (4) 2.3人员 (4) 2.4测试环境 (4) 2.5数据库 (5) 2.6测试项 (5) 第3章测试结果与分析 (5) 3.1对问题报告进行统计分析 (5) 3.2遗留问题列表 (7) 第4章简要总结测试的结果 (7) 第5章各测试类型测试结论 (8) 5.1功能测试 (9) 5.2用户界面测试 (9) 5.3性能测试 (9) 5.4配置测试 (9) 5.5安全性测试 (9) 5.6数据和数据库完整性测试 (9) 5.7故障转移和恢复测试 (10) 5.8业务周期测试 (10) 5.9可靠性测试 (10) 5.10病毒测试 (10) 5.11文档测试 (10) 第6章软件需求测试结论 (10) 第7章建议的措施 (10) 第8章追踪记录表格 (11) 8.1需求—用例对应表(测试覆盖) (11) 8.2用例—需求对应表(需求覆盖) (11)

第1章简介 测试报告的简介应提供整个文档的概述。它应包括此测试报告的目的、范围、定义、首字母缩写词、缩略语、参考资料和概述等。 1.1 目的 阐明此测试报告的目的。 1.2 范围 简要说明此测试报告的范围:它的相关项目,以及受到此文档影响的任何其他事物。1.3 名词解释 列出本计划中使用的专用术语及其定义 列出本计划中使用的全部缩略语全称及其定义 表1 名词解释表 1.4 参考资料 本小节应完整地列出此测试报告中其他部分所引用的任何文档。每个文档应标有标题、报告号(如果适用)、日期和发布组织。列出可从中获取这些引用的来源。这些信息可以通过引用附录或其他文档来提供。

Hive简易操作入门

1Hive使用入门: 主要流程为: 1.运行putty等ssh客户端连接hive服务器; 2.运行hive命令进入hive shell环境; 3.执行HQL语句进行查询; 本流程中以putty为例,如果使用别的SSH客户端,界面上会不同,基本过程相似。 我们当前使用的hive版本为0.9.0。由于hive本身还在不断开发、升级中,不同版本的hive对各种语句、命令行参数等的支持均不同,请大家注意某个特性从哪一个版本开始支持。Hive官方网站上的教材中有些命令需要到0.10.0等更高版本才支持! 1.1安装ssh 客户端Putty 软件位置: \\cn1\ctrip\商业智能部\部门公用\SoftWare\putty.zip 解压所可以得到文件 Putty ssh客户端

1.2登录安装hive的机器 1.2.1运行putty 输入ip地址192.168.83.96 和端口号信息1022,如下图:注:一般默认的SSH端口是22,此处必须修改! 1.2.2登录linux 单击open按钮,按提示输入用户名,并回车,然后按提示输入密码,并回车,例如:

用户名为ppj 密码为HgeeGxR5 提示:可选中复制到剪贴板后,用鼠标右键粘贴 如果用户名、密码正确,则登录成功,顺利进入linux 的bash 环境。 注:此环境类似于运行windows的cmd进入的dos环境。 1.2.3输入hive,进入hive 的shell 环境:

1.2.4查询 执行如下查询语句: Use test_wqd; Select * from pageview limit 5; 屏幕输出即为查询语句的结果。 注意:hive的查询语句以分号作为各条命令的分隔符,结尾的分号不能省略。这一点和SQL Server的T-SQL差异比较大!

Hive函数

关系运算 等值比较: = 语法:A = B 操作类型: 所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1=1; 1 不等值比较: <> 语法: A <> B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 与表达式B不相等,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1 <> 2; 1 小于比较: < 语法: A < B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 小于表达式B,则为TRUE;否则为FALSE 举例:

hive> select 1 from dual where 1 < 2; 1 小于等于比较: <= 语法: A <= B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 小于或者等于表达式B,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 1 <= 1; 1 大于比较: > 语法: A > B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 大于表达式B,则为TRUE;否则为FALSE 举例: hive> select 1 from dual where 2 > 1; 1 大于等于比较: >= 语法: A >= B 操作类型: 所有基本类型 描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A 大于或者等于表达式B,则为TRUE;否则为FALSE

测试报告模板

(项目名称) 测试报告 测试执行人员签:___________ _ 测试负责人签字:__________ __ _ 开发负责人签字:_________ ___ _ 项目负责人签字:________ ____ _ 研发部经理签字:_______ _ _____ XXXXXXXXXXX公司软件测试组 XXXX年XX月

目录 1 测试概要 (3) 1.1 项目信息 (3) 1.2 测试阶段 (3) 2 测试结果 (3) 2.1 测试结论 (3) 2.2 测试总结 (3) 3 测试环境 (3) 3.1 系统拓扑图 (4) 3.2 环境详细信息 (4) 4 测试分析 (4) 4.1 测试进度总结 (4) 4.2 测试需求覆盖情况 (5) 5 缺陷统计与分析 (5) 5.1 按功能模块划分 (5) 5.2 按状态分布 (6) 5.3 缺陷收敛情况 (6) 5.4 遗留缺陷 (6) 6 建议 (7)

1 测试概要 1.1 项目信息 1.2 测试阶段 [描述测试所处阶段,描述本次系统测试是第几轮和所涵盖的测试类型。如下示例] 本次测试属于系统测试第一轮,测试类型包括:安装测试、功能测试、易用性测试、安全性测试、兼容性测试、文档测试、性能测试和稳定性测试。 2 测试结果 2.1 测试结论 [说明本轮测试完成后,是否存在遗留问题,是否通过测试,是否测试通过。] 2.2 测试总结 [对本次验收测试工作进行总结。] 3 测试环境

3.1 系统拓扑图 [使用Visio画出本次验收测试的测试环境框图。如下示例:] 3.2 环境详细信息 [列出本次验收测试使用到的所有软硬件设备信息,列表内容应该包含测试环境框图中的所有软硬件。] 4 测试分析 4.1 测试进度总结

测试报告模板

测试报告公司LOGO 测试报告 文档编号: 版本信息: 建立日期: 创建人: 审核人: 批准人: 批准日期: 保管人: 存放位置: 公司LOGO

文档修订记录 *变化状态:C——创建,A——增加,M——修改,D——删除

目录 1.前言 (3) 1.1 目的 (3) 1.2 测试计划 (3) 1.3 参考资料 (4) 2. 测试资源消耗 (4) 3. 测试过程分析 (4) 3.1 测试环境 (4) 3.1.1 服务器端 (4) 3.1.2 客户端 (4) 3.2 测试类型 (5) 3.2.1 集成测试 (5) 3.2.2 回归测试: (5) 3.3 测试方法及测试用例 (5) 3.3.1 奥鹏题库管理系统项目测试方法 (5) 3.3.2 功能测试: (5) 3.3.3 安全性和访问控制测试: (6) 3.3.4 流程测试 (7) 3.3.5 数据测试 (7) 3.4 测试阶段问题分析 (8) 3.4.1 回归测试 (8) 3.4.2 编写用列 (8) 3.4.3 编写需求距阵 (8) 3.4.4 人员问题; (8) 3.4.5 测试版本问题 (8) 4. 缺陷分布状况 (8) 4.1 缺陷定义 (8) 4.2 缺陷分析 (9) 5. 测试总评价 (9)

1.前言 1.1目的 本测试报告是XX阶段报告,目的在于总结XX测试结果及分析测试结果,描述系统是否符合需求。 1.2测试计划 原定计划对XX进行以下测试,详细请查看附件测试计划。 1.功能测试 测试对象的功能测试,侧重于可以被直接追踪到用例或业务功能和业务规则的所有测试需求。这些测试的目的在于核实能否正确地接受、处理和检索数据以及业务规则是否正确实施。这种类型的测试基于黑盒方法,即通过图形用户界面(GUI) 与应用程序交互并分析输出结果来验证应用程序及其内部进程。 2.数据和数据库完整性测试 数据库和数据库进程作为一个子系统来进行测试。在将测试对象的用户界面用作数据的接口的同时,还将考虑对数据库管理系统(DBMS)进行相关的测试 3.接口测试 由于XX其它系统协同工作,所以系统在实际工作中会协作其它系统,同时系统内部功能模块的调用 4.安全性和访问控制测试 由于Xx主要用于XX,对于安全性要求较高。对于整个系统,需要完整的权限控制,防止某些人恶意的攻击系统,修改原始记录。同时对于数据库中的数据需要定时备份,防止系统数据丢失。此外,系统要求用户在登陆时需要身份验证,严格区分每个角色的使用权限, 安全性的访问控制测试主要集中在对用户权限管理测试模块中。 5.故障转移和恢复测试 出现故障时及时完成系统恢复,并方便地找到产生故障的原因和位置,进行局部修改。具有对于系统数据丢失的补救措施,保证系统的安全性,可靠性。此项测试主要集中在数据备份\恢复功能模块中。 6.性能测试 采用测试工具LoadRunner进行测试,测试包括:负载测试、强度测试和稳定性测试。找出系统瓶颈,并进行优化,但系统能达到,要求XX个用户并发情况下,响应时间小于等于XX秒。 系统支持最高XX个并发,在XXM带宽下,支持XX左右用户的同时访问。

相关主题