您的位置:首页 > 数据库 > MySQL

Hive的学习笔记1-hive的安装和mysql的连接

2016-04-28 14:56 645 查看
本文为传智播客Hadoop八天——第六天学习笔记

1. 安装hive

http://hive.apache.org/downloads.html 下载合适的版本,目前hive的最高版本是2.0.0。但是我使用的时候总是莫名报错QAQ。所以选了1.2.1版。

解压后放入合适的路径。配置环境变量:

sudo gedit /etc/profile


export HIVE_HOME=/home/devil/soft/hive-1.2.1
export PATH=$PATH:$HIVE_HOME/bin


此时在命令行键入hive就可以进入Hive的外壳环境(shell)。

hive>


2.安装mysql

hive本身自带数据库,但是会在打开命令行的当前目录下见表,不适合管理和使用。因此大都使用hive在mysql中建表。

sudo apt-get install mysql-server
apt-get isntall mysql-client
sudo apt-get install libmysqlclient-dev


登录mysql(root为mysql初始的用户名,123是我自己设的密码)

mysql -uroot -p123


3.将hive和mysql组合

将hive/conf/hive-default.xml.template复制一份,命名为hive-site.xml

打开hive-site.xml,可以将原本的内容全部删除

替换为以下内容

<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!--mysql的用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!--mysql的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123</value>
</property>
</configuration>


将mysql的驱动jar包拷到hive的解压目录下的lib文件夹中。这时候hive就可以和mysql一起用了(。・`ω´・)

4.hive的实际使用

使用hive创建一个表,表有三列,分别为phonenbr(string类型),upflow(int类型),downflow(int类型)

create table t_flow(phonenbr string,upflow int,downflow int)
row format delimited
fields terminated by '\t';


上面的声明指明了t_flow这个表所能上传的数据文件的每一行用制表符分开作为字段中的值。

上传一个文件作为表中的数据

13887654321 220 330

13997654321 230 320

13777654321 240 310

13667654321 250 300

例如上面格式的文件。

load data local inpath '/home/devil/example/cc.txt' overwrite into table t_flow;


local 代表的是本地路径,也可以上传hdfs中的文件。

overwrite代表上传是删除表对应目录中已有的所有文件。

查询表中的数据

select * from t_flow;


有时候查询不能使用hive自带的函数来表示,此时可以使用UDF自己定义脚本。

package cn.bigdata;

import java.util.HashMap;

import org.apache.hadoop.hive.ql.exec.UDF;

public class PhoneNbrToArea extends UDF {

private static HashMap<String,String> areaMap= new HashMap<>();
static{
areaMap.put("1388", "beijing");
areaMap.put("1399", "tianjin");
areaMap.put("1366", "nanjing");
}

public String evaluate(String pnb){

String result  = areaMap.get(pnb.substring(0,4))==null? (pnb+"    huoxing"):(pnb+"  "+areaMap.get(pnb.substring(0,4)));
return result;

}

}


将上面的java文件导成jar包,上传到hive中。

add jar /home/devil/example/hiveudf.jar;


为这个jar包中的脚本方法起一个别名

create temporary function getarea as 'cn.bigdata.PhoneNbrToArea';


使用这个udf

select getarea(phonenbr),upflow,downflow from t_flow;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: