解决方法:hiveserver2 连接异常,重启(hiveserver2连接比较慢要等一会)
我这里两个RunJar是启动了meatestore和hiveserver2
这个duoduo,是我的登录的用户,hive的用户和所属组都是duoduo
解决方法:
在hadoop的配置文件core-site.xml增加如下配置,重启hdfs
<property>
<name>hadoop.proxyuser.duoduo.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.duoduo.groups</name>
<value>*</value>
</property>
完美解决:
其中username和password都为duoduo
不管是root,还是duoduo用户都可以登录,可以肯定与用户无关
将配置换成Hadoop100或者hive
<property> <name>hadoop.proxyuser.hive.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hive.groups</name> <value>*</value> </property>
无论换成什么都是duoduo用户不不能模拟hadoop100
验证:我的hive-site.xml
这个用户名和密码是元数据mysql的用户名和密码
验证:我的主机名是Hadoop100
验证:毛关系没有
在hadoop的core-site.xml中进行如下设置, 用户“super”就可以代理主机host1和host2上属于组group1和group2的所有用户。
<property>
<name>hadoop.proxyuser.super.hosts</name>
<value>host1,host2</value>
</property>
<property>
<name>hadoop.proxyuser.super.groups</name>
<value>group1,group2</value>
</property>
当然,也可以进行更松弛的设置。如下所示表示用户“oozie”可以代理所有主机上的所有用户
<property>
<name>hadoop.proxyuser.oozie.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.oozie.groups</name>
<value>*</value>
</property>
Hadoop2.0版本开始支持ProxyUser的机制。含义是使用User A的用户认证信息,以User B的名义去访问hadoop集群。对于服务端来说就认为此时是User B在访问集群,相应对访问请求的鉴权(包括HDFS文件系统的权限,YARN提交任务队列的权限)都以用户User B来进行。User A被认为是superuser(这里super user并不等同于hdfs中的超级用户,只是拥有代理某些用户的权限,对于hdfs来说本身也是普通用户),User B被认为是proxyuser。
在Hadoop的用户认证机制中,如果使用的是Simple认证机制,实际上ProxyUser的使用意义并不大,因为客户端本身就可以使用任意用 户对服务端进行访问,服务端并不会做认证。而在使用了安全认证机制(例如Kerberos)的情况下,ProxyUser认证机制就很有作用:
使用ProxyUser访问hadoop集群,访问请求的UGI对象中实际包含了以下信息:
ProxyUser对象通过UserGroupInformation.createProxy(“proxyUser”,superUgi)来创建,访问集群时通过proxyUser.doAs方式进行调用。
// 创建superUser用户
UserGroupInformation superUser = UserGroupInformation.getCurrentUser();
//创建proxyUser用户
UserGroupInformation proxyUgi = UserGroupInformation.createProxyUser(“proxyUser”, superUser);
// 使用proxyUser用户访问集群
proxyUgi.doAs(new PrivilegedExceptionAction<Void>() {
@Override
public Void run() throws Exception {
// 使用proxy用户访问hdfs
FileSystem fs = FileSystem.get(conf);
fs.mkdirs(new Path(“/proxyUserDir”));
// 使用proxy用户提交mr作业
JobClient jc = new JobClient(conf);
jc.submitJob(conf);
return null;
}
});
服务端需要在NameNode和ResourceManager的core-site.xml中进行代理权限相关配置。 对于每一个superUser用户,配置参数:
对于每个superUser用户,hosts必须进行配置,而groups和users至少需要配置一个。
这几个配置项的值都可以使用*来表示允许所有的主机/用户组/用户。
例如:
<property>
<name>hadoop.proxyuser.userA.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.userA.users</name>
<value>user1,user2</value>
</property>
表示允许用户userA,在任意主机节点,代理用户user1和user2
代理用户权限相关配置的改动,需要修改core-site.xml文件中相关配置。修改后配置并不会自动更新到服务器(这与fair- scheduler.xml配置会自动更新不同)。修改配置后需要执行以下命令进行同步,分别将信息更新到namenode和 resourcemananger上。
参考1:https://www.jianshu.com/p/a27bc8651533
参考2:https://blog.csdn.net/u012948976/article/details/49904675
官网:https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/Superusers.html
原文:https://www.cnblogs.com/hyunbar/p/13462495.html