Hive的搭建方式与区别
Local(mysql)的搭建
1、将apache-hive-1.2.1-bin.tar.gz文件上传到node01节点,解压
tar -zxvf apache-hive-1.2.1-bin.tar.gz
2、修改配置文件
(1)先修改文件名 将hive-default.xml.template 修改为hive-site.xml
路径:cd /opt/software/apache-hive-1.2.1-bin/conf/
命令:mv hive-default.xml.template hive-site.xml
(2)修改文件内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive_remote?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>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>password</value>
</property>
</configuration>
(3)权限,虽然hive用户对hive_meta数据库是由操作权限的,但是这个数据库如果不存在,hive用户也是没有权限创建这个数据库,所以需要提前创建好hive_remote数据库
3、安装mysql
yum install mysql-server -y
4、启动:service mysqld start
进入:mysql -uroot
5、修改mysql权限:
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘123’ WITH GRANT OPTION; //刷新
flush privileges;
6、清除多余的对权限有影响的数据
7、添加用户:
CREATE USER ‘hive’@’%’ IDENTIFIED BY ‘123’;
授权用户:
grant all privileges on hive_meta.* to hive@"%" identified by ‘123’;
flush privileges;
8、启动hive工具
在/opt/software/apache-hive-1.2.1-bin/bin/目录下启动
多用户模式
1、将hive-site.xml配置文件拆为如下两部分
(1)在服务端设置hive-site.xml文件
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.101.133:3306/hive?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>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
(2)在客户端配置文件
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://192.168.57.5:9083</value>
</property>
2、启动hive客户端程序
==hive --service metastore ==
3、在/opt/software/apache-hive-1.2.1-bin/bin/目录下启动
./hive
遇到的问题
1、首先确定自己的客户端能够连接上HDFS集群,主要看免秘钥,还有hosts中的内容
否则容易报错:
2、首先是对数据库权限的修改,需要进入到MySQL中,否则会报错:
-bash: GRANT: command not found
修改的命令GRANT没有发现
解决方法:启动:service mysqld start
进入:mysql -uroot
3、
(1)mysql的jar包拷贝到$HIVE_HOME/lib目录下
(2)清除databases里面多余的会对权限造成影响的数据
进入MySQL,然后use mysql,show tables,再查询user这个表,清除多余的数据 如下图
(3)检查配置文件的对应节点
3、[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
at jline.TerminalFactory.create(TerminalFactory.java:101)
错误的原因: Hadoop yarn jline版本和hive的jline不一致
解决方法:将两个jar包统一
4、注意一个坑:
权限,虽然hive用户对hive_meta数据库是由操作权限的,但是这个数据库如果不存在,hive用户也是没有权限创建这个数据库,所以需要提前创建好hive_remote数据库