Hive1.2.2的安装和配置

Hadoop环境搭建笔记整理(四)——Hive1.2.2的安装和配置

一、是什么和做什么

1.什么是Hive?

一个数据仓库工具

Hive 的数据存储在 HDFS 中,大部分的查询由 MapReduce 完成

不可更改和添加数据

Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业

上述的描述是从官方的角度。在学习过程中,对hadoop和hive关系的理解就是hadoop作为一个基本平台包含一些基本功能,hive取其中一个部分,数据从平台传入经过hdfs,由hadoop自带的mapreduce功能调用数据,使得数据进入hive得到处理。

2.在伪分布式集群搭好,mysql环境运行不出问题的基础上安装hive

二、安装过程

1.在mysql端配置hive

a.进入mysql命令行,创建hive用户并赋予所有权限:

mysql -uroot -proot

mysql>set password=password('root');

mysql>create user 'hive' identified by 'hive';

mysql>grant all on *.* TO 'hive'@'%' identified by 'hive' with grant option;

mysql>grant all on *.* TO 'hive'@'localhost' identified by 'hive' with grant option;

mysql>flush privileges;

b.使用hive用户登录,创建hive数据库:

mysql -uhive -phive -h hadoop

mysql>create database hive;

mysql>show databases;

c.解压mysql驱动包(先行解压过hive包之后的操作)

Download Connector/J

解压该安装包并把该安装包复制到/hive-x.x.x/lib目录中

例如:cp mysql-connector-java-5.1.22-bin.jar /app/hive-1.2.2/lib

2.安装hive

a.下载地址

Downloads

b.配置文件

(1)使用如下命令打开/etc/profile文件:

sudo vi /etc/profile

设置如下参数:

export HIVE_HOME=/.../hive-1.2.2

export PATH=$PATH:$HIVE_HOME/bin

export CLASSPATH=$CLASSPATH:$HIVE_HOME/bin

使配置文件生效:

source /etc/profile

echo $PATH

(2)

设置hive-env.sh配置文件

进入hive-1.2.2/conf目录,复制hive-env.sh.templaete为hive-env.sh:

cd /.../hive-1.2.2/conf

cp hive-env.sh.template hive-env.sh

sudo vi hive-env.sh


分别设置HADOOP_HOME和HIVE_CONF_DIR两个值:

# Set HADOOP_HOME to point to a specific hadoop install directory

export HADOOP_HOME=/.../hadoop-1.2.2

# Hive Configuration Directory can be controlled by:

export HIVE_CONF_DIR=/.../hive-1.2.2/conf

(3)设置hive-site.xml配置文件

复制hive-default.xml.templaete为hive-site.xml

cd /.../hive-1.2.2/conf

cp hive-default.xml.template hive-site.xml

sudo vi hive-site.xml

(4)修改 hive-site.xml

<property>
<name>hive.metastore.warehouse.dir</name>
<value>/.../hive-1.2.2/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/.../hive-1.2.2/scratchdir</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/.../hive-1.2.2/logs</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value> jdbc:mysql://localhost:3306/hivedb?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>*****(根据自己的用户名填)</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>*****(根据自己的密码填)</value>
</property>

(5)hive默认为derby数据库,需要把相关信息调整为mysql数据库

<property>

<name>hive.metastore.uris</name>

<value>thrift://hadoop:9083</value>(注意修改)

<description>Thrift URI for the remote metastore. ...</description>

</property>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://hadoop:3306/hive?=createDatabaseIfNotExist=true</value>

<description>JDBC connect string for a JDBC metastore</description>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

<description>Driver class name for a JDBC metastore</description>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>hive(根据自己设置的hive用户名填写)</value>

<description>username to use against metastore database</description>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>hive(根据自己设置的hive密码填写)</value>

<description>password to use against metastore database</description>

</property>


(由于hive版本不同可能会有个别配置文件的修改有不一样的地方)

c.验证

配置好Hive后,输入hive命令启动时会出现许多INFO和WARN信息。

只要不报错就没什么问题,原因是新的hadoop环境废弃了某些参数。但是可以修改,网上教程我会贴在后面。

d.启动

在使用hive之前需要启动metastore和hiveserver服务,通过如下命令启用:

hive --service metastore &

hive --service hiveserver2 &(版本在centos6.8-6.9请执行hive --service hiveserver)

启动用通过jps命令可以看到两个进行运行在后台


e.操作验证

