[HADOOP] Hive가 파티션없이 또는 hive-site.xml을 편집하여 서브 디렉토리로 재귀 적으로 내려갈 수 있습니까?
HADOOPHive가 파티션없이 또는 hive-site.xml을 편집하여 서브 디렉토리로 재귀 적으로 내려갈 수 있습니까?
내가 하이브로 쿼리하고 싶은 웹 서버 로그가 있습니다. HDFS의 디렉토리 구조는 다음과 같습니다.
/data/access/web1/2014/09
/data/access/web1/2014/09/access-20140901.log
[... etc ...]
/data/access/web1/2014/10
/data/access/web1/2014/10/access-20141001.log
[... etc ...]
/data/access/web2/2014/09
/data/access/web2/2014/09/access-20140901.log
[... etc ...]
/data/access/web2/2014/10
/data/access/web2/2014/10/access-20141001.log
[... etc ...]
외부 테이블을 만들 수 있습니다.
CREATE EXTERNAL TABLE access(
host STRING,
identity STRING,
user STRING,
time STRING,
request STRING,
status STRING,
size STRING,
referer STRING,
agent STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|\\[[^\\]]*\\]) ([^ \"]*|\"[^\"]*\") (-|[0-9]*) (-|[0-9]*)(?: ([^ \"]*|\"[^\"]*\") ([^ \"]*|\"[^\"]*\"))?",
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")
LOCATION '/data/access/'
... Hive 쿼리를 실행하기 전에 다음 명령을 실행하지 않으면 Hive가 하위 폴더로 내려 가지 않습니다.
set hive.input.dir.recursive=true;
set hive.mapred.supports.subdirectories=true;
set hive.supports.subdirectories=true;
set mapred.input.dir.recursive=true;
다른 게시물이 테이블 수준에서 이러한 속성을 설정하는 것을 보았습니다 (예 : tblproperties를 사용하여 하이브 외부 테이블 생성 문제).
TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE",
"hive.mapred.supports.subdirectories" = "TRUE",
"hive.supports.subdirectories" = "TRUE",
"mapred.input.dir.recursive" = "TRUE");
불행히도,이 나를 위해 작동하지 않았다 : 쿼리 할 때 테이블을 모든 레코드를 반환하지 않습니다. hive-site.xml에서 이러한 속성을 설정할 수 있음을 알고 있지만 필요하지 않은 경우 다른 사용자에게 영향을 줄 수있는 변경을하지는 않습니다.
Q) 파티션을 사용하지 않고 하위 디렉토리로 내려가는 테이블을 만들거나 사이트 전체를 변경하거나 매번 네 개의 명령을 실행하는 방법이 있습니까?
해결법
-
==============================
1.HDInsight에서 하이브를 사용하여, 하이브 쿼리에서 외부 테이블을 생성하기 전에 다음 속성을 설정합니다.
HDInsight에서 하이브를 사용하여, 하이브 쿼리에서 외부 테이블을 생성하기 전에 다음 속성을 설정합니다.
SET hive.mapred.supports.subdirectories=TRUE; SET mapred.input.dir.recursive=TRUE;
-
==============================
2.이들은 표 속성이 아닙니다.
이들은 표 속성이 아닙니다.
TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE", "hive.mapred.supports.subdirectories" = "TRUE", "hive.supports.subdirectories" = "TRUE", "mapred.input.dir.recursive" = "TRUE");
가) 추가
<property> <name>mapred.input.dir.recursive</name> <value>true</value> </property> <property> <name>hive.mapred.supports.subdirectories</name> <value>true</value> </property>
hive-site.xml에서
-
==============================
3.ambari를 사용하는 경우 사용자 정의 hive-site.xml 내에 고급 구성을 하이브하기 위해 다음 등록 정보를 설정하십시오.
ambari를 사용하는 경우 사용자 정의 hive-site.xml 내에 고급 구성을 하이브하기 위해 다음 등록 정보를 설정하십시오.
** - SET hive.input.dir.recursive = TRUE
SET hive.mapred.supports.subdirectories = TRUE로 설정하십시오.
SET hive.supports.subdirectories = TRUE로 설정하십시오.
SET mapred.input.dir.recursive = TRUE **
영향을받은 서비스를 다시 시작하십시오. 이렇게하면 모든 데이터가 반복적으로 읽혀집니다.
-
==============================
4.ozw1z5rd의 게시물 설정이 Hortonworks에서 작동했습니다.
ozw1z5rd의 게시물 설정이 Hortonworks에서 작동했습니다.
alter table .... set blproperties ( "hive.input.dir.recursive" = "TRUE", "hive.mapred.supports.subdirectories" = "TRUE", "hive.supports.subdirectories" = "TRUE", "mapred.input.dir.recursive" = "TRUE");
from https://stackoverflow.com/questions/26767713/can-hive-recursively-descend-into-subdirectories-without-partitions-or-editing-h by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 병렬로 여러 클라이언트의 HDFS 파일에 추가 할 수 있습니까? (0) | 2019.06.04 |
---|---|
[HADOOP] NOT IN 절을 실행하는 하이브 명령 (0) | 2019.06.04 |
[HADOOP] hadoop java.net.URISyntaxException : 절대 URI의 상대 경로 : rsrc : hbase-common-0.98.1-hadoop2.jar (0) | 2019.06.04 |
[HADOOP] Hive는지도 축소를 사용할 때와 사용하지 않을 때를 어떻게 결정합니까? (0) | 2019.06.04 |
[HADOOP] MapReduce 셔플 / 정렬 방법 (0) | 2019.06.04 |