Hive 2.1.1安装配置
来源:互联网 发布:服装收银软件 编辑:程序博客网 时间:2024/06/06 19:02
前期工作
- 安装JDK
- 安装Hadoop
- 安装MySQL
安装Hive
下载Hive安装包
可以从 Apache 其中一个镜像站点中下载最新稳定版的 Hive, apache-hive-2.1.1-bin.tar.gz。
解压安装Hive
使用以下命令安装 Hive:
sudo mv apache-hive-2.1.1-bin.tar.gz /optcd /optsudo tar -xzvf apache-hive-2.1.1-bin.tar.gz ##解压sudo ln -s apache-hive-2.1.1-bin hive ##创建软链接
设置 Hive环境变量
编辑 .bash_profile 文件, 在其中添加以下内容:
# Hive Envexport HIVE_HOME=/opt/hiveexport PATH=$PATH:$HIVE_HOME/bin
使环境变量生效:
source .bash_profile
配置Hive
配置文件重命名
在运行 Hive 之前需要使用以下命令修改配置文件:
cd /opt/hive/confcp hive-env.sh.template hive-env.shcp hive-default.xml.template hive-site.xmlcp hive-log4j2.properties.template hive-log4j2.propertiescp hive-exec-log4j2.properties.template hive-exec-log4j2.properties
修改hive-env.sh
因为 Hive 使用了 Hadoop, 需要在 hive-env.sh 文件中指定 Hadoop 安装路径:
export JAVA_HOME=/opt/java ##Java路径export HADOOP_HOME=/opt/hadoop ##Hadoop安装路径export HIVE_HOME=/opt/hive ##Hive安装路径export HIVE_CONF_DIR=/opt/hive/conf ##Hive配置文件路径
创建HDFS目录
在 Hive 中创建表之前需要创建以下 HDFS 目录并给它们赋相应的权限。
hdfs dfs -mkdir -p /user/hive/warehousehdfs dfs -mkdir -p /user/hive/tmphdfs dfs -mkdir -p /user/hive/loghdfs dfs -chmod g+w /user/hive/warehousehdfs dfs -chmod g+w /usr/hive/tmphdfs dfs -chmod g+w /usr/hive/log
修改hive-site.xml
将 hive-site.xml 文件中以下几个配置项的值设置成上一步中创建的几个路径。
<property> <name>hive.exec.scratchdir</name> <value>/user/hive/tmp</value> <description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}.</description> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property><property> <name>hive.querylog.location</name> <value>/user/hive/log</value> <description>Location of Hive run time structured log file</description> </property>
Hive Metastore
默认情况下, Hive 的元数据保存在内嵌的 Derby 数据库里, 但一般情况下生产环境会使用 MySQL 来存放 Hive 元数据。
创建数据库和用户
假定你已经安装好 MySQL。下面创建一个 hive 数据库用来存储 Hive 元数据,且数据库访问的用户名和密码都为 hive。
mysql> CREATE DATABASE hive; mysql> USE hive; mysql> CREATE USER 'hive'@'localhost' IDENTIFIED BY 'hive';mysql> GRANT ALL ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive'; mysql> GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive'; mysql> FLUSH PRIVILEGES; mysql> quit;
修改hive-site.xml
需要在 hive-site.xml 文件中配置 MySQL 数据库连接信息。
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property>
运行Hive
在命令行运行 hive 命令时必须保证以下两点:
- HDFS 已经启动。可以使用 start-dfs.sh 脚本来启动 HDFS。
- MySQL Java 连接器添加到 $HIVE_HOME/lib 目录下。我安装时使用的是 mysql-connector-java-5.1.39.jar。
从 Hive 2.1 版本开始, 我们需要先运行 schematool 命令来执行初始化操作。
schematool -dbType mysql -initSchema
终端输出信息如下:
执行成功后,可以使用 Sequel Pro 查看元数据库 hive 是否已经创建成功。
要使用 Hive CLI(Hive command line interface), 可以在终端输入以下命令:
hive
启动信息如下:
使用 show tables 来显示所有的表:
Hive用户接口—Hive Web接口HWI的操作及使用
问题导读:
1、Hive提供了哪三种用户访问接口?
2、如何手动构建hive-hwi-*.war安装包?
3、hwi 服务启动命令是什么?
4、hwi启动之前需要将哪两个包拷贝到hive安装目录的lib中?
5、使用hwi Web访问Hive数据库之前,需要首先启动哪个服务?
6、hwi的默认监听端口是?
Hive提供了三种用户接口:CLI、HWI和客户端方式。其中最常用的的就是CLI,CLI启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。 HWI是通过浏览器访问Hive。本文介绍Hive Web访问接口。
HWI是Hive Web Interface的简称,我使用的Hive的版本是Hive0.13.1。
一、终端启动HWI服务
由上可知,我们使用hive --service hwi在终端启动HWI服务,但是开始报了异常错误,hive-hwi-*.war包不存在。
注意:报错误的原因是,Hive目前的发行包里没有hwi的war包文件,这个问题在0.13和0.14上都存在,没有这个war包就不能启动hwi服务。
解决办法:从源码手动build出这个war包,具体过程如第二步。
二、手动构建Hive hwi war包
1、从Hive官网下载Hive对应版本的源码apache-hive-0.13.1-src.tar.gz,下载后解压,并进入hwi目录中。hwi目录下的web目录就是HWI的web界面目录,如下:
2、执行jar cvfM0 hive-hwi-0.13.1.war -C web/ .打包命令,即可生成我们需要的hive-hwi-0.13.1-war,并将其拷贝到hive安装目录lib目录中如下:三、在hive-site.xml中添加HWI配置
我们需要将hive-default.xml中关于HWI的一些默认配置在hive-site.xml中按照自己的要求配置。hive-site.xml中关于HWI的配置如下:
hive.hwi.war.file属性就是指定Hive Web用户接口程序安装包位置,其安装包即为我们第二部打包的文件。四、重新启动HWI服务
从启动日志来看,启动正常,不再报第一步的错误。五、启动Hive metastore服务
注意:不管是使用Hive CLI、客户端还是HWI访问Hive,都需要首先启动Hive 元数据服务,否则无法访问Hive数据库。如下:
五、使用网页访问Hive
1、我们在浏览器中输入:http://192.168.2.133:9999/hwi,192.168.2.133是我Hive安装的主机IP,可以修改为你对应的主机IP。Hive Web功能还是比较简单、界面也比较简陋,首页如下:
2、点击"Browse Schema" 查看Hive中的数据库,由下图可知,我的Hive中有两个数据库,分别是default和hive
3、点击“hive”,查看hive数据库中有哪些表,如下,我的hive数据库中只有一个“querysglog”表:
六、在Web界面执行HQL操作
1、创建session
我们在Web来执行一些Hive 查询操作,感受下Hive web用户接口。在执行查询之前,需要先创建一个session,点击“Create Session”,创建session,并取名为gxnzx,如下:
2、查看session,点击“List Sessions”,如下
3、在上图中,点击“Manager”后,输入结果文件名,和查询语句,执行提交即可执行查询操作,结果将保持在创建的文件名中。
注意:多个语句之间一定要使用分号分开。
4、点击上图中“View File”即可查看查询结果。
总结:
如果使用过CLI的朋友看了上面的介绍,一定会发现一个很严重的问题:执行的过程没有提示。我们不知道某一个查询执行是什么时候结束的。但是在服务终端可以看到执行过程日志信息。
总之,使用Hive的Web HWI用户接口很不方便,一般我们都是用CLI操作Hive。
附:
使用Hive Web过程中,可能还会遇到其他一些问题和异常错误,我讲自己遇到的异常和错误及解决办法总结如下:
1、tools.jar问题
在浏览器中输入http://192.168.2.133:9999/hwi时,页面打不开并报如下错误
出现此问题是因为java.home指到$JAVA_HOME/jre下了,而其lib下的tools.jar跟$JAVA_HOME/lib/tools.jar不一样,编译jsp的时候需要用到后者.解决办法: 将$JAVA_HOME/lib/tools。jar复制到Hive的lib目录中,如下:
cp /usr/Java/jdk1.7.0_55/lib/tools.jar /usr/local/hive/lib/
hive --service hwi 重启即可。
2、hive的元数据服务未启动,报以下错误:
解决办法:不管使用哪种方式访问hive,都需要首先启动hive的metaserver服务。问题总结
SSL问题
启动 hive 时,提示以下信息:
Sat May 21 10:25:12 CST 2016 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSLconnection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
解决方法:在 hive-site.xml 配置文件中 javax.jdo.option.ConnectionURL 配置项的值上加上 useSSL=false。即最后的配置如下:
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value> <description>JDBC connect string for a JDBC metastore</description> </property>
initSchema问题
启动 hive 时,提示以下信息:
Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create the schema. If needed, don't forget to include the option to auto-create the underlying database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)
解决方法:执行 schematool -initSchema -dbType mysql。即安装 Hive 后,在首次运行 hive 之前要执行以上命令。
相对路径问题
启动Hive时报以下错误:
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 atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444) atorg.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672) atorg.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616) atsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) atjava.lang.reflect.Method.invoke(Method.java:606) atorg.apache.hadoop.util.RunJar.main(RunJar.java:160)Caused by: java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D atorg.apache.hadoop.fs.Path.initialize(Path.java:148) atorg.apache.hadoop.fs.Path.<init>(Path.java:126) atorg.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:487) atorg.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430) ... 7more
解决方案:将 hive-site.xml 中的 ${system:java.io.tmpdir} 和 ${system:user.name} 分别替换成 /tmp 和 ${user.name}
mysql-connector-java版本问题
启动Hive时报以下错误:
Exception in thread "main" java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:578) at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:518) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:705) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:641) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop.util.RunJar.main(RunJar.java:136)Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.ql.metadata.Hive.registerAllFunctionsOnce(Hive.java:226) at org.apache.hadoop.hive.ql.metadata.Hive.<init>(Hive.java:366) at org.apache.hadoop.hive.ql.metadata.Hive.create(Hive.java:310) at org.apache.hadoop.hive.ql.metadata.Hive.getInternal(Hive.java:290) at org.apache.hadoop.hive.ql.metadata.Hive.get(Hive.java:266) at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:545) ... 9 moreCaused by: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1627) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.<init>(RetryingMetaStoreClient.java:80) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:130) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.getProxy(RetryingMetaStoreClient.java:101) at org.apache.hadoop.hive.ql.metadata.Hive.createMetaStoreClient(Hive.java:3317) at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3356) at org.apache.hadoop.hive.ql.metadata.Hive.getMSC(Hive.java:3336) at org.apache.hadoop.hive.ql.metadata.Hive.getAllFunctions(Hive.java:3590) at org.apache.hadoop.hive.ql.metadata.Hive.reloadFunctions(Hive.java:236) at org.apache.hadoop.hive.ql.metadata.Hive.registerAllFunctionsOnce(Hive.java:221) ... 14 moreCaused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hive.metastore.MetaStoreUtils.newInstance(MetaStoreUtils.java:1625) ... 23 moreCaused by: javax.jdo.JDODataStoreException: Exception thrown obtaining schema column information from datastoreNestedThrowables:java.sql.SQLException: Column name pattern can not be NULL or empty. at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:543) at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:720) at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:740) at org.apache.hadoop.hive.metastore.ObjectStore.setMetaStoreSchemaVersion(ObjectStore.java:7763) at org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:7657) at org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:7632) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.hive.metastore.RawStoreProxy.invoke(RawStoreProxy.java:101) at com.sun.proxy.$Proxy21.verifySchema(Unknown Source) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:547) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:612) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:398) at org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:78) at org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:84) at org.apache.hadoop.hive.metastore.HiveMetaStore.newRetryingHMSHandler(HiveMetaStore.java:6396) at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:236) at org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.<init>(SessionHiveMetaStoreClient.java:70) ... 28 more
解决方案:将 $HIVE_HOME/lib 下 的 mysql-connector-java-6.0.3.jar 替换成 mysql-connector-java-5.1.39.jar。 原因分析:mysql-connector-java 6.x 版本 和 5.1.x 版本不兼容 , nullNamePatternMatchesAll 连接属性的默认值在 mysql-connector-java 5.1 和 6.0 之间发生了改变. 在 5.1 版本中默认值是 true, 而 6.0 版本中默认值是 false。可以参考文章 https://liquibase.jira.com/browse/CORE-2723
- Hive 2.1.1安装配置
- Hive 2.1.1安装配置
- 【Hive】hive-2.1.1内嵌模式安装配置全过程
- hive安装配置(hive1.2.1)
- Hadoop-2.7.3环境下Hive-2.1.1安装配置。
- hive 2.1.1 安装
- hive安装与配置
- hive安装配置
- Hive安装配置详细
- pig hive 安装配置
- Hadoop&hive安装配置
- Hive安装配置
- Hive安装配置
- hive 安装与配置
- hive安装及配置
- Hive 安装及配置
- hive集群安装配置
- Hive安装配置笔记
- solr中Cache综述
- springMvc 配置 controller 配置 spring-dispatcher-servlet.xml
- 关于 redis3.2.9 在 centos7 的 配置 及 Jedis 与 虚拟机 centos7 redis 连接的问题
- HashMap使用对象作为key
- Android三种播放视频的方式
- Hive 2.1.1安装配置
- 10.C++对C的扩展
- POJ 1389 Area of Simple Polygons 笔记
- Android 服务在后台会在锁屏或者退出的时候清理掉
- VS2013设置单元测试运行目录
- Windows10 安装 Android Studio 2.0+
- Gulp针对F1平台的前端资源打包说明
- 面向过程改变成面向对象三步曲
- C#中Delegate委托事件详细介绍