MIUI9去广告.md

MIUI的广告大部分可以通过系统应用的设置去关掉,但是很多应用的首屏广告一直没法关闭,甚至还丧心病狂的达到了5秒 :angry: !!!今天偶然看到一个可以去这类广告的方法:用文件管理器删掉SD卡目录下的miad文件夹,然后随便拷贝一个文件命名为miad就可以了。大部分常见应用都加入了小米广告联盟,所以这种方法很有效!

Read More

Hive应用(4.1)调优

1.limit优化

limit语句默认情况下是在查询所有结果后再返回部分结果,这样会造成资源浪费,可以通过参数控制这一行为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 使用抽样数据代替完整扫描所有数据 -->
<property>
<name>hive.limit.optimize.enable</name>
<value>true</value>
</property>

<!-- 抽样最大数量 -->
<property>
<name>hive.limit.row.max.size</name>
<value>100000</value>
</property>

<!-- 抽样最大文件数量 -->
<property>
<name>hive.limit.optimize.limit.file</name>
<value>10</value>
</property>

limit优化也会导致部分数据可能永远无法被处理

2.JOIN优化

将大表放到JOIN的右边

3.本地模式

数据量较小时,任务执行时间甚至会小于任务触发的时间,使用本地模式进行单机处理可以有效提升效率

Read More

Hive应用(5.1)文件格式及压缩

对于I/O密集型的job来说,使用压缩可以有效的提高IO和网络的吞吐量,对于CPU密集型的job则有可能会降低性能。

1. 压缩编码选择

可以使用如下命令查看当前hive中安装的压缩编解码器

1
2
3
set io.compression.codecs

io.compression.codecs=org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.compress.DeflateCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.Lz4Codec
编码 压缩后大小 压缩速度 是否可分割
GzipCodec
BZip2Codec
DeflateCodec(default)
SnappyCodec
Lz4Codec

2.中间压缩

开启中间压缩可以减少mapper和reducer之间传输的数据量,中间压缩优先选择速度快、资源消耗低的方式

Read More

Hive应用(2.1)DDL

HiveQL时Hive的查询语言,语法和Mysql有很多相似之处

1.数据库

1.1 查看所有数据库

Hive中默认有一个default数据库,使用如下命令查看hive中的数据库:

1
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];

1.2创建数据库

创建一个新的数据库:

1
2
3
4
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path] --自定义数据库文件位置
[WITH DBPROPERTIES (property_name=property_value, ...)];

Read More

Hive应用(1.2)文本文件数据编码及读时模式

1.文本文件数据编码

Hive在文本文件中默认分割符如下:

分隔符 描述
\n 默认的记录分隔符,两条记录由\n进行切分
^A 默认的列分隔符,一条记录的不同列由^A切分,八进制编码\001
^B ARRARY、STRUCT、MAP中的元素分割,八进制编码\002
^C MAP中的键值之间分割,八进制编码\003

可以在建表时自定义这4个分隔符:

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE users (
name STRING,
age SMALLINT,
address STRUCT<street:STRING, city:STRING, state:STRING>,
contacts MAP<STRING, STRING>,
friends ARRAY<STRING>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEM TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE; --指定以文本文件存储

2.读时模式

关系数据库通常使用写时模式(schema on write):在数据写入时检查是否符合schema。

Read More

Hive应用(1.1)数据类型

Hive中除了关系数据库支持的基础数据类型外,还支持3种集合数据类型。

基本数据类型

数据类型 长度 举例
TINYINT 1byte 有符号整数
SMALLINT 2byte 有符号整数
INT 4byte 有符号整数
BIGINT 8byte 有符号整数
BOOLEAN 1byte true/false true
FLOAT 4byte 单精度浮点数
DOUBLE 8byte 双精度浮点数
STRING 变长
TIMESTAMP 整数、浮点、字符串 java.sql.Timestamp兼容格式
BINARY 变长 字节数组

集合数据类型

数据类型 描述 示例
STRUCT 类似于对象。name列中的数据:struct{first STRING, last STRING}可以使用name.first来访问first值 struct(‘John’, ‘Doe’)
MAP 键值对形式,user列的取值可以通过user[‘name’] map(‘name’, ‘Jack’, ‘age’, 18)
ARRAY 数组形式,friends列的取值可以通过friends[0] Array(‘Jack’, ‘tom’)

使用集合类型的一些示例:

1
2
3
4
5
6
7
CREATE TABLE users (
name STRING,
age SMALLINT,
address STRUCT<street:STRING, city:STRING, state:STRING>,
contacts MAP<STRING, STRING>,
friends ARRAY<STRING>
);

Read More