0x01 环境说明
OS: CentOS-6.5-x86_64
java: jdk1.8.0_111
hadoop: hadoop-2.6.5
hive: hive-2.1.1
0x02 安装配置
2.1 下载
下载地址:http://www.apache.org/dyn/closer.cgi/hive
安装版本:apache-hive-2.1.1-bin.tar.gz
2.2 安装
$ tar -zxvf apache-hive-2.1.1-bin.tar.gz
$ mv apache-hive-2.1.1 /home/hadoop/cloud/
# 建立软链,方便管理多个版本
$ ln -s /home/hadoop/cloud/apache-hive-2.1.1 /home/hadoop/cloud/hive
2.3 配置环境变量
# vim /etc/profile
//最后一行追加
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf
使配置文件生效
# source /etc/profile
# su hadoop
$ source /etc/profile
2.4 在HDFS上创建hive数据文件目录
在HDFS中建立用于存储Hive数据的文件目录(/tmp 目录可能已经存在):
hadoop fs -mkdir /tmp
hadoop fs -mkdir /user
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
以上命令在HDFS中建立了/tmp及/usr/hive/warehouse目录,其中/tmp主要用于存放一些执行过程中的临时文件,/user/hive/warehouse用于存放hive进行管理的数据文件。
2.5 配置hive-site.xml
这一步不是必须的,如果不配置,Hive将使用默认的配置文件,通过Hive配置文件可以对Hive进行定制及优化。最常见的是对“元数据存储层”的配置,默认情况下Hive使用Derby
数据库作为“元数据存储层”。
在Hive中Derby默认使用“单用户”模式进行启动,这就意味着同一时间只能有一个用户使用Hive,这适用于开发程序时做本地测试。
Hive配置文件位于$Hive_Home/conf目录下面,名为hive-site.xml
,这个文件默认情况下是不存在的,需要进行手动创建,在此目录下有个hive-default.xml.template
的模板文件,首先需要通过它创建hive-site.xml
文件。
$ cp hive-default.xml.template hive-site.xml
关于元数据库Dergy的默认配置如下:
<!--JDBC元数据仓库连接字符串-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:derby:;databaseName=metastore_db;create=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--JDBC元数据仓库驱动类名-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.apache.derby.jdbc.EmbeddedDriver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--元数据仓库用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>APP</value>
<description>Username to use against metastore database</description>
</property>
<!--元数据仓库密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mine</value>
<description>password to use against metastore database</description>
</property>
从上面的配置中可以看到关于元数据库的配置,由于Hive中已经包含了这个内置的Derby数据库,因此不需要进行数据库的安装,同时在$Hive_Home/lib下还可以看到Derby的数据库驱动包(derby-xx.x.x.x.jar)。至此已经完成Hive各项工作的安装,可以通过以下命令测试Hive是否正常运行:
hive
hive> SET -v;
hive> quit;
可能出现的错误
Exception in thread “main” Java.lang.RuntimeException: java. lang. IllegalArgumentException: java.NET.URISyntaxException: Relative path in absolute URI: \({system:java.io.tmpdir%7D/\)%7Bsystem:user.name%7D
处理:
在hive-site.xml中新建配置项,iotmp文件夹是新建的:
<property>
<name>system:java.io.tmpdir</name>
<value>/home/hadoop/hive/iotmp</value>
</property>
0x03 配置MySQL元数据库替换Derby
如前所述,Hive在缺省情况下是使用内置的Derty数据库存储元数据,这对程序开发时本地测试没有任何问题。但如果在生产环境中,由于需要支持多用户同时进行系统访问,这可能不能满足应用需求。通过配置,可以让Derty运行为“多用户”模式来满足多用户访问需求。进一步,在实际的生产环境中通常会选用存储功能更为强大的Mysql数据库作为“元数据存储层”。Mysql作为最流行的开源关系型数据库,使用面广、功能多样,必要时可以充当临时的标准数据查询与分析系统使用,因此得到大量的Hive用户的青睐。
如果使用Mysql作为“元数据存储层”,首先需要安装Mysql。
CentOS 6.5通过yum安装和配置MySQL
3.1 创建hive账号并授权
安装之后再数据库中建立Hive账号并设置权限:
$ mysql -u root -p
mysql> create user 'hive'@'%' identified by 'hive';
mysql> grant all privileges on *.* to 'hive'@'%' with grant option;
mysql> flush privileges;
3.2 配置hive-sive.xml
接下来需要对hive-sive.xml
配置文件进行以下修改,以支持mysql:
因为默认hive-site.xml中内容太多,可以新建一个hive-site.xml将下面代码复制进去即可。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>driver name</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
<property>
<name>datanucleus.schema.autoCreateTables</name>
<value>true</value>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--property>
<name>hive.metastore.schema.local</name>
<value>false</value>
</property-->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
</configuration>
3.3 添加Mysql JDBC驱动
由于Hive没有默认包含Mysql的JDBC驱动,因此需要将mysql-connector-java-x.x.xx.jar
文件拷贝到$Hive_Home/lib
目录中,否则Hive无法与Mysql进行通信。
下载地址:https://dev.mysql.com/downloads/connector/j/
我下载的版本是:mysql-connector-java-5.1.35.tar.gz
至此,基于Mysql作为“元数据存储层”的Hive系统配置完成。
3.4 测试
3.4.1 初始化hive元数据库
执行以下指令初始化hive元数据库,否则 mysql 里面储存 hive 元数据的数据库是空的,无法启动 hive,会报错。
schematool -dbType mysql -initSchema
可能出现问题
[hadoop@master bin]$ schematool -dbType mysql -initSchema
Metastore connection URL: jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: hive
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061)
org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
Underlying cause: java.io.IOException : Schema script failed, errorcode 2
Use --verbose for detailed stacktrace.
*** schemaTool failed ***
解决办法
异常说明mysql服务已经启动。 应重新启动mysql服务再执行初始化schema操作。
$ su root
# service mysqld restart
# exit
初始化成功
[hadoop@master bin]$ schematool -dbType mysql -initSchema
Metastore connection URL: jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExit=true
Metastore Connection Driver : com.mysql.jdbc.Driver
Metastore connection User: hive
Starting metastore schema initialization to 2.1.0
Initialization script hive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed
3.4.2 启动
启动hive metastore
,然后输入命令hive即可进入hive命令行模式
$ hive --service metastore &
$ hive
hive> show tables;
参考链接:https://hexo2hexo.github.io/hive%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/(主要)
http://www.jianshu.com/p/6108e0aed204
0x04 hiveserver2配置
如果想要远程访问hive数据库还需要配置并启用hiveserver2
服务。
4.1 配置hive-site.xml
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
默认是localhost
。
4.2 启动hiveserver2
hive --service hiveserver2
4.3 使用beeline连接
beeline -u jdbc:hive2://
连接成功后显示:
[hadoop@master bin]$ beeline -u jdbc:hive2://
Connecting to jdbc:hive2://
17/09/05 12:57:18 [main]: WARN conf.HiveConf: HiveConf of name hive.metastore.schema.local does not exist
17/09/05 12:57:40 [main]: WARN conf.HiveConf: HiveConf of name hive.metastore.schema.local does not exist
17/09/05 12:57:41 [main]: WARN metastore.ObjectStore: Version information not found in metastore. hive.metastore.schema.verification is not enabled so recording the schema version 2.1.0
17/09/05 12:57:41 [main]: WARN metastore.ObjectStore: setMetaStoreSchemaVersion called but recording version is disabled: version = 2.1.0, comment = Set by MetaStore hadoop@192.168.1.10
17/09/05 12:57:42 [main]: WARN session.SessionState: METASTORE_FILTER_HOOK will be ignored, since hive.security.authorization.manager is set to instance of HiveAuthorizerFactory.
Connected to: Apache Hive (version 2.1.1)
Driver: Hive JDBC (version 2.1.1)
17/09/05 12:57:42 [main]: WARN jdbc.HiveConnection: Request to set autoCommit to false; Hive does not support autoCommit=false.
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 2.1.1 by Apache Hive
0: jdbc:hive2://> show databases;
0x05 常见问题
5.1 Unable to open a test connection to the given database
java.sql.SQLException: Unable to open a test connection to the given database. JDBC url =
解决方法:重新授权。
mysql> grant all privileges on *.* to 'username'@'master' identified by 'password';
flush privileges;
mysql> grant all privileges on *.* to 'username'@'master' identified by 'password';
mysql> flush privileges;
5.2 安装Hive过程要注意
- MySQL 是否正常运行
- 创建好mysql 用户并分配好相应的访问权限以及数据库端口号等
- mysql-connector-Java-5.1.26-bin.jar 是否放到hive/lib 目录下 建议修改权限为777 (chmod 777 mysql-connector-java-5.1.26-bin.jar)
- 修改conf/hive-site.xml 中的 “hive.metastore.schema.verification” 值为 false 即可解决 “Caused by: MetaException(message:Version information not found in metastore. )”
- 调试 模式命令 hive -hiveconf hive.root.logger=DEBUG,console
来源: http://blog.csdn.net/youngqj/article/details/19987727
5.3 Access denied for user 'DBAUSER'@'linux-96' (using password: YES)
FAILED: Error in metadata: javax.jdo.JDOFatalDataStoreException: Access denied for user 'DBAUSER'@'linux-96' (using password: YES)
解决方法,创建hive用户重新授权即可。
mysql -u root -p
mysql>create user 'hive' identified by 'hive';
mysql>grant all on *.* TO 'hive'@'%' with grant option;
mysql>flush privileges;
5.4 multbind警告
启动hive命令行时出现multbind警告解决方法
$HIVE_HOME/lib 目录下还有个 slf4j-log4j12-XXX.jar,在机器有装hadoop时,由于classpath中会有hadoop中的这个jar包,会有冲突,直接删除掉
2017.06.25
修改并上传时间
update: 2017-10-19 07:05:14 星期四
修改部分错误,重新排版。