HIVE,FACEBOOK的一个开源项目,利用类SQL的语句(HiveQL)来加快一般的MapReduce的开发过程。
UDF,user defined function, 因为HIVE毕竟不是一般的关系型数据库,支持的HQL有限,如果要实现复杂的功能,就要通过自己定义函数来帮助实现。
HIVE应该利用PIPE的原理,将自己查询的结果放到python脚本的stdin中。所以他的查询结果不会显示在terminal中,terminal中显示的结果是python的执行结果。
使用HIVE的命令进入数据仓库(search)
1
| |
使用HIVE的命令查看已经建立的表
1
| |
使用HIVE的命令查看xxx表中的字段
1
| |
使用HIVE命令用PYTHON实现UDF
1 2 3 4 5 6 7 8 | |
要注意的是,这里的TRANSFORM的内容可以写*,但是AS()里就不能写*,会报错。
输入到python中的内容,是按照AS里的数量来决定的。
下面是python的脚本,内容很简单,就是把输入的东西原封不动输出来。
udf.py 1 2 3 4 | |
Hive可以使用Python脚本大大地提高数据处理的开发效率,使用MapReduce的方式将数据处理成想要的结果。
我们使用ADD FILE 为Hive增加一个脚本,或者Jar包。
有两种方式:
ADD FILE {env:HOME}/your_file/your_script.py
ADD FILE /home/your_name/your_file/your_script.py
在调用的时候,过去的版本可以使用:
FROM u_data
SELECT
TRANSFORM (userid, movieid, rating)
USING 'python /home/dacoolbaby/test_data_mapper3.py'
AS str
;
但是在Hive 0.10貌似不支持这样弄。
FROM u_data
SELECT
TRANSFORM (userid, movieid, rating)
USING 'python test_data_mapper3.py'
AS str
;
后面的是脚本的名称,而不是整个的路径名。
以后在Hive下面使用Hadoop Distributed Cache要注意这个问题。