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-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:
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;
hive默认使用内嵌的derby数据库存储metadata数据,默认存储路径为“hive-0.7.0/bin/metastore_db”,内嵌的方式不允许多个用户同时操作hive命令,如果两个人同时操作hive,第二个人会报错。
metadata可以存储在JDO支持的数据库,通过,
这两个属性指定。初始化数据库的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文件夹
LOCAL:该参数说明待导入文件路径为本地路径,如果没有这个参数则需要指定HDFS路径
INPATH:后面的参数如果是path会导入文件夹所有文件
OVERWRITE:先删除存在文件(包括它的copy_x文件),再LOAD新文件;如果去除这个参数,当遇到相同文件时新文件导入hdfs后,会改名为:existFile_copy_1 existFile_copy_2
PARTITION :指定当前数据存放分区,分区有利于分解大数据job,更好使用集群多机器的优势。
example文件路径:hive-0.7.0/src/ql/src/test/queries/positive/
SQL执行完会将结果显示在console上,但结果不会保存,包含PARTITION的表,在where语句中必须包含PARTITION字段的限定
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,好了。