[HADOOP] HiveServer2는 HDFS의 디렉토리를 많이 생성 / tmp를 / 하이브 / 하이브
HADOOPHiveServer2는 HDFS의 디렉토리를 많이 생성 / tmp를 / 하이브 / 하이브
우리는 Hiveserver2 새로운 claster (호튼 웍스 HDP2.2의 분포를) 만들 수 있습니다. 하이브 서버가이 위치에 생성하기 때문에 약간의 시간 후 우리는 HDFS의 / tmp / 하이브 / 하이브 이상 1048576 디렉토리가 있습니다.
누군가가 비슷한 문제를 가지고있다? hiveserver에서 로그 :
2015-08-31 06:48:15,828 WARN [HiveServer2-Handler-Pool: Thread-1104]: conf.HiveConf (HiveConf.java:initialize(2499)) - HiveConf of name hive.heapsize does not exist
2015-08-31 06:48:15,829 WARN [HiveServer2-Handler-Pool: Thread-1104]: conf.HiveConf (HiveConf.java:initialize(2499)) - HiveConf of name hive.server2.enable.impersonation does not exist
2015-08-31 06:48:15,829 WARN [HiveServer2-Handler-Pool: Thread-1104]: conf.HiveConf (HiveConf.java:initialize(2499)) - HiveConf of name hive.auto.convert.sortmerge.join.noconditionaltask does not exist
2015-08-31 06:48:15,833 INFO [HiveServer2-Handler-Pool: Thread-1104]: thrift.ThriftCLIService (ThriftCLIService.java:OpenSession(232)) - Client protocol version: HIVE_CLI_SERVICE_PROTOCOL_V6
2015-08-31 06:48:15,835 INFO [HiveServer2-Handler-Pool: Thread-1104]: session.SessionState (SessionState.java:createPath(558)) - Created local directory: /tmp/ffd9e5e7-7a4e-472e-b5f1-9c7f8acb0bff_resources
2015-08-31 06:48:15,883 INFO [HiveServer2-Handler-Pool: Thread-1104]: session.SessionState (SessionState.java:createPath(558)) - Created HDFS directory: /tmp/hive/hive/ffd9e5e7-7a4e-472e-b5f1-9c7f8acb0bff
2015-08-31 06:48:15,884 INFO [HiveServer2-Handler-Pool: Thread-1104]: session.SessionState (SessionState.java:createPath(558)) - Created local directory: /tmp/hive/ffd9e5e7-7a4e-472e-b5f1-9c7f8acb0bff
2015-08-31 06:48:16,064 INFO [HiveServer2-Handler-Pool: Thread-1104]: session.SessionState (SessionState.java:createPath(558)) - Created HDFS directory: /tmp/hive/hive/ffd9e5e7-7a4e-472e-b5f1-9c7f8acb0bff/_tmp_space.db
2015-08-31 06:48:16,065 INFO [HiveServer2-Handler-Pool: Thread-1104]: session.SessionState (SessionState.java:start(460)) - No Tez session required at this point. hive.execution.engine=mr.
세션을 생성 Hiveserver 방법 :
/**
* Create dirs & session paths for this session:
* 1. HDFS scratch dir
* 2. Local scratch dir
* 3. Local downloaded resource dir
* 4. HDFS session path
* 5. Local session path
* 6. HDFS temp table space
* @param userName
* @throws IOException
*/
private void createSessionDirs(String userName) throws IOException {
HiveConf conf = getConf();
Path rootHDFSDirPath = createRootHDFSDir(conf);
// Now create session specific dirs
String scratchDirPermission = HiveConf.getVar(conf, HiveConf.ConfVars.SCRATCHDIRPERMISSION);
Path path;
// 1. HDFS scratch dir
path = new Path(rootHDFSDirPath, userName);
hdfsScratchDirURIString = path.toUri().toString();
createPath(conf, path, scratchDirPermission, false, false);
// 2. Local scratch dir
path = new Path(HiveConf.getVar(conf, HiveConf.ConfVars.LOCALSCRATCHDIR));
createPath(conf, path, scratchDirPermission, true, false);
// 3. Download resources dir
path = new Path(HiveConf.getVar(conf, HiveConf.ConfVars.DOWNLOADED_RESOURCES_DIR));
createPath(conf, path, scratchDirPermission, true, false);
// Finally, create session paths for this session
// Local & non-local tmp location is configurable. however it is the same across
// all external file systems
String sessionId = getSessionId();
// 4. HDFS session path
hdfsSessionPath = new Path(hdfsScratchDirURIString, sessionId);
createPath(conf, hdfsSessionPath, scratchDirPermission, false, true);
conf.set(HDFS_SESSION_PATH_KEY, hdfsSessionPath.toUri().toString());
// 5. Local session path
localSessionPath = new Path(HiveConf.getVar(conf, HiveConf.ConfVars.LOCALSCRATCHDIR), sessionId);
createPath(conf, localSessionPath, scratchDirPermission, true, true);
conf.set(LOCAL_SESSION_PATH_KEY, localSessionPath.toUri().toString());
// 6. HDFS temp table space
hdfsTmpTableSpace = new Path(hdfsSessionPath, TMP_PREFIX);
createPath(conf, hdfsTmpTableSpace, scratchDirPermission, false, true);
conf.set(TMP_TABLE_SPACE_KEY, hdfsTmpTableSpace.toUri().toString());
}
해결법
-
==============================
1.우리는 문제 이전의 유사한 종류에 직면 해있다. Manily 하이브는 하이브 클라이언트와 기본 HDFS 인스턴스를 실행하는 시스템에 모두 임시 폴더를 사용합니다. 이 폴더는 쿼리 당 일시 / 중간 데이터 세트를 저장하는 데 사용되는 쿼리가 완료되면 일반적으로 하이브 클라이언트에 의해 정리됩니다. 그러나 비정상적인 하이브 클라이언트 종료의 경우, 일부 데이터가 남아있을 수 있습니다. 다음과 같이 구성 세부 사항은 다음과 같습니다 :
우리는 문제 이전의 유사한 종류에 직면 해있다. Manily 하이브는 하이브 클라이언트와 기본 HDFS 인스턴스를 실행하는 시스템에 모두 임시 폴더를 사용합니다. 이 폴더는 쿼리 당 일시 / 중간 데이터 세트를 저장하는 데 사용되는 쿼리가 완료되면 일반적으로 하이브 클라이언트에 의해 정리됩니다. 그러나 비정상적인 하이브 클라이언트 종료의 경우, 일부 데이터가 남아있을 수 있습니다. 다음과 같이 구성 세부 사항은 다음과 같습니다 :
HDFS 클러스터에서이 기본적으로 / tmp를 / hive-로 설정하고 구성 변수 hive.exec.scratchdir에 의해 제어됩니다 클라이언트 시스템에서이 / tmp를 /로 하드 코드 테이블 / 파티션에 데이터를 쓸 때, 하이브가 첫 번째 (임시 위치로 hive.exec.scratchdir 사용) 대상 테이블의 파일 시스템의 임시 위치로 작성하고 다음의 목표 테이블에 데이터를 이동합니다. 이 모든 경우에 적용 - 테이블 HDFS (일반적인 경우) 또는 S3 또는 NFS와 같은 파일 시스템에 저장되어 있는지.
출처
그래서 당신은 일정한 간격으로 임시 위치를 청소 수동 스크립트 또는 작업을 사용하거나 30 일 또는 60 일 데이터를 청소와 쉘 스크립트를 cron을 수
-
==============================
2.여기에 답이 있습니다. https://issues.apache.org/jira/browse/HIVE-15068
여기에 답이 있습니다. https://issues.apache.org/jira/browse/HIVE-15068
하이브의 높은 버전은이 문제를 해결한다. 낮은 버전의 경우, 음, cron 작업이 작동 쓰기
from https://stackoverflow.com/questions/32306404/hiveserver2-generate-a-lot-of-directories-in-hdfs-tmp-hive-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] ConnectException이는 : 하둡의 맵리 듀스를 실행하면 연결이 거부 됨 (0) | 2019.09.27 |
---|---|
[HADOOP] 외부 라이브러리와 하둡 하이브 UDF (0) | 2019.09.27 |
[HADOOP] 아파치 스파크 JavaSchemaRDD 그것에 RDD 입력 데이터가 비록 비어 (0) | 2019.09.27 |
[HADOOP] 어떻게 HDFS 블록의 크기를 관리합니까? (0) | 2019.09.27 |
[HADOOP] 나는 HDFS의 네임 노드를 포맷하려고하지만 말합니다 오전 : 권한이 거부 (0) | 2019.09.27 |