使用beeline问题

老师好,请详细讲解下hive-site.xml中参数hive.server2.enabled.doAs为true或者false时,使用beeline连接hiveserver2时 -n NAME -p password的这个NAME的含义。他即代表连接mysql的用户,还代表什么?执行的查询操作是以这个NAME用户提交到hadoop上的吗?

wangxiaolei

赞同来自:

hive.server2.enable.doAs: 设置为false,查询将以运行hiveserver2进程的用户运行,否则以提交查询的用户执行查询 

带刀锦衣卫

赞同来自:

那我所hive.server2.enable.doAs=true, hdfs用户启动hiveserver2,  hdfs用户进入beeline命令行,执行 !connect 
beeline> !connect jdbc:hive2://127.0.0.1:10000 hdfs hdfs
Connecting to jdbc:hive2://127.0.0.1:10000
16/12/25 04:40:50 [main]: WARN jdbc.HiveConnection: Failed to connect to 127.0.0.1:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://127.0.0.1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hdfs is not allowed to impersonate hdfs (state=08S01,code=0)
java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://127.0.0.1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: hdfs is not allowed to impersonate hdfs
	at org.apache.hive.jdbc.HiveConnection.<init>(HiveConnection.java:209)
	at org.apache.hive.jdbc.HiveDriver.connect(HiveDriver.java:107)
	at java.sql.DriverManager.getConnection(DriverManager.java:664)
	at java.sql.DriverManager.getConnection(DriverManager.java:208)

注意最后的报错是"User: hdfs is not allowed to impersonate hdfs" 会以指定的用户hdfs提交查询,为什么还有上面的报错。hdfs用户是有操作hdfs的权限的。一样的情况,把hive.server2.enable.doAs设置false,再这样连接,就会成功。为什么?

wangxiaolei

赞同来自:

看看数据仓库在hdfs上的路径权限

带刀锦衣卫

赞同来自:

/warehouse就是在hive-site.xml里配置的目录,权限如下:
[hdfs@centos1 logs]$ hadoop fs -ls /
Found 6 items
drwxr-xr-x   - hdfs hadoop          0 2016-12-16 17:39 /benchmarks
drwxr-xr-x   - hdfs hadoop          0 2016-12-17 06:53 /flume
drwxr-xr-x   - hive hive            0 2016-12-25 05:21 /hive
drwx-wx-wx   - hdfs hadoop          0 2016-12-24 18:39 /tmp
drwx------   - hdfs hadoop          0 2016-12-25 05:00 /user
drwxr-xr-x   - hdfs hadoop          0 2016-12-25 05:52 /warehouse
[hdfs@centos1 logs]$ 

wangxiaolei

赞同来自:

看下hadoop fs -ls /tmp 目录

带刀锦衣卫

赞同来自:

老师,信息如下:
[hdfs@centos1 logs]$ hadoop fs -ls /tmp
Found 1 items
drwx-wx-wx   - hdfs hadoop          0 2016-12-25 04:09 /tmp/hive
[hdfs@centos1 logs]$ 

wangxiaolei

赞同来自:

看下有没有hdfs用户 cut -d : -f 1 /etc/passwd

带刀锦衣卫

赞同来自:

老师,用户是有滴:
[root@centos1 ~]# id hdfs
uid=1002(hdfs) gid=1002(hdfs) 组=1002(hdfs)
[root@centos1 ~]# cut -d : -f 1 /etc/passwd |grep hdfs
hdfs
[root@centos1 ~]# id hdfs
uid=1002(hdfs) gid=1002(hdfs) 组=1002(hdfs)
[root@centos1 ~]# grep hdfs /etc/passwd
hdfs:x:1002:1002::/home/hdfs:/bin/bash
[root@centos1 ~]# su - hdfs
上一次登录:日 12月 25 05:28:30 CST 2016pts/2 上
[hdfs@centos1 ~]$ hadoop fs -ls /tmp/
Found 1 items
drwx-wx-wx   - hdfs hadoop          0 2016-12-25 04:09 /tmp/hive
[hdfs@centos1 ~]$ 

tankkyo

赞同来自:

需要在你的hadoop的core-site.xml中添加如下配置: <property>     <name>hadoop.proxyuser.hdfs.hosts</name>     <value>*</value>   </property>   <property>     <name>hadoop.proxyuser.hdfs.groups</name>     <value>*</value>   </property> 这个的含义是允许hdfs用户伪装为任意用户。 beeline -n bigdata指的是以bigdata这个用户连接到HiveServer2上。 当hive.server2.enable.doAs=true时,  HiveServer2会以这个bigdata用户来提交查询,当hive.server2.enable.doAs=false时则会以启用HiveServer2这个进程的用户执行查询。  

要回复问题请先登录注册