Hive в Google Cloud няма достъп до данни с друг потребител освен hive

Изпълнявам Hive на Hadoop и успешно инсталирах в Google Cloud Storage с помощта на bdutil версия 1.3.1. Изпълних командата по-долу:

./bdutil -e platforms/hdp/ambari_env.sh deploy

Като потребител на кошера мога да създавам/изтривам бази данни и таблици без никакви проблеми:

hive> create database db_final location 'gs://cip-hadoop-dev-data/apps/hive/warehouse/db_final';
OK
Time taken: 1.816 seconds

Но получавам следната грешка, ако се опитам да осъществя достъп до базата данни като всеки друг потребител:

hive> use db_final;
FAILED: SemanticException MetaException(message:java.security.AccessControlException: Permission denied: user=andy, path="gs://cip-hadoop-dev-data/apps/hive/warehouse/db_final":hive:hive:drwx------)

Мога да кажа, че това е грешка с разрешенията, тъй като разрешенията за файла са 700, което е посочено по-горе и потвърдено от командния ред:

[andy@hadoop-m ~]$ hdfs dfs -ls gs:///apps/hive/warehouse/
drwx------   - andy andy          0 2015-09-11 01:46 gs:///apps/hive/warehouse/db_final

Опитах се да променя разрешенията за файла с помощта на командата hdfs, но те остават същите:

[andy@hadoop-m ~]$ sudo hdfs dfs -chmod 750 gs:///apps/hive/warehouse/db_final
[andy@hadoop-m ~]$ hdfs dfs -ls gs:///apps/hive/warehouse/
drwx------   - andy andy         0 2015-09-11 01:46 gs:///apps/hive/warehouse/db_final

Също така предоставих SELECT разрешения за базата данни на потребителя, което успя, но все още получавам същата грешка, когато се опитам да използвам базата данни.

Това изглежда донякъде подобно на този проблем, но използвам най-новата версия на bdutil, така че не знам дали проблемът е същият. Също така потвърдих, че dfs.permissions.enabled е зададен на false.

Така че всичко изглежда работи добре, ако го стартирам като потребител на кошера, но не искам да изпращам потребителското име/парола на кошера на всеки, който има нужда от достъп до базата данни.

Какво друго трябва да опитам/търся?

Благодаря за вашата помощ


person Andy Crockett    schedule 11.09.2015    source източник


Отговори (1)


Наистина, част от проблема е, че GCS конекторът всъщност няма posix/hdfs разрешения; той отчита само статични разрешения, докато всъщност удостоверява с идентификационни данни oauth2, които не са обвързани с акаунтите на linux на GCE VM.

Наскоро добавихме функция, която позволява модифициране на отчетените разрешения от GCS конектора с fs.gs.reported.permissions: https://github.com/GoogleCloudPlatform/bigdata-interop/commit/93637a136cdb7354b1a93cc3c7a61c42b0bc78a6

Все още не е пуснат в официална версия, но можете да опитате да създадете моментна снимка, като следвате инструкциите тук: https://github.com/GoogleCloudPlatform/bigdata-interop

mvn -P hadoop2 package

И след това замяна на съществуващия GCS конектор jarfile с вашата нова компилация. Като алтернатива за бърз тест можете да използвате временни снимки горещо изграждане, което имаме, просто имайте предвид предоставената връзка ще спре да работи след крайния срок и компилацията на моментна снимка все още не е проверена за производствени натоварвания. Скоро трябва да има официално издание, което ще предостави чиста компилация на jarfile, ако искате първо да проверите доказателство за концепцията с компилацията на моментна снимка.

След като смените jar-файла, можете да опитате да промените core-site.xml, за да зададете fs.gs.reported.permissions на нещо като 755 или дори 777 като разрешения; имайте предвид, че настройването на разрешенията, докладвани от GCS конектора, като разрешаващи, всъщност не изпуска по-голям достъп, отколкото иначе, тъй като достъпът до GCS е обусловен само от идентификационни данни за oauth2 (вероятно чрез акаунт за услуга, ако сте на GCE VM). Единствената цел е да намерите докладвано разрешение, което прави Hadoop инструментите, които използвате, щастливи (където някои инструменти може да се оплакват, че 777 е твърде разрешителен).

person Dennis Huo    schedule 12.09.2015
comment
Благодаря Денис. Стартирането на bdutil с временната моментна снимка, която имате по-горе, заедно с промяната на fs.gs.reported.permissions решиха проблема. Временната моментна снимка е за hadoop1 и аз използвам hadoop2, така че се опитах да създам моментна снимка за hadoop2, като използвам инструкциите по-горе. Изграждането и внедряването работи, но когато стартирах hdfs dfs -ls gs:///, например, получих грешка com/google/cloud/hadoop/util.PropertyUtil class not found. Някакви идеи какво може да ми липсва в моята компилация, за да произведе тази грешка, или мога ли да продължа с помощта на hadoop1 jar? - person Andy Crockett; 12.09.2015
comment
А, съжалявам за това, ето hadoop2 моментна снимка - person Dennis Huo; 13.09.2015
comment
Въпреки че като се замисля, това вероятно изглежда същото като вашата собствена компилация на hadoop2; класът PropertyUtil беше добавен в изданието от 27 май, gcs-connector-1.4.0; Възможно ли е да имате версии на GCS конектор, по-стари от 1.4.0 на някоя от главните или работните пътеки на класове или класове, заредени в работещи услуги на демон? - person Dennis Huo; 13.09.2015
comment
Между другото, току-що публикувахме съобщение за най-новата версия, която включва всички необходими актуализации и премина през проверка на версията и т.н.: groups.google.com/forum/#!topic/gcp-hadoop-announce/pISo6LW0OTw Може да искате да надстроите до bdutil-1.3 .2 когато е удобно. - person Dennis Huo; 13.09.2015
comment
Благодаря Денис. Ще използвам най-новата версия на bdutil, но успях да намеря грешката. Файлът hadoop2 jar, който публикувахте, беше много по-голям от този, който използвах, така че използвах засенчения буркан, който създадох, и той реши проблема. Благодаря отново за помощта. - person Andy Crockett; 13.09.2015