下载安装
tar -zxf hive-0.7.0.tar.gz
cd hive-0.7.0
vi ~/.bashrc
export HIVE_HOME={you_hive_home_here}
export PATH=$HIVE_HOME/bin:$PATH
初始化HDFS路径
hadoop fs -mkdir /tmp hadoop fs -mkdir /user/hive/warehouse hadoop fs -chmod g+w /tmp hadoop fs -chmod g+w /user/hive/warehouse
HIVE配置
hive配置文件路径为:hive-0.7.0/conf/hive-default.xml
可以在hive命令执行同时时覆盖配置文件的属性: bin/hive -hiveconf x1=y1 -hiveconf x2=y2
可以在hive中设置hadoop的属性:SET mapred.job.tracker=myhost.mycompany.com:50030;
从0.7版本开始hive支持local运行模式,命令:
SET mapred.job.tracker=local;
从0.7版本开始hive支持自动map reduce job local运行模式,命令:
hive> SET hive.exec.mode.local.auto=true;
如下情况,会自动启动local map reduce job:
- job的全部输入小于“hive.exec.mode.local.auto.inputbytes.max ”(默认128MB)
- map任务数量小于“hive.exec.mode.local.auto.tasks.max”(默认为4)
- reduce任务数量为“1”或者“0”
hive的默认log路径为:hive.log.dir=/tmp/${user.name}
下面是常用语句:
CREATE TABLE pokes (foo INT, bar STRING); CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING); SHOW TABLES; SHOW TABLES '.*s'; DESCRIBE invites; ALTER TABLE pokes ADD COLUMNS (new_col INT); ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment'); ALTER TABLE events RENAME TO 3koobecaf; DROP TABLE pokes;
Metadata文件存储
hive默认使用内嵌的derby数据库存储metadata数据,默认存储路径为“hive-0.7.0/bin/metastore_db”,内嵌的方式不允许多个用户同时操作hive命令,如果两个人同时操作hive,第二个人会报错。
metadata可以存储在JDO支持的数据库,通过,
javax.jdo.option.ConnectionDriverName
这两个属性指定。初始化数据库的schema在“hive-0.7.0/src/metastore/src/model/package.jdo”文件
建议:修改hive-default.xml文件“javax.jdo.option.ConnectionURL”属性为jdbc:derby:;databaseName=/where_you_want_path/metastore_db;create=true这样你在任何地方执行hive都可以找到meta数据了,否则每个新的路径执行hive都会创建metastore_db文件夹
DML操作
LOCAL:该参数说明待导入文件路径为本地路径,如果没有这个参数则需要指定HDFS路径
INPATH:后面的参数如果是path会导入文件夹所有文件
OVERWRITE:先删除存在文件(包括它的copy_x文件),再LOAD新文件;如果去除这个参数,当遇到相同文件时新文件导入hdfs后,会改名为:existFile_copy_1 existFile_copy_2
PARTITION :指定当前数据存放分区,分区有利于分解大数据job,更好使用集群多机器的优势。
SQL操作
example文件路径:hive-0.7.0/src/ql/src/test/queries/positive/
SQL执行完会将结果显示在console上,但结果不会保存,包含PARTITION的表,在where语句中必须包含PARTITION字段的限定
INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';
INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;
INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;
- DIRECTORY:将保存结果到hdfs中
- LOCAL DIRECTORY:结果保存到本地文件中
- TABLE:结果保存到其它表文件夹中
userid INT,
movieid INT,
rating INT,
unixtime STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;
安装过程遇到问题
Q:java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.endsWith(Ljava/lang/String;Ljava/lang/String;)Z
A:问题是hadoop的lib下有一个common-lang的jar与hive的lib中common-lang冲突了,干掉hadoop中的jar,好了。