Hive - noonecare/opensourcebigdatatools GitHub Wiki
Transform/Map-Reduce Scripts
可以用任何语言写script,只要这个script 接受 stdin 输入,并且往 stdout 输出。这其实就是 hadoop map-reduce 中的 stream script。
- Hive Transform
- 一般不需要自己写 Scripts 的,一般用的 Scripts 都是现成的工具,比如 cat, grep, awk, sed 等现成的文本操作工具。
- 我用 python 写了个示例的 mapper script(完成 map job 的功能), 在 HiveScripts/sigmoid.py。
- reducer script 的输入是排好序的(使用下面介绍的sort by, order by 和 cluster by 做排序的)字符串。 使用 reducer script 时一定会出现 sort by, order by 和 cluster by。
- reducer script 的输入是 \t 分割的字符串,输出也是 \t 分割的字符串。
- Distribued By 保证如果两条记录具有相同的键(Distributed By 的列),那么这两条记录一定会被分到同一个 reducer 处理。
- Sort By 保证在同一个 reducer 中数据是按照键值的大小顺序排列,但是如果有多个 reducer 就不能保证在整体上,键值是按照大小顺序排列的。Order By 可以保证在整体上数据是按键值的大小顺序排列的。
- CULSTER BY is a short-cut for both Distribute By and Sort By.
- Hive 的 reducer 数目
- 在你要执行的 HiveQL 操作之前,加上 SET mapreduce.job.reduces=<reduces_number> 即可指定执行这句 HiveQL 时的reducer 数目。
- hive 的 mapreduce.job.reduces 的 default value 是 -1。如果 mapreduce.job.reduces 的值为 -1, hive 会自动计算出 reduces 的值。自动计算reduces 的值时,reduces 数和 hive.exec.reduces.max 和 hive.exec.reduces.bytes.per.reducer 两个 property 有关。
UDF
- Hive UDF 中有哪几类函数,每类函数有什么特点。如果按照函数的输入输出分的话
- UDAF: 多行记录,输出一个记录
- UDTF: 一行记录生成多行记录
- 普通的 UDF: 一行记录生成一行记录
- Hive UDF 中如何创建自定义的 UDF。
- UDAF 对应 GenericUDAF 类
- UDTF 对应 GenericUDTF 类
- 普通的 UDF 对应 UDF 类
- 要定义某种 UDF 需要写一个相应类的子类,主要是重写 evaluate 方法。打包上传到 HDFS, 启动 Hive, 执行 add jar <pageckage_name.jar> 命令添加jar包。 执行 create function <function_name> as <class_name(就是你重写的 UDF 类)> 就会生成你要的 UDF 函数。
- 我并不经常自定义 UDF, 在 extractjsonudf/ 目录中,你可以找到一个我之前写过的 UDF 的例子。