HDFSのパーミッション, HDFS-ACL, Sentryの違い
- HDFSのパーミッション
- いわゆるLinuxのパーミッション的なもの。ファイル、ディレクトリに対してユーザ/グループ単位でオーナーを付与する。
- HDFS-ACL
- HDFSのファイルやディレクトリに対してユーザ/グループ単位で権限を付与する。POSIX ACLやActive Directory的なもの。一つのファイル/ディレクトリに対して複数のユーザ/グループの権限を細かく設定できる
- Sentry
- Hive,ImpalaなどSQL on Hadoop向けののDB/テーブルの権限管理のためのもの。role groupベースで権限を管理する
HDFSでややこしいのが、たまたまHiveのテーブルもHDFSのディレクトリで表現されるため、Sentryの権限とHDFS-ACLの権限が混乱しやすいです。(僕は色々勘違いをしていました)
HDFS-ACLは明示的に有効にしてはじめて使えるものです。詳しくはドキュメントを参照ください。
http://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hdfs_ext_acls.html
Kerberosの設定
まず、これらを読みます。
Kerberosの設定の仕方は、Cloudera Manager によるクラスタのKerberos化 - Qiitaも参考にします。
今回はAWS上のCloudera Directorでクラスタを作ります。
DirectorのインストールはCloudera Director のインストール方法 - Qiitaを参考にするといいでしょう。
Directorの入っているインスタンスに、KDCを入れて設定します。便利なkrb-bootstrapというスクリプトがあるので、今回はそれで試してみます。
なお、krb-bootstrapはテスト用にKDCの環境を作るものですので、本番環境には利用しないでください。
$ yum -y install git
$ git clone https://github.com/daisukebe/krb-bootstrap.git
$ cd krb-bootstrap
$ ./configure_krb5.sh
そうすると、以下のprincipalがスクリプトによって作られます。
- hive@HADOOP
- hdfs@HADOOP
Clouder DirectorによるKerberized Clusterの作成
次にCloudera DirectorのWeb UIでクラスタを作成します。
ドキュメントにはCloudera Director clientを使ったconfiguration fileを使った設定方法があります。
こちらに従いKerberos環境を構築します。
krb-bootstrapを使ってKDCを設定している場合、conf fileの変更点としては、以下の通りになります。
-krbAdminUsername: "REPLACE-ME"
+krbAdminUsername: "cloudera-scm/admin"
-krbAdminPassword: "REPLACE-ME"
+krbAdminPassword: "cloudera"
- KDC_TYPE: "Active Directory"
+ KDC_TYPE: "MIT KDC"
- KDC_HOST: "REPLACE-ME"
+ KDC_HOST: "自分のdirector serverのhost名"
- SECURITY_REALM: "REPLACE-ME"
+ SECURITY_REALM: "HADOOP"
- KRB_ENC_TYPES: "aes256-cts aes128-cts des3-hmac-sha1 arcfour-hmac des-hmac-sha1 des-cbc-md5 des-cbc-crc"
+ KRB_ENC_TYPES: "rc4-hmac"
なお、暗号化の方式は今回はテスト用なのでrc4-hmacを使っていますが、本番環境ではAES-256をお使いください。
http://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_jce_policy_file_install.html
以降は通常通り、Director Clientからクラスタを起動すればOKです。
今回はテスト用にgatewayサーバは立てず、workerノードも1インスタンスのみにしています。
Sentryはクラスタ起動後にCloudera Managerから入れます。
Sentryの導入
Yet Another HDIF? — Apache Sentryで始めるアクセス制御 (Hive編)を参考にしながら、CMで頑張ります。
Hive Server2のimpersonationの無効化と、HiveでのSentryの有効化をお忘れなく...。
principalの作成
Sentryはroleベースで権限を管理します。SentryはACLのgroupに対してパーミッションを管理するものですが、今回は簡略化のためにhiveとcentosをgroupだと思って進めていきます。
Cloudera DirectorのインスタンスでKDCの管理コンソールにログインし、centos@HADOOP
というprincipalを作ります
$ sudo kadmin.local
...snip...
kadmin.local: addprinc centos
...snip...
kadmin.local: exit
正しく設定できていれば、kinit
でチケットの発行ができます。
$ kinit centos
Sentryの権限の付与
続いて、クラスタのmasterサーバでbeelineを用いて、Sentryの権限を付与します
Sentryの権限付与の詳細についてはドキュメントを参照してください。
今回はadmin
とcommon
というroleを作ります。admin
にはhive
groupを、common
にはcentos
groupを追加します。
$ beeline
beeline> !connect jdbc:hive2://ip-10-0-1-111.ap-northeast-1.compute.internal:10000/default;principal=hive/ip-10-0-1-111.ap-northeast-1.compute.internal@HADOOP
GRANTのSQLは以下の通り
create role admin;
grant ALL on database default to role admin;
grant role admin to group hive;
create role common;
grant select on database default to role common;
grant role common to group centos;
きちんとGRANTされていれば、hdfs
groupの権限ではtableも見れません。
$ kinit hdfs
Password for hdfs@HADOOP:
$ beeline
beeline> !connect jdbc:hive2://ip-10-0-1-111.ap-northeast-1.compute.internal:10000/default;principal=hive/ip-10-0-1-111.ap-northeast-1.compute.internal@HADOOP
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show tables;
...snip...
+-----------+--+
| tab_name |
+-----------+--+
+-----------+--+
centos
groupだとtableを見ることができます。
$ kinit centos
Password for centos@HADOOP:
$ beeline
beeline> !connect jdbc:hive2://ip-10-0-1-111.ap-northeast-1.compute.internal:10000/default;principal=hive/ip-10-0-1-111.ap-northeast-1.compute.internal@HADOOP
...snip...
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show tables;
...snip...
+------------+--+
| tab_name |
+------------+--+
| customers |
| sample_07 |
| sample_08 |
| web_logs |
+------------+--+
4 rows selected (0.272 seconds)
Sentry HDFS-ACL syncを有効にする
Sentry HDFS-ACL syncはSentryの権限の設定をHDFS ACLに対して同期するものです。
これは、指定したディレクトリ以下のHiveで管理されているデータに対してACLが設定されます。
詳しくはドキュメントを参照ください。
http://www.cloudera.com/documentation/enterprise/latest/topics/sg_hdfs_sentry_sync.html
CMのHDFSの設定で「Sentry同期の有効化」のチェックをONにします。
HDFS-ACL sync利用時のSentryの挙動
外部テーブルのHDFS-ACL syncの挙動を確認する
HDFS-ACL syncは通常、/user/hive/warehouse
以下に作られるDB/テーブルのACL連携を使うことが多いと思います。
それでは、外部テーブルや別の場所にあるDBはどういう挙動をするのでしょうか?
確認してみたいと思います。
今回は、外部テーブルに使うデータを
https://catalog.data.gov/dataset/consumer-complaint-database からCSVをダウンロードし、
/user/centos/data/consumer_complaints/row.csv
に置きました
$ wget -O raw.csv https://data.consumerfinance.gov/api/views/s6ew-h6mp/rows.csv?accessType=DOWNLOAD
$ kinit hdfs
$ hdfs dfs -mkdir /user/centos
$ hdfs dfs -chown centos:centos /user/centos
$ kinit centos
$ hdfs dfs -mkdir -p /user/centos/data/consumer_complaints
$ hdfs dfs -put rows.csv /user/centos/data/consumer_complaints/rows.csv
hive
groupでチケットを発行して、beelineから外部テーブルを作ります。
$ kinit hive
$ beeline
!connect ...
create external table customer_complaints(
date_received DATE, product STRING, subproduct STRING,
issue STRING, subissue STRING, consumer_complaint_narrative STRING,
company_public_response STRING,
company STRING, state STRING, zipcode STRING, tags STRING, consumer_consent_provided DATE, submitted_via STRING, date_sent_to_company DATE, company_response_to_consumer STRING,
timely_response STRING, consumer_disputed STRING, complaint_id BIGINT
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
stored as textfile
location '/user/centos/data/consumer_complaints/'
tblproperties ("skip.header.line.count"="1")
;
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show tables;
...snip...
+----------------------+--+
| tab_name |
+----------------------+--+
| customer_complaints |
| customers |
| sample_07 |
| sample_08 |
| web_logs |
+----------------------+--+
5 rows selected (0.162 seconds)
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> select complaint_id from customer_complaints limit 10;
...snip...
+---------------+--+
| complaint_id |
+---------------+--+
| 468882 |
| 468889 |
| 468879 |
| 468949 |
| 475823 |
| 468981 |
| 467801 |
| 475728 |
| 469026 |
| 469035 |
+---------------+--+
10 rows selected (0.187 seconds)
外部テーブルがある場所をCMからHDFS-ACL syncのターゲットに追加します。
今回は、/user/centos/data
を追加します。
HUEでACLを確認してみたところ、きちんとcustomer_complaints
のACLが設定されていることがわかります。ファイルやディレクトリのアイコンが青くなっているのがACLがセットされたものになります。(なお、hoge
というファイルは別途ACLをテストでセットしたものです。)
HDFS-ACL syncのwarehouseディレクトリ以外のDBの挙動を確認する
今度は、HDFS-ACL syncを/user/hive/warehouse
以外のDBに対して設定した場合の挙動を確認しましょう。
先程まで設定した /user/centos/data
は何かしらのingestしたデータが入ってくる場所と考えて、
今回は/user/centos/db
をDB用のディレクトリにします。
なお、多くの場合個別ユーザの下にDBを作る必要はないと思いますが、今回は検証目的に作成してみます。
$ kinit centos
$ hdfs dfs -mkdir /user/centos/db
HDFS-ACL syncの設定をする前に、先に手動でACLを設定します。
/user/centos/db
に対してhiveが書き込みできるようにACLを設定します。
$ hdfs dfs -setfacl -m group:hive:rwx /user/centos/db
# file: /user/centos/db
# owner: centos
# group: centos
user:hive:rwx
group::r-x
/user/centos/db
にデータベースを作成します。
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> create database centos
. . . . . . . . . . . . . . . . . . . . . . .> location '/user/centos/db'
. . . . . . . . . . . . . . . . . . . . . . .> ;
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show databases;
+----------------+--+
| database_name |
+----------------+--+
| centos |
| default |
+----------------+--+
2 rows selected (0.238 seconds)
kinit hive
をしたあと、beeline
で権限をcentos
に付与します。
今回はcentos
groupにはcentos
DBに対してすべての権限を付与します。
create role centos;
grant all on database centos to role centos;
grant role centos to group centos;
kinit centos
をしたあと、DBの様子を確認してみましょう。
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show databases;
..snip..
+----------------+--+
| database_name |
+----------------+--+
| centos |
| default |
+----------------+--+
2 rows selected (0.267 seconds)
次にcentos
DBにテーブルを作成します。
customer_complaints
のParquet形式のテーブルを作成してみます。
use centos;
create table customer_complaints_pq(
date_received TIMESTAMP, product STRING, subproduct STRING,
issue STRING, subissue STRING, consumer_complaint_narrative STRING,
company_public_response STRING,
company STRING, state STRING, zipcode STRING, tags STRING, consumer_consent_provided TIMESTAMP, submitted_via STRING, date_sent_to_company TIMESTAMP, company_response_to_consumer STRING,
timely_response STRING, consumer_disputed STRING, complaint_id BIGINT
)
stored as parquet
;
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show tables;
...snip...
+-------------------------+--+
| tab_name |
+-------------------------+--+
| customer_complaints_pq |
+-------------------------+--+
1 row selected (0.169 seconds)
テーブルができていますね。
そこにcustomer_complaints
テーブルからデータを流し込みます。
insert overwrite table customer_complaints_pq select * from default.customer_complaints;
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> select complaint_id, company from customer_complaints_pq limit 10;
...snip...
+---------------+-----------------------------+--+
| complaint_id | company |
+---------------+-----------------------------+--+
| 468882 | Wells Fargo & Company |
| 468889 | Wells Fargo & Company |
| 468879 | Santander Bank US |
| 468949 | Wells Fargo & Company |
| 475823 | Franklin Credit Management |
| 468981 | Bank of America |
| 467801 | NRA Group, LLC |
| 475728 | SunTrust Banks, Inc. |
| 469026 | Citibank |
| 469035 | Wells Fargo & Company |
+---------------+-----------------------------+--+
10 rows selected (0.257 seconds)
一通り設定したので、CMからACL syncのディレクトリに/user/centos/db
を追加します。
ACLの確認
最終的にできたACLはこんな感じになります。
/user/centos
以下のACLはこのような形になっています。
(/user/centos
に関しては手動で設定したものが残っています)
$ hdfs dfs -getfacl -R /user/centos
# file: /user/centos
# owner: centos
# group: centos
user::rwx
user:centos:rwx
group::r-x
mask::rwx
other::r-x
..snip..
# file: /user/centos/data
# owner: centos
# group: centos
user::rwx
group::r-x
other::r-x
# file: /user/centos/data/consumer_complaints
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/centos/data/consumer_complaints/rows.csv
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/centos/db
# owner: hive
# group: hive
user::rwx
group:centos:rwx
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/centos/db/customer_complaints_pq
# owner: hive
# group: hive
user::rwx
group:centos:rwx
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/centos/db/customer_complaints_pq/000000_0
# owner: hive
# group: hive
user::rwx
group:centos:rwx
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/centos/db/customer_complaints_pq/000001_0
# owner: hive
# group: hive
user::rwx
group:centos:rwx
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
/user/hive/warehouse 以下のACLはこのような形になっています。
$ hdfs dfs -getfacl -R /user/hive/warehouse
# file: /user/hive/warehouse
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/customers
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/customers/customers
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/sample_07
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/sample_07/sample_07
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/sample_08
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/sample_08/sample_08
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
# file: /user/hive/warehouse/web_logs
# owner: hive
# group: hive
user::rwx
group:centos:r-x
user:hive:rwx
group::---
group:hive:rwx
mask::rwx
other::--x
というわけで、Hive管理下のデータに関してSentryの権限ベースのものがHDFS-ACLに設定されているのがわかります。
一点気をつけてほしいのが、HDFS ACLのエントリ数は32までという制約があるため(HDFS-7447)、Sentryベースで管理するにしても権限を作りすぎるのは難しいので注意してください。
ACLの読み込み権限がない外部テーブルに対するhiveクエリ
customer_complaints
テーブルについてACL権限を外した場合、どう挙動するかを調べてみます。
まずは確認のため、今までの挙動を見ておきます。
$ kinit hive
$ beeline
..snip..
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> select * from customer_complaints limit 10;
INFO : Compiling command(queryId=hive_20170123052323_aa3dffda-03fe-42f8-91c9-5779a5e9c58f): select * from customer_complaints limit 10
..snip..
Time taken: 0.004 seconds
INFO : OK
+------------------------------------+------------------------------+----------------------------------------+-------------------------------------------+-------------------------------+---------------------------------------------------+----------------------------------------------+------------------------------+----------------------------+------------------------------+---------------------------+------------------------------------------------+------------------------------------+-------------------------------------------+---------------------------------------------------+--------------------------------------+----------------------------------------+-----------------------------------+--+
| customer_complaints.date_received | customer_complaints.product | customer_complaints.subproduct | customer_complaints.issue | customer_complaints.subissue | customer_complaints.consumer_complaint_narrative | customer_complaints.company_public_response | customer_complaints.company | customer_complaints.state | customer_complaints.zipcode | customer_complaints.tags | customer_complaints.consumer_consent_provided | customer_complaints.submitted_via | customer_complaints.date_sent_to_company | customer_complaints.company_response_to_consumer | customer_complaints.timely_response | customer_complaints.consumer_disputed | customer_complaints.complaint_id |
+------------------------------------+------------------------------+----------------------------------------+-------------------------------------------+-------------------------------+---------------------------------------------------+----------------------------------------------+------------------------------+----------------------------+------------------------------+---------------------------+------------------------------------------------+------------------------------------+-------------------------------------------+---------------------------------------------------+--------------------------------------+----------------------------------------+-----------------------------------+--+
| 07/29/2013 | Consumer Loan | Vehicle loan | Managing the loan or lease | | | | Wells Fargo & Company | VA | 24540 | | N/A | Phone | 07/30/2013 | Closed with explanation | Yes | No | 468882 |
| 07/29/2013 | Bank account or service | Checking account | Using a debit or ATM card | | | | Wells Fargo & Company | CA | 95992 | Older American | N/A | Web | 07/31/2013 | Closed with explanation | Yes | No | 468889 |
| 07/29/2013 | Bank account or service | Checking account | Account opening, closing, or management | | | | Santander Bank US | NY | 10065 | | N/A | Fax | 07/31/2013 | Closed | Yes | No | 468879 |
| 07/29/2013 | Bank account or service | Checking account | Deposits and withdrawals | | | | Wells Fargo & Company | GA | 30084 | | N/A | Web | 07/30/2013 | Closed with explanation | Yes | No | 468949 |
| 07/29/2013 | Mortgage | Conventional fixed mortgage | Loan servicing, payments, escrow account | | | | Franklin Credit Management | CT | 06106 | | N/A | Web | 07/30/2013 | Closed with explanation | Yes | No | 475823 |
| 07/29/2013 | Bank account or service | Checking account | Deposits and withdrawals | | | | Bank of America | TX | 75025 | | N/A | Web | 07/30/2013 | Closed with explanation | Yes | No | 468981 |
| 07/29/2013 | Debt collection | Other (i.e. phone, health club, etc.) | Cont'd attempts collect debt not owed | Debt is not mine | | | NRA Group, LLC | VA | 20147 | | N/A | Web | 08/07/2013 | Closed with non-monetary relief | Yes | No | 467801 |
| 07/29/2013 | Debt collection | I do not know | Cont'd attempts collect debt not owed | Debt was paid | | | SunTrust Banks, Inc. | FL | 32818 | | N/A | Referral | 08/01/2013 | Closed with explanation | Yes | Yes | 475728 |
| 07/29/2013 | Credit card | | Billing statement | | | | Citibank | OH | 45247 | | N/A | Referral | 07/30/2013 | Closed with explanation | Yes | Yes | 469026 |
| 07/29/2013 | Mortgage | Other mortgage | Loan servicing, payments, escrow account | | | | Wells Fargo & Company | NV | 89511 | | N/A | Referral | 07/30/2013 | Closed with explanation | Yes | Yes | 469035 |
+------------------------------------+------------------------------+----------------------------------------+-------------------------------------------+-------------------------------+---------------------------------------------------+----------------------------------------------+------------------------------+----------------------------+------------------------------+---------------------------+------------------------------------------------+------------------------------------+-------------------------------------------+---------------------------------------------------+--------------------------------------+----------------------------------------+-----------------------------------+--+
10 rows selected (0.261 seconds)
別コンソールでACLを設定変更します。
$ kinit centos
$ hdfs dfs -setfacl -m other::--- /user/centos/data/consumer_complaints
$ hdfs dfs -getfacl /user/centos/data/consumer_complaints
# file: /user/centos/data/consumer_complaints
# owner: centos
# group: centos
user::rwx
group::---
group:centos:rwx
mask::rwx
other::---
beelineで同じクエリを発行すると、Permission deniedがでてアクセスできません。
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> select * from customer_complaints limit 10;
Error: Error while compiling statement: FAILED: SemanticException Unable to determine if hdfs://ip-10-0-1-111.ap-northeast-1.compute.internal:8020/user/centos/data/consumer_complaints is encrypted: org.apache.hadoop.security.AccessControlException: Permission denied: user=hive, access=READ, inode="/user/centos/data/consumer_complaints":centos:centos:drwxrwx---
at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkAccessAcl(DefaultAuthorizationProvider.java:365)
at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.check(DefaultAuthorizationProvider.java:258)
at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.checkPermission(DefaultAuthorizationProvider.java:175)
at org.apache.sentry.hdfs.SentryAuthorizationProvider.checkPermission(SentryAuthorizationProvider.java:178)
at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:152)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6632)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:6614)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPathAccess(FSNamesystem.java:6539)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getEZForPath(FSNamesystem.java:9221)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getEZForPath(NameNodeRpcServer.java:1632)
at org.apache.hadoop.hdfs.server.namenode.AuthorizationProviderProxyClientProtocol.getEZForPath(AuthorizationProviderProxyClientProtocol.java:928)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getEZForPath(ClientNamenodeProtocolServerSideTranslatorPB.java:1350)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:617)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1073)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2086)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2082)
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:1698)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2080) (state=42000,code=40000)
なお、show tables
をした場合には、ACLのみの設定ではtableは見えてしまいます。
0: jdbc:hive2://ip-10-0-1-111.ap-northeast-1.> show tables;
...snip...
INFO : OK
+----------------------+--+
| tab_name |
+----------------------+--+
| customer_complaints |
| customers |
| sample_07 |
| sample_08 |
| web_logs |
+----------------------+--+
5 rows selected (0.264 seconds)