Hive的三种安装⽅式(内嵌模式,本地模式远程模式)⼀、安装模式介绍:
Hive官⽹上介绍了Hive的3种安装⽅式,分别对应不同的应⽤场景。
1、内嵌模式(元数据保村在内嵌的derby种,允许⼀个会话链接,尝试多个会话链接时会报错)
2、本地模式(本地安装mysql 替代derby存储元数据)
3、远程模式(远程安装mysql 替代derby存储元数据)
⼆、安装环境以及前提说明:
⾸先,Hive是依赖于hadoop系统的,因此在运⾏Hive之前需要保证已经搭建好hadoop集环境。
本⽂中使⽤的hadoop版本为2.5.1,Hive版本为1.2.1版。
OS:Linux Centos 6.5 64位
jdk:java version "1.7.0_79"
假设已经下载了Hive的安装包,且安装到了/home/install/hive-1.2.1
在~/.bash_profile中设定HIVE_HOME环境变量:
export HIVE_HOME=/home/install/hive-1.2.1
三、内嵌模式安装:
这种安装模式的元数据是内嵌在Derby数据库中的,只能允许⼀个会话连接,数据会存放到HDFS上。
1、切换到HIVE_HOME/conf⽬录下,执⾏下⾯的命令:
cp plate hive-env.sh
vim hive-env.sh
在hive-env.sh中添加以下内容:
HADOOP_HOME=/home/install/hadoop-2.5.1
2、启动hive,由于已经将HIVE_HOME加⼊到了环境变量中,所以这⾥直接在命令⾏敲hive即可:
然后我们看到在hadoop的HDFS上已经创建了对应的⽬录。
注意,只要上⾯2步即可完成内嵌模式的安装和启动,不要画蛇添⾜。。。。。。⽐如下⾯
================================【下⾯这段就不要看了】==============================================
(作废)2、提供⼀个hive的基础配置⽂件,执⾏如下代码,就是将conf⽬录下⾃带的⽂件修改为配置⽂件:
l.l
(作废)3、启动hive,由于已经将HIVE_HOME加⼊到了环境变量中,所以这⾥直接在命令⾏敲hive即可:
(作废)结果报错了,看错误⽇志中提到system:pdir,这个配置项在l中有提到。
(作废)我们创建⼀个临时⽬录/opt/tem/hive-1.2.1/iotemp,并修改l中的system:pdir的值:
mkdir -p /opt/tem/hive-1.2.1/iotemp
l
(作废)在vim编辑界⾯输⼊如下命令完成替换:
:%s@\${system:pdir}@/opt/tem/hive-1.2.1/iotemp@g
(作废)4、重新启动hive:
(作废)报了这样⼀个错误:java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected。
(作废)查询资料说,hadoop⽬录下存在⽼版本jline,替换掉就⾏了。复制后注意删除原来版本的jar包。
cp /home/install/hive-1.2.1/lib/jline-2.12.jar /home/install/hadoop-2.5.1/share/hadoop/yarn/lib/
rm -rf /home/install/hadoop-2.5.1/share/hadoop/yarn/lib/jline-0.9.94.jar
(作废)再次重新启动,OK了。
四、本地模式安装:
这种安装⽅式和嵌⼊式的区别在于,不再使⽤内嵌的Derby作为元数据的存储介质,⽽是使⽤其他数据库⽐如MySQL来存储元数据。
这种⽅式是⼀个多⽤户的模式,运⾏多个⽤户client连接到⼀个数据库中。这种⽅式⼀般作为公司内部同时使⽤Hive。
这⾥有⼀个前提,每⼀个⽤户必须要有对MySQL的访问权利,即每⼀个客户端使⽤者需要知道MySQL的⽤户名和密码才⾏。
下⾯开始正式搭建,这⾥要求hadoop系统已经正常启动,且MySQL数据库已经正确安装。
1、⾸先登录MySQL,创建⼀个数据库,这⾥命名为hive,数据库名是可以随意定义的。
创建hive⽤户,并赋予所有的权限:
CREATE USER 'hive'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO hive IDENTIFIED BY '123456'  WITH GRANT OPTION;
2、将MySQL的JDBC驱动包拷贝到hive的安装⽬录中,驱动包⾃⾏查下载。
cp mysql-connector-java-5.1.32-bin.jar /home/install/hive-1.2.1/lib/
3、将HIVE_HOME/conf下的plate拷贝⼀份:
l.l
4、修改l⽂件:
该配置⽂件有3300多⾏,选择其中的⼏个选项进⾏修改即可。
A、修改javax.jdo.option.ConnectionURL属性。
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
B、修改javax.jdo.option.ConnectionDriverName属性。
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value&sql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
C、修改javax.jdo.option.ConnectionUserName属性。即数据库⽤户名。
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
D、修改javax.jdo.option.ConnectionPassword属性。即数据库密码。
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
E、添加如下属性astore.local:
<property>
<name&astore.local</name>
<value>true</value>
<description>controls whether to connect to remove metastore server or open a new metastore server in Hive Client JVM</description> </property>
F、修改hive.server2.logging.operation.log.location属性,因为默认的配置⾥没有指定具体的路径。
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/tmp/hive/operation_logs</value>
<description>Top level directory where operation logs are stored if logging functionality is enabled</descripti    on>
</property>
G、修改local.scratchdir属性。
<property>
<name&local.scratchdir</name>
<value>/tmp/hive</value>
<description>Local scratch space for Hive jobs</description>
</property>
H、修改sources.dir属性。
<property>
<name>sources.dir</name>
<value>/tmp/hive/resources</value>
<description>Temporary local directory for added resources in the remote file system.</description>
</property>
I、修改属性hive.querylog.location属性。
<property>
<name>hive.querylog.location</name>
<value>/tmp/hive/querylog</value>
<description>Location of Hive run time structured log file</description>
</property>
5、配置hive的log4j配置⽂件。
cp plate hive-log4j.properties
6、将hive下的jline-2.12.jar替换掉hadoop⾃带的包,不然会报错。
cp /home/install/hive-1.2.1/lib/jline-2.12.jar /home/install/hadoop-2.5.1/share/hadoop/yarn/lib/
rm -rf /home/install/hadoop-2.5.1/share/hadoop/yarn/lib/jline-0.9.94.jar
7、启动hive,界⾯如下:
五、远程模式安装,即server模式。
这种模式需要使⽤hive安装⽬录下提供的beeline+hiveserver2配合使⽤才可以。
其原理就是将metadata作为⼀个单独的服务进⾏启动。各种客户端通过beeline来连接,连接之前⽆需知道数据库的密码。
1、⾸先执⾏hiveserver2命令:
./hiveserver2 start
启动后命令⾏会⼀直监听不退出,我们可以看到它监听了10000端⼝。
2、新开⼀个命令⾏窗⼝,执⾏beeline命令:
[root@node5 bin]# beeline
Beeline version 1.2.1 by Apache Hive
beeline> !connect jdbc:hive2://node5:10000
Connecting to jdbc:hive2://node5:10000
Enter username for jdbc:hive2://node5:10000: hive
Enter password for jdbc:hive2://node5:10000: ******
报错了,错误⽇志如下:
Error: Failed to open new session: java.lang.RuntimeException: java.lang.RuntimeException: org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=EXECUTE, inode="/tmp":root:supergroup:drwx------    at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkTraverse(FSPermissionChecker.java:208)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:171)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5904)
at org.apache.hadoop.hdfs.server.FileInfo(FSNamesystem.java:3691)
at org.apache.hadoop.hdfs.server.FileInfo(NameNodeRpcServer.java:803)
at org.apache.hadoop.hdfs.FileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:779)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:928)
mysql的jar包下载at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2013)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2009)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2007) (state=,code=0)
0: jdbc:hive2://node5:10000 (closed)>
说是hive⽤户对HDFS上的/tmp权限不够。
这⾥直接把HDFS的权限设置为最⼤。
hadoop fs -chmod777 /tmp
重新连接:成功了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。