Hive 是基于Hadoop 构建的一套数据仓库分析系统,简单来说它可以把我们所熟悉的Sql语句翻译成MapReduce执行,但是Hive只能对表进行select操作,而不能进行insert、delete、update操作。
Hive和Sqoop一样,只要你的Hadoop环境已经搭建好了,安装后就可立即使用。但是它有一个特点:就是你在哪个个目录下执行hive的命令进入到hive模式,它就会在该目录下生成metastore_db(derby数据库文件保存了hive表的信息和其在hdfs的位置),有时可以我们会忘记在哪使用这个命令,而找不到我们创建表的内容。所以下面介绍如何使用mysql来取代默认的derby.
1.配置你的mysql是可以远程登录的
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.修改hive的文件
在$HIVE_HOME/conf下,赋值一分配置文件
cp hive-default.xml.template hive-site.xml
javax.jdo.option.ConnectionURL
jdbc:mysql://slave01:3306/hive?createDatabaseIfNotExist=true
JDBC connect string for a JDBC metastore
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
Driver class name for a JDBC metastore
javax.jdo.option.ConnectionUserName
root
username to use against metastore database
javax.jdo.option.ConnectionPassword
123456
password to use against metastore database
hive.metastore.warehouse.dir
/user/hive/warehouse
location of default database for the warehouse
这里hive连接mysql需要一个可用的逻辑驱动器jar包:mysql-connector-java-5.1.26-bin.jar
下载后,把它放到$HIVE_HOME/lib目录下即可,此时无论你在哪个目录下操作hive,都会只有一个数据库。
下面介绍下如何建立Hive的表
内部表(默认),先有表再有数据(删除表,会删掉对应的数据)
create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';
内部表加载数据
load data local inpath './book.txt' overwrite into table trade_detail
create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';
create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';
分区表加载数据要指定分区
load data local inpath './book.txt' overwrite into table td_part book partition (logdate='2010-08-22');