hive的环境搭建
hive有三种模式内嵌模式,本地模式,远程连接
内嵌模式的配置
1. 简介:
使用hive自带数据库derby来进行存储元数据,通常用于测试
优点:使用简单,不用进行配置
缺点:只支持单session。
1. 将hive安装包上传到/opt/software/,进行解压
$ tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/apps/
2. 创建一个软连接
$ ln -s apache-hive-1.2.1-bin/ hive
3. 配置环境变量
$ vi ~/.bash_profile
#hive environment
HIVE_HOME=/opt/apps/hive
PATH=$HIVE_HOME/bin:$PATH
export HIVE_HOME PATH
4. 使.bash_profile生效
]$ source ~/.bash_profile
注意:在使用hive命令的位置会生成一个derby文件和元数据的目录。
1.1.2版本有依赖冲突:jline版本冲突,1.2.1之后版本无此冲突
/opt/apps/hive-1.2.1/lib和/usr/local/hadoop-2.6.4/share/hadoop/yarn/lib中都包
含jline的jar包,导致版本冲突
解决方案:
1、cp /usr/local/hive-1.2.1/lib/jline-2.12.jar /usr/local/hadoop-2.6.4/share/hadoop/yarn/lib/
2、rm -rf jline-0.9.94.jar
特点:元数据库文件会在启动hive命令的目录下生成
本地模式
使用mysql替换自带的元数据库
hive的相关进程都是在同一台机器上,即本地模式。mysql可以在不同机器上因为mysql是一个相对独立的进程。
-
安装mysql请参考 https://blog.csdn.net/e3hhhh/article/details/100176640
-
上传hive,解压 tar -zxvf apache-hive-1.2.1-bin.tar.gz -C /opt/apps/在-C后是自己的安装目录,如果hive不在当前目录请在-zxvf后写上hive的目录
-
将mysql的驱动包mysql-connecter-5.1.37.jar,放入hive的lib中 别的版本的hive对应的jar不太清楚,hive1.2.1最好对应这个jar否则可能会无法删除表。
-
修改hive的conf目录下的hive-env.sh因为并没有hive-env.sh我们要使用
cp hive-env.sh.template hive-env.sh HADOOP_HOME=/opt/apps/hadoop #hadoop的安装目录 JAVA_HOME=/opt/apps/jdk#jdk的安装目录最好不要有空格在等号前 后
-
cp hive-default.xml.template hive-site.xml 先将文件导出windows下用文本编辑器修改下面的属性
<!--配置mysql的连接字符串-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<!--配置mysql的连接驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<!--配置登录mysql的用户-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!--配置登录mysql的密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
集群和mysql都要先启动
输入hive连接
本地模式就配好了
远程连接模式
将hive作为一个server进程开启,客户端可以在任何机器上,只要连接到这个server,就可以进行操作。客户端可以不需要密码。
查找修改下面的属性上面为属性名下面为属性的值
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://slave2:3306/hive?useSSL=false&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>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave2:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/opt/apps/hive/logData</value>
<description>Location of Hive run time structured log file</description>
</property>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive/local</value>
<description>Local scratch space for Hive jobs</description>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/hive/resources</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
再修改mysql的权限
grant all privileges on *.* to root@'%' identified by '123456' with grant option;
-
确定集群是否正常:active和standby都要存在
-
杀死已经存在的所以Runjar
-
在mysql所在的机器上,开启元数据服务
hive --service metastore 2>&1 >/dev/null & ----->后台启动 -
在客户端,输入hive进行连接
说明:如果mysql所在的机器只开启了 hiveserver2。意图是使用10000端口。
此时,可以在客户端使用beeline工具如果修改了配置文件,需要重启hive相关服务,而元数据库的元数据失效。