登录hive,在hive创建表并查看该表,命令如下:

hive

hive>create table test(a string, b int);

hive>show tables;

hive>desc test;


登录mysql,在TBLS表中查看新增test表:

mysql -uhive -phive

mysql>use hive;

mysql>select TBL_ID, CREATE_TIME, DB_ID, OWNER, TBL_NAME,TBL_TYPE from TBLS;



三、注意事项和bug

a.执行hive命令出现INFO和WARN

$HADOOP_HOME/etc/hadoop/log4j.properties中将log4j.logger.org.apache.hadoop.conf.Configuration.deprecation打开。如下:


1. # Uncomment the following line to turn off configuration deprecation warnings.

2. log4j.logger.org.apache.hadoop.conf.Configuration.deprecation=WARN

无需重启Hadoop,只需要重新启动hive就会发现这些INFO都不见了。但是WARN还是会在。

Warn的解决方法: 加入配置项

(1)创建配置文件,直接copy默认配置文件再修改即可,用户自定义配置会覆盖默认配置
cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml
cp $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh
cp $HIVE_HOME/conf/hive-exec-log4j.properties.template $HIVE_HOME/conf/hive-exec-log4j.properties
cp $HIVE_HOME/conf/hive-log4j.properties.template $HIVE_HOME/conf/hive-log4j.properties

(2)修改 hive-log4j.properties
mkdir $HIVE_HOME/logs
vi $HIVE_HOME/conf/hive-log4j.properties
hive.log.dir=/opt/hive-1.2.1/logs

b.在hive启动时遇到如下错误

[grid@Hadoop4 hadoop-2.7.2]$ hive

which: no HBase in(/home/grid/hadoop-2.7.2/bin:/usr/jdk1.8.0_91/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/grid/bin:/usr/local/apache-maven-3.3.9/bin:/home/grid/apache-ant-1.9.7/bin:/home/grid/apache-maven-3.3.9/bin:/home/grid/pig-0.16.0/bin:/home/grid/apache-hive-2.1.0-bin/bin)

SLF4J: Class path contains multiple SLF4Jbindings.

SLF4J: Found binding in[jar:file:/home/grid/apache-hive-2.1.0-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in[jar:file:/home/grid/hadoop-2.7.2/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: SeeSLF4J Error Codes for an explanation.

SLF4J: Actual binding is of type[org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration injar:file:/home/grid/apache-hive-2.1.0-bin/lib/hive-common-2.1.0.jar!/hive-log4j2.propertiesAsync: true

Exception in thread "main" Java.lang.IllegalArgumentException:java.net.URISyntaxException: Relative path in absolute URI:${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D


解决方法:
在hive-site.xml中添加

<property>

<name>system:java.io.tmpdir</name>

<value>/home/grid/apache-hive-2.1.0-bin/tmpdir</value>

</property>

<property>

<name>system:user.name</name>

<value>hive</value>

</property>

c.执行 hive --service hiveserver 命令报错

Exception in thread "main" java.lang.ClassNotFoundException: org.apache.hadoop.hive.service.HiveServer
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

解决办法: hive --service hiveserver2 使用hiveserver2

(我说过我们使用的环境是centos7,网上会有其他版本的资料,这个问题的主因是语句更新的问题)

d.use hive报错

如图

查自己数据库的表格,输入正确的名字

e.启动hive时,出现CommandNeedRetryException异常

Exception in thread "main" java.lang.NoClassDefFoundError:org/apache/hadoop/hive/ql/CommandNeedRetryException

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:270)

at org.apache.hadoop.util.RunJar.main(RunJar.java:149)

Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hive.ql.CommandNeedRetryException

at java.net.URLClassLoader$1.run(URLClassLoader.java:366)

at java.net.URLClassLoader$1.run(URLClassLoader.java:355)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:354)

at java.lang.ClassLoader.loadClass(ClassLoader.java:425)

at java.lang.ClassLoader.loadClass(ClassLoader.java:358)

由于以前使用hadoop时,修改hadoop-env.sh的HADOOP_CLASSPATH配置项,由以前的:

export HADOOP_CLASSPATH=/app/hadoop-x.x.x/myclass

修改为:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/app/hadoop-x.x.x/myclass

五、思考

hive在具体实践当中是什么角色?

转载:https://zhuanlan.zhihu.com/p/27719499

猜你喜欢

转载自www.cnblogs.com/chengjunhao/p/9057976.html