Hive安装配置要点
官网下载安装包;
在Profile下面定义HIVE_HOME以及HADOOP_HOME,然后在PATH下面添加HOME/bin目录,用于在命令行直接敲beeline,hive即可执行命令;
需要在hadoop中创建:
/user/hive/warehouse
/tmp
(记得当前目录以及子目录要赋权限777,否则会爆异常,见下面的异常)
Hive有两种客户端,一种是HiveCLI已经被抛弃,现在Hive主推Beeline客户端,在启动的时候需要指定用户:
beeline -u jdbc:hive2://localhost:10000
HiveServer2的启动方式是
bin/hiveserver2
hive日志存放在/tmp/username/hive.log
show tables:展示所有的表;
describe tablename:展示指定表的列信息;
hive服务监听端口:10000
hive网页的端口:10002
Error executing SQL query "select "DB_ID" from "DBS"".(启动hiveserver2的时候)
这是因为需要将hive下面的conf里面的hive-default-site.xml.template变为hive-site.xml
datanucleus.schema.autoCreateAll节点值设为true,自动创建必要的schema
hive.metastore.schema.verification节点设置为false,不验证schema的完备
java.net.URISyntaxException: Relative path in absolute URI: ${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D(启动hiveserver2的时候)
system:java.io.tmpdir单独定义一个properyt名字就叫system:java.io.tmpdir,然后赋值value即可
User: hadoop is not allowed to impersonate anonymous(启动beeline客户端的时候)
需要配置hadoop里面的core-site.xml文件添加如下节点:
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
粗体替换为执行bin/hiveserver2的用户即可。这是因为Hadoop的安全机制,让所有的应用通过指定的代理用户来和Hadoop交互,而不是外部应用的实际用户,避免外部应用对于hadoop的高权限访问(难道是避免外部应用模拟管理员对其进行操作);后来我看了了一下core-default.xml,里面并没有hadoop.proxyuser.*的节点,这说明默认情况下是没有指定代理用户,这就导致任何外部应用都无法访问hadoop,只有在外部的core-site.xml中进行手工指定才可以。
org.apache.hadoop.security.AccessControlException Permission denied: user=anonymous, access=WRITE, inode="/user/hive/warehouse":hadoop:supergroup:drwxrwxr-x(在beeline中执行语句的时候)
需要在:
hadoop fs -chmod -R +777 /tmp
hadoop fs -chmod -R +777 /user
java.net.URISyntaxException: Relative path in absolute URI: ${system:user.name%7D (state=,code=0),在执行show tables语句的时候;
需要在hive-site.xml添加如下节点
<property>
<name>system:user.name</name>
<value>hadoop</value>
</property>