hive脚本变量
1. hive sql 中 怎么用变量
第一步先准备测试表和测试数据用于后续测试:
hive> create database test;
OK
Time taken: 2.606 seconds
然后执行建表和导入数据的sql文件:
[[email protected] testHivePara]$ hive -f student.sql
Hive history file=/tmp/crazyant.net/hive_job_log_czt_201309131615_1720869864.txt
OK
Time taken: 2.131 seconds
OK
Time taken: 0.878 seconds
Copying data from file:/home/users/czt/testdata_student
Copying file: file:/home/users/czt/testdata_student
Loading data to table test.student
OK
2. Hive常用命令
#hive相关资料
#http://blog.csdn.net/u013310025/article/details/70306421
#https://www.cnblogs.com/guanhao/p/5641675.html
#http://blog.csdn.net/wisgood/article/details/40560799
#http://blog.csdn.net/seven_zhao/article/details/46520229
#获取主机相关信息
export password='qwe'
export your_ip=$(ip ad|grep inet|grep -v inet6|grep -v 127.0.0.1|awk '{print $2}'|cut -d/ -f1)
export your_hosts=$(cat /etc/hosts |grep $(echo $your_ip)|awk '{print $2}')
#安装mysql
echo "mysql-server-5.5 mysql-server/root_password password $password" | debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password $password" | debconf-set-selections
apt-get -y install mariadb-server python-pymysql --force-yes
echo "[mysqld]
bind-address = $your_ip
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8" | tee > /etc/mysql/conf.d/openstack.cnf
sed -i "s/127.0.0.1/0.0.0.0/g" /etc/mysql/mariadb.conf.d/50-server.cnf
service mysql restart
#创建hive用户和赋予权限
mysql -uroot -p$password <<EOF
CREATE DATABASE hive;
CREATE USER 'hive' IDENTIFIED BY "$password";
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
flush privileges;
EOF
#增加hive环境变量
hive_flag=$(grep "hive" /etc/profile)
if [ ! -n "$hive_flag" ]; then
sed -i "s/\$PATH:/\$PATH:\/opt\/apache-hive-2.3.2-bin\/bin:/g" /etc/profile
else
echo "Already exist!"
fi
#使脚本中环境变量生效
source /etc/profile
#修改hive配置
echo "$(grep "JAVA_HOME=" /etc/profile)
$(grep "HADOOP_HOME=" /etc/profile)
export HIVE_HOME=/opt/apache-hive-2.3.2-bin
export HIVE_CONF_DIR=/opt/apache-hive-2.3.2-bin/conf" |tee >> /opt/apache-hive-2.3.2-bin/conf/hive-env.sh
sed -i "s/hadoop3/$your_hosts/g" /opt/apache-hive-2.3.2-bin/conf/hive-site.xml
#在hdfs 中创建下面的目录 ,并赋予所有权限
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -mkdir -p /user/hive/log
hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/tmp
hdfs dfs -chmod -R 777 /user/hive/log
mkdir -p /user/hive/tmp
#初始化hive
schematool -dbType mysql -initSchema
#安装hive到此结束
#######################
#创建hive表
create table film
(name string,
time string,
score string,
id int,
time1 string,
score1 string,
name2 string,
score2 string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ';'
STORED AS TEXTFILE;
#将本地文本导入hive
load data local inpath '/root/my.txt' overwrite into table film;
#hive相关笔记
create table patition_table(name string,salary float,gender string) partitioned by (dt string,dep string) row format delimited fields terminated by ',' stored as textfile;
create database movie;
create table movie(name string,data string,record int);
#删除表
DROP TABLE if exists movies;
#创建表
CREATE TABLE movies(
name string,
data string,
record int
) COMMENT '2014全年上映电影的数据记录' FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
load data local inpath 'dat0204.log' into table movies;
#hive 中使用dfs命令
hive> dfs -ls /user/hive/warehouse/wyp ;
select * from movies;
hive -e "select * from test" >> res.csv
或者是:
hive -f sql.q >> res.csv
其中文件sql.q写入你想要执行的查询语句
#导出到本地文件系统
hive> insert overwrite local directory '/home/wyp/wyp'
hive> select * from wyp;
导出到HDFS中
和导入数据到本地文件系统一样的简单,可以用下面的语句实现:
hive> insert overwrite directory '/home/wyp/hdfs'
hive> select * from wyp;
将会在HDFS的/home/wyp/hdfs目录下保存导出来的数据。注意,和导出文件到本地文件系统的HQL少一个local,数据的存放路径就不一样了。
#将提取到的数据保存到临时表中
insert overwrite table movies
本地加载 load data local inpath '/Users/tifa/Desktop/1.txt' into table test;
从hdfs上加载数据 load data inpath '/user/hadoop/1.txt' into table test_external;
抹掉之前的数据重写 load data inpath '/user/hadoop/1.txt' overwrite into table test_external;
3. hive语句中含有特殊符合$,导致使用hive -e "语句"时,引用不到变量
最近遇到的问题,由于hive语句中字段包含特殊符号 id` ,没有问题。
但是因为我要在shell里循环多个日期跑,使用hive -e "语句"时,却报错,最后排查是因为hive -e后面接双引号的话,会导致反引号失效,导致shell认为$id是参数。
解决方式:需要用hive -e '语句'来执行,并且将语句中本来判断条件的单引号换为双引号,需要传参的地方,用双引号+单引号参数即"'参数'"的形式。
4. 在Hive中如何实现数据分区
一、Hive only:加载分区数据的快捷方法
如果指定的分区不存在Hive将创建新的分区
但是在hive分区中我们应该注意一些问题,比如:
(1)注意:Beeline设置的Hive变量只在当前会话有效,系统管理员可以设置永久生效
(2)注意:如果分区列有很多唯一值,将会创建很多分区
另外,我们可以给Hive配置参数来限制分区数 :
(1) hive.exec.max.dynamic.partitions.pernode
查询在某个节点上可以创建的最大动态分区数,默认100
(2) hive.exec.max.dynamic.partitions
一个HiveQL语句可以创建的最大动态分区数 ,默认1000
(3)hive.exec.max.created.files
一个查询总共可以创建的最大动态分区数,默认1000000
5. 如何每日增量加载数据到Hive分区表
加载数据
数据加载到Hive分区表(两个分区,日期(20160316)和小时(10))中
每日加载前一天的日志文件数据到表db_track.track_log
1.
数据存储
数据日志文件,放入某个目录下,每天日志文件放入同一个目录
eg:
20160316
-
目录名称
日志文件数据,每个小时生成一个文件,一天总共有二十四个文件
eg:
2016031820
2.
shell脚本编写
负责调度的shell脚本load_tracklogs.sh
注:这里涉及到了两个点:1)for循环
2)
linux下字符串的截取${line:0:4}
3)
传递参数到hive的sql脚本
#!/bin/sh
##
环境变量生效
.
/etc/profile
##
HIVE
HOME
HIVE_HOME=/opt/cdh5.3.6/hive-0.13.1-cdh5.3.6
##
日志目录
LOG_DIR=/data/tracklogs
##
目录名称,
依据日期date获取
yesterday=`date
-d
-1days
'+%Y%m%d'`
###
for
line
in
`ls
$LOG_DIR/${yesterday}`
do
echo
"loading
$line
.............."
#从文件名称中解析出日期和小时
daily=${line:0:4}${line:4:2}${line:6:2}
hour=${line:8:2}
LOAD_FILE=${LOG_DIR}/${yesterday}/${line}
###
echo
$daily
+
$hour
###
${HIVE_HOME}/bin/hive
-e
"LOAD
DATA
LOCAL
INPATH
'${LOAD_FILE}'
OVERWRITE
INTO
TABLE
db_track.track_log
PARTITION(date
=
'${daily}',
hour
=
'${hour}')
;"
${HIVE_HOME}/bin/hive
--hiveconf
LOAD_FILE_PARAM=${LOAD_FILE}
--hiveconf
daily_param=${daily}
--hiveconf
hour_param=${hour}
-f
/home/hadoop/load_data.sql
done
负责加载数据的sql脚本
注:
怎么在HQL脚本中获取外接传递的参数
LOAD
DATA
LOCAL
INPATH
'${hiveconf:LOAD_FILE_PARAM}'
OVERWRITE
INTO
TABLE
db_track.track_log
PARTITION(date
=
'${hiveconf:daily_param}',
hour
=
'${hiveconf:hour_param}')
;
制定每天定时执行
可以在当前用户下直接创建:crontab
-e
注:crontab中的五个
*号分别代表分,时,日,月,周,下面的例子就是每天晚上1点30运行任务的例子,注意sh命令前一般需要加上绝对路径
#
LODAD
DATA
INTO
TRACK_LOG
30
1
*
*
*
/bin/sh
/home/hadoop/load_tracklogs.sh
6. 为什么使用HiveHive提供了什么Hive支持哪些用户
为什么使用Hive?
为什么使用Hive?那么,在哪里使用Hive呢?在载入了60亿行(经度、维度、时间、数据值、高度)数据集到MySQL后,系统崩溃了,并经历过数据丢失。这可能部分是因为我们最初的策略是将所有的数据都存储到单一的一张表中了。后来,我们调整了策略通过数据集和参数进行分表,这有所帮助但也因此引入了额外的消耗,而这并非是我们愿意接受的。
相反,我们决定尝试使用Apache Hive技术。我们安装了Hive 0.5 + 20,使用CDHv3和Apache Hadoop(0 20 2 + 320)。CDHv3还包含有许多其他相关工具,包括Sqoop和Hue这些在我们的架构中都标识出来了,如图23-3底部所示。
我们使用Apache Sqoop转储数据到Hive中,然后通过写一个Apache OODT包装器,来使Hive按照空间/时间约束查询数据,然后将结果提供给RCMET和其他用户(图23-2中间部分显示)。RCMES集群的完整的架构如图23- 3所示。我们有5台机器,包括图中所示的一个主/从配置,通过一个运行GigE的私人网进行连接。
Hive提供了什么
Photobucket公司使用Hive的主要目标是为业务功能、系统性能和用户行为提供答案。为了满足这些需求,我们每晚都要通过Flume从数百台服务器上的MySQL数据库中转储来自Web服务器和自定义格式日志TB级别的数据。这些数据有助于支持整个公司许多组织,比如行政管理、广告、客户支持、产品开发和操作,等等。对于历史数据,我们保持所有MySQL在每月的第一天创建的所有的数据作为分区数据并保留30天以上的日志文件。Photobucket使用一个定制的ETL框架来将MySQL数据库中数据迁移到Hive中。使用Flume将日志文件数据写入到HDFS中并按照预定的Hive流程进行处理。
Hive支持的用户有哪些
行政管理依赖于使用Hadoop提供一般业务健康状况的报告。Hive允许我们解析结构化数据库数据和非结构化的点击流数据,以及业务所涉及的数据格式进行读取。
广告业务使用Hive筛选历史数据来对广告目标进行预测和定义配额。产品开发无疑是该组织中产生最大数量的特定的查询的用户了。对于任何用户群,时间间隔变化或随时间而变化。Hive是很重要的,因为它允许我们通过对在当前和历史数据中运行A / B测试来判断在一个快速变化的用户环境中新产品的相关特性。
在Photobucket公司中,为我们的用户提供一流的系统是最重要的目标。从操作的角度来看,Hive被用来汇总生成跨多个维度的数据。在公司里知道最流行的媒体、用户、参考域是非常重要的。控制费用对于任何组织都是重要的。一个用户可以快速消耗大量的系统资源,并显着增加每月的支出。Hive可以用于识别和分析出这样的恶意用户,以确定哪些是符合我们的服务条款,而哪些是不符合的。也可以使用Hive对一些操作运行A / B测试来定义新的硬件需求和生成ROI计算。Hive将用户从底层MapRece代码解放出来的能力意味着可以在几个小时或几天内就可以获得答案,而不是之前的数周。
Hive中的数据库
Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间。然而,对于具有很多组和用户的大集群来说,这是非常有用的,因为这样可以避免表命名冲突。通常会使用数据库来将生产表组织成逻辑组。
如果用户没有显式指定数据库,那么将会使用默认的数据库default。
下面这个例子就展示了如何创建一个数据库:
hive> CREATE DATABASE financials;
如果数据库financials已经存在的话,那么将会抛出一个错误信息。使用如下语句可以避免在这种情况下抛出错误信息:
hive> CREATE DATABASE IF NOT EXISTS financials;
虽然通常情况下用户还是期望在同名数据库已经存在的情况下能够抛出警告信息的,但是IF NOT EXISTS这个子句对于那些在继续执行之前需要根据需要实时创建数据库的情况来说是非常有用的。
在所有的数据库相关的命令中,都可以使用SCHEMA这个关键字来替代关键字TABLE。
随时可以通过如下命令方式查看Hive中所包含的数据库:
hive> SHOW DATABASES;
default
financials
hive> CREATE DATABASE human_resources;
hive> SHOW DATABASES;
default
financials
human_resources
如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名,正则表达式这个概念,将会在第6.2.3节“Like和RLike”介绍。下面这个例子展示的是列举出所有以字母h开头,以其他字符结尾(即.*部分含义)的数据库名:
hive> SHOW DATABASES LIKE 'h.*';
human_resources
hive> ...
Hive会为每个数据库创建一个目录。数据库中的表将会以这个数据库目录的子目录形式存储。有一个例外就是default数据库中的表,因为这个数据库本身没有自己的目录。
数据库所在的目录位于属性hive.metastore.warehouse.dir所指定的顶层目录之后,这个配置项我们已经在前面的第2.5.1节“本地模式配置”和第2.5.2节“分布式模式和伪分布式模式配置”中进行了介绍。假设用户使用的是这个配置项默认的配置,也就是/user/hive/warehouse,那么当我们创建数据库financials时,Hive将会对应地创建一个目录/user/hive/warehouse/financials.db。这里请注意,数据库的文件目录名是以.db结尾的。
用户可以通过如下的命令来修改这个默认的位置:
hive> CREATE DATABASE financials
> LOCATION '/my/preferred/directory';
用户也可以为这个数据库增加一个描述信息,这样通过DESCRIBE DATABASE <database> 命令就可以查看到该信息。
hive> CREATE DATABASE financials
> COMMENT 'Holds all financial tables';
hive> DESCRIBE DATABASE financials;
financials Holds all financial tables
hdfs://master-server/user/hive/warehouse/financials.db
从上面的例子中,我们可以注意到,DESCRIEB DATABASE语句也会显示出这个数据库所在的文件目录位置路径。在这个例子中,URI格式是hdfs。如果安装的是MapR,那么这里就应该是maprfs。对于亚马逊弹性MapRece(EMR)集群,这里应该是hdfs,但是用户可以设置hive.metastore.warehouse.dir为亚马逊S3特定的格式(例如,属性值设置为s3n://bucketname...)。用户可以使用s3作为模式,但是如果使用新版的规则s3n会更好。
前面DESCRIBE DATABASE语句的输出中,我们使用了master-server来代表URI权限,也就是说应该是由文件系统的“主节点”(例如,HDFS中运行NameNode服务的那台服务器)的服务器名加上一个可选的端口号构成的(例如,服务器名:端口号这样的格式)。如果用户执行的是伪分布式模式,那么主节点服务器名称就应该是localhost。对于本地模式,这个路径应该是一个本地路径,例如file:///user/hive/warehouse/financials.db。
如果这部分信息省略了,那么Hive将会使用Hadoop配置文件中的配置项fs.default.name作为master-server所对应的服务器名和端口号,这个配置文件可以在$HADOOP_HOME/conf这个目录下找到。
需要明确的是,hdfs:///user/hive/warehouse/financials.db和hdfs://master-server/user/hive/
warehouse/financials.db是等价的,其中master-server是主节点的DNS名和可选的端口号。
为了保持完整性,当用户指定一个相对路径(例如,some/relative/path)时,对于HDFS和Hive,都会将这个相对路径放到分布式文件系统的指定根目录下(例如,hdfs:///user/<user-name>)。然而,如果用户是在本地模式下执行的话,那么当前的本地工作目录将是some/relative/path的父目录。
为了脚本的可移植性,通常会省略掉那个服务器和端口号信息,而只有在涉及到另一个分布式文件系统实例(包括S3存储)的时候才会指明该信息。
此外,用户还可以为数据库增加一些和其相关的键-值对属性信息,尽管目前仅有的功能就是提供了一种可以通过DESCRIBE DATABASE EXTENDED <database>语句显示出这些信息的方式:
hive> CREATE DATABASE financials
> WITH DBPROPERTIES ('creator' = 'Mark Moneybags', 'date' = '2012-01-02');
hive> DESCRIBE DATABASE financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
hive> DESCRIBE DATABASE EXTENDED financials;
financials hdfs://master-server/user/hive/warehouse/financials.db
{date=2012-01-02, creator=Mark Moneybags);
USE命令用于将某个数据库设置为用户当前的工作数据库,和在文件系统中切换工作目录是一个概念:
hive> USE financials;
现在,使用像SHOW TABLES这样的命令就会显示当前这个数据库下所有的表。
不幸的是,并没有一个命令可以让用户查看当前所在的是哪个数据库!幸运的是,在Hive中是可以重复使用USE…命令的,这是因为在Hive中并没有嵌套数据库的概念。
可以回想下,在第2.7.2节“变量和属性”中提到过,可以通过设置一个属性值来在提示符里面显示当前所在的数据库(Hive v0.8.0版本以及之后的版本才支持此功能):
hive> set hive.cli.print.current.db=true;
hive (financials)> USE default;
hive (default)> set hive.cli.print.current.db=false;
hive> ...
最后,用户可以删除数据库:
hive> DROP DATABASE IF EXISTS financials;
IF EXISTS子句是可选的,如果加了这个子句,就可以避免因数据库finanacials不存在而抛出警告信息。
默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表:
hive> DROP DATABASE IF EXISTS financials CASCADE;
如果使用的是RESTRICT这个关键字而不是CASCADE这个关键字的话,那么就和默认情况一样,也就是,如果想删除数据库,那么必须先要删除掉该数据库中的所有表。
如果某个数据库被删除了,那么其对应的目录也同时会被删除。
7. hive中怎么循环查询语句,比如循环查询第1-6条记录。能不能定义个变量让它从1增加到6,谢谢回答!
I是计数变量,也就是控制运算次数的,I的赋值你完全可以自己定义,不是唯一的,这里用I=2,是为了简化程序,让I既做计数变量,又可以用来参与运算---S4T“=”T×I;T赋予1是因为要从1连乘到5,其实你也可以把程序倒过来写,从5连乘到1解:S1T“=”(赋值语句的符号)5S2I“=”4S3如果I大于等于(懒得找符号)1,那么转S4,否则转S6;S4T“=”T×I;S5I“=”I-1,转S3;S6输出T
8. CDH Hive 配置HiveServer2
翻译: https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_ig_hiveserver2_configure.html
版本:5.14.2
在使用HiveServer2之前,您必须进行以下配置更改。不这样做可能会导致不可预知的行为。
警告: HiveServer1在CDH 5.3起不推荐使用,并且将在未来的CDH版本中删除。HiveServer1的用户应该尽快升级到 HiveServer2 。
重要提示:这些数字只是一般性指导,可能会受到诸如列数,分区,复杂联接和客户端活动等因素的影响。根据您的预期部署,通过测试进行优化以达到您的环境的最佳值。
有关为HiveServer2配置堆以及Hive Metastore和Hive客户端的信息,请参阅 Hive组件的堆大小和垃圾收集 以及以下视频:
解决HiveServer2服务崩溃问题
当您启动视频,请点击YouTube上在播放器窗口的右下角看它在YouTube上,你可以调整它的大小更清晰的观看。 (!--)
您必须正确配置并启用Hive的表锁管理器。这需要安装ZooKeeper并设置一个ZooKeeper集合; 请参阅 ZooKeeper安装 。
重要提示:如果不这样做将会阻止HiveServer2处理并发查询请求,并可能导致数据损坏。
通过设置属性启用锁管理器 /etc/hive/conf/hive-site.xml 如下所示(用实例中的实际ZooKeeper节点名替换):
重要提示:启用表锁管理器而不指定有效的Zookeeper法定节点列表将导致不可预知的行为。确保两个属性都已正确配置。
(如果您仍在使用HiveServer1,还需要上述设置。不推荐使用HiveServer1;尽快迁移到HiveServer2。)
如果ZooKeeper没有使用ClientPort默认值,你需要设置 hive.zookeeper.client.port 与ZooKeeper使用的值相同。检查/etc/zookeeper/conf/zoo.cfg 以找到ClientPort值。如果ClientPort 设置为除2181(默认值)以外的任何值,设置hive.zookeeper.client.port 。例如,如果ClientPort 设置为2222,设置 hive.zookeeper.client.port 也是2222:
HiveServer2和HiveServer1的连接URL格式和驱动程序类别不同:
HiveServer2可以 配置 为验证所有连接; 默认情况下,它允许任何客户端连接。HiveServer2支持 Kerberos 或 LDAP 身份验证; 配置属性为hive.server2.authentication 。您还可以配置 可插入身份验证 ,它允许您为HiveServer2使用自定义身份验证提供程序; 和 HiveServer2 Impersonation ,它允许用户以连接用户的身份执行查询和访问HDFS文件,而不是启动HiveServer2守护进程的超级用户。有关更多信息,请参阅 Hive安全配置 。
警告:由于并发和安全问题,HiveServer1和Hive CLI在CDH 5中不推荐使用,并且将在未来版本中删除。Cloudera建议您尽快迁移到 Beeline 和 HiveServer2 。如果您使用HiveServer2的Beeline,则不需要Hive CLI。
HiveServer2和HiveServer1可以在同一个系统上并发运行,共享相同的数据集。这允许您运行HiveServer1以支持使用本机HiveServer1 Thrift绑定的Perl或Python脚本。
默认情况下,HiveServer2和HiveServer1都绑定到端口10000,所以至少其中一个必须配置为使用不同的端口。您可以通过hive -site.xml中的hive.server2.thrift.port 设置HiveServer2的端口属性。例如:
您也可以通过设置这些环境变量来指定端口(以及HiveServer2的主机IP地址):
9. 在hive查询中使用变量
Hive配置属性存储于 hiveconf 命名空间中,该命名空间中的属性是可读写的。在查询语句中插入 '${hiveconf:变量名}' ,就可以通过 hive -hiveconf来替换变量。例如,查询语句和执行方式如下:
需要注意的是:
Hive命令行变量,存储于 hivevar 命名空间中,该命名空间中的变量是可读写的。使用方式和hive配置属性类似,只是在查询语句中插入的是 '${hivecar:变量名}' ,其中命名空间"hivecar:"可以省略。例如:
因为命令行变量的命名空间是唯一可以省略的,因此:
其他替换变量的方法:
利用shell脚本设置hive查询语句中的变量
利用Python替换Hive查询语句中的变量
10. hive在启动过程中会去环境变量中找哪个hadoop的变量
一、hive配置
1.安装环境
在hadoop-1.2.1集群上安装hive-1.2.1
2.将hive-1.2.1环境变量添加到PATH路径下
使用如下命令打开配置文件
nano /etc/profile
在打开的配置文件里添加如下代码
export HIVE_HOME=/opt/hive-1.2.1PATH=$HIVE_HOME/bin:$PATH
3.配置hive-default.xml和hive-site.xml
在/opt/hive-1.2.1/conf目录下没有这两个文件夹,只有一个hive-default.xml.template,复制hive-default.xml.template,命名为hive-default.xml。
然后修改hive-default.xml文件里的内容,将默认的路径换成绝对路径,具体修改如下图:
然后复制hive-default.xml,命名为hive-site.xml。
在/opt/hive-1.2.1/conf只有hive-env.sh.template文件,复制hive-site.sh.template并命名为hive-site.sh,然后修改hive-site.sh文件权限,使用如下命令
chmod u+x hive-env.sh
4.配置hive-log4j.properties
在/opt/hive-1.2.1/conf目录下只有hive-log4j.properties.template文件,复制hive-log4j.properties.template并命名为hive-log4j.properties,命令如下
cp hive-log4j.properties.template hive-log4j.properties
将log4j.appender.EventCounter=org.apache.hadoop.hive.shims.HiveEventCounter
修改为:log4j.appender.EventCounter=org.apache.hadoop.log.metrics.EventCounter
否则会出现警告:
WARN conf.HiveConf: HiveConf of name hive.metastore.local does not exist
WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.
5.启动hive
使用命令hive启动
二、在启动过程中出现的问题
1./tmp/hive文件权限问题
解决方案:需要使用如下命令修改/tmp/hive文件权限
hadoop fs -chmod -R 777 /tmp/hive
2.找不到路径问题
解决方案:需要按照上述步骤3来配置hive-default.xml和hive-site.xml文件。