1

Hadoop이 설치된Google Cloud에서 하이브를 실행하려고합니다. 하이브는 잘 취임시키다 것 같다,하지만 난 hive을 실행할 때 나는 다음과 같은 잘못된 출력을 얻을 :Google Cloud의 Hive는/tmp에 대한 권한을 원하지만 권한을 변경할 방법이 없습니다.

Logging initialized using configuration in jar:file:/home/michael_w_sherman_gmail_com/apache-hive-0.14.0-bin/l 
ib/hive-common-0.14.0.jar!/hive-log4j.properties 
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-install/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar! 
/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [jar:file:/home/michael_w_sherman_gmail_com/apache-hive-0.14.0-bin/lib/hive-jdbc-0.14. 
0-standalone.jar!/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory] 
Exception in thread "main" java.lang.RuntimeException: java.lang.RuntimeException: The root scratch dir: /tmp/ 
hive on HDFS should be writable. Current permissions are: rwx------ 
     at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:444) 
     at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:672) 
     at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.apache.hadoop.util.RunJar.main(RunJar.java:212) 
Caused by: java.lang.RuntimeException: The root scratch dir: /tmp/hive on HDFS should be writable. Current per 
missions are: rwx------ 
     at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:529) 
     at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:478) 
     at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:430) 
     ... 7 more 

나의 첫번째 수정 hdfs-site.xml을 확인하고 dfs.permissions.enabled 설정을 변경했지만, 그것은 이미 false로 설정했다. 다음으로, 나는 chmod 권한을 시도했다. 그러나 chmod 변경 사항을 가져 가지 않습니다.

$의 하둡 FS는

15/01/28 23시 3분 13초 정보 gcs.GoogleHadoopFileSystemBase

을 -ls : 버전 GHFS : 1.2.9-hadoop2

찾을 수 8 개 항목을 을 ....

¹ 록 drwx은 ------ - xxxx_gmail_com xxxx_gmail_com 0 2015년 1월 28일 21시 54분 tmp를

$의 하둡 FS는 -R 777/tmp를

을 -chmod

15/01/28 23시 3분 31초 정보 gcs.GoogleHadoopFileSystemBase는 :

$의 하둡 FS가 15/01/28 23시 9분 35초 정보 gcs.GoogleHadoopFileSystemBase을 -ls 1.2.9-hadoop2 : 버전 GHFS : GHFS 버전 : 1.2.9-hadoop2

찾을 수 8 개 항목 ....

은 drwx ------ - xxx_gmail_com xxx_gmail_com 0 2015년 1월 28일 21시 54분 tmp를

다른 chmod 옵션 (예 : a+w) 사용 권한을 변경하지 못합니다. 그리고 파일의 소유자/그룹은 항상 ssh 사용자와 동일합니다 (위의 로그는 이메일을 사용자 이름으로 사용하는 Google 클라우드의 콘솔에서 시작된 ssh 터미널에서 가져온 것입니다). 그러나 내가 ssh에 들어가면 같은 문제가 발생합니다.

권한을 변경하거나 Hive가 오류를 발생시키지 않게하려면 어떻게합니까?

감사합니다.

+0

어떤 버전의 Hive를 설치 했습니까? –

+0

또한, "stacked by ...."조각을 포함한 * 전체 스택 추적을 제공 할 수 있습니까? 근본 원인을 http://grepcode.com/file/repo1.maven.org/maven2/org.apache.hive/hive-exec/0.14.0/org/apache/hadoop/hive/에서 추적 할 필요가 있습니다. ql/session/SessionState.java # 444 –

+0

@DennisHuo 수정 사항을 참조하십시오. 도움을 주셔서 감사 드리며 다른 것이 필요한지 알려주세요. –

답변

3

당분간 Hadoop 용 GCS 커넥터는 세밀한 HDFS 사용 권한을 지원하지 않으므로보고 된 700은 "가짜"입니다. 실제로 사용 권한은 ACLs을 통해 제어되며 읽기/쓰기 액세스 권한이있는 서비스 계정을 사용하는 경우 인증 된 GCE VM의 모든 Linux 사용자는 실제로 GCS 내의 모든 파일에 대해 읽기/쓰기/실행을 수행 할 수 있습니다.

Hive 0.14.0은 새로 추가 된 으로 표시됩니다. 루트 디렉토리에서 최소 733의 사용 권한을 확인합니다. 다만 사용 권한을 무시한 경우에도 액세스 가능성은 정상적으로 작동했을 것입니다. 유감스럽게도 현재 "필요한 권한"은 Hive의 SessionState에서 구성 할 수 없으며 Hadoop 용 GCS 커넥터에서도 구성 할 수 없습니다. 향후 릴리스에서는 Hadoop 용 GCS 커넥터에 대한 구성 설정을 제공하여보고 할 권한을 지정하거나 모든 디렉토리에 대해 완전한 fine-posix 권한을 구현할 수 있습니다.

그 사이에 Hive 0.13.0에는 불행한 검사가 없으므로 약간 오래된 Hive 버전에서 정상적으로 작동한다면 정상적으로 작동합니다.중요

: 말했다, 아직 더 많은 고급 "NFS 일관성 캐시"introduced in gcs-connector-1.3.0/bdutil-0.36.4을 설정하지 않기 때문에 "배포합니다"솔루션은 현재 공식적으로 일부 돼지 또는 하이브를 지원하지 않습니다 목록 일관성 캐시의 자동 설정 목록 일관성 캐시가 없으면 Hive 및 Pig가 "ls"를 사용하여 임시 파일을 커밋하기 때문에 예기치 않게 데이터가 손실 될 수 있습니다.

가장 좋은 방법은 실제로 latest bdutil-1.1.0을 다운로드하여 대신 사용하는 것입니다.

./bdutil -e querytools deploy 

또는 동등 :이 돼지 및 하이브를 지원하는 querytools_env.sh 파일 내부

./bdutil -e extensions/querytools/querytools_env.sh deploy 

, 당신은 찾을 수 있습니다 :

# URIs of tarballs to install. 
PIG_TARBALL_URI='gs://querytools-dist/pig-0.12.0.tar.gz' 
HIVE_TARBALL_URI='gs://querytools-dist/hive-0.12.0-bin.tar.gz' 

당신이 선택적으로 자신의 하이브 버전을 업로드 할 수있는 경우 자신의 양동이에 HIVE_TARBALL_URI (bdutil)을 수정하십시오. Hive 0.14.0은 여전히 ​​작동하지 않지만 Hive 0.13.0은 운이 좋을 것입니다. 또는 버전을 너무 신경 쓰지 않는다면 기본 하이브 0.12.0은 Google의 엔지니어링 팀에서 지속적으로 테스트하고 유효성을 검사하므로 더 나은 경험을 얻을 수 있습니다. 원하는 경우 GitHub에서 bdutil의 내용을 볼 수도 있습니다. https://github.com/GoogleCloudPlatform/bdutil

+0

'bdutil'이 그 일을했기 때문에 나는 Hive로 바로 뛰어 가서 일을 할 수있었습니다. 고맙습니다! –