2014-11-05 3 views
5

मेरे पास कुछ वेब सर्वर लॉग हैं जिन्हें मैं हाइव से पूछना चाहता हूं। निर्देशिका संरचना, HDFS में, इस तरह दिखता है:विभाजन के बिना उपनिर्देशिका में रिकर्सिव रूप से उतर सकते हैं या hive-site.xml संपादित कर सकते हैं?

/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/' 

... जब तक कि मैं चलाने हालांकि हाइव सबफ़ोल्डर में उतर नहीं करता

set hive.input.dir.recursive=true; 
set hive.mapred.supports.subdirectories=true; 
set hive.supports.subdirectories=true; 
set mapred.input.dir.recursive=true; 

मैंने देखा है अन्य पदों तालिका स्तर (Issue creating Hive External table using tblproperties जैसे) पर इन गुणों को सेट: हाइव क्वेरी चलाने से पहले निम्न कमांड

TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE", 
    "hive.mapred.supports.subdirectories" = "TRUE", 
    "hive.supports.subdirectories" = "TRUE", 
    "mapred.input.dir.recursive" = "TRUE"); 

दुर्भाग्यवश, यह मेरे लिए काम नहीं करता है: तालिका जब मैं पूछता हूं तो कोई रिकॉर्ड वापस नहीं करता है। मैं समझता हूं कि इन गुणों को hive-site.xml में सेट करना संभव है, लेकिन मुझे कोई बदलाव नहीं करना पड़ेगा जो अन्य उपयोगकर्ताओं को प्रभावित कर सकता है यदि मुझे आवश्यकता नहीं है।

क्यू) क्या कोई तालिका बनाने का कोई तरीका है जो विभाजन का उपयोग किए बिना उपनिर्देशिका में उतरता है, साइट-व्यापी परिवर्तन करता है, या हर 4 आज्ञाओं को चलाता है?

+1

पर काम किया आप जब मैं विकल्प के बिना लागू HIVE_HOME/bin/.hiverc और $ HOME/लोड करने का प्रयास करेंगे .hiverc CLI में इन 4 आदेश डाल सकते हैं। प्रारंभिक फाइलों के रूप में hiverc। – user3484461

उत्तर

9

HDInsight में हाइव का उपयोग करके, मैंने हाइव क्वेरी में अपनी बाहरी तालिका बनाने से पहले निम्न गुण सेट किए हैं और यह मेरे लिए काम करता है।

SET hive.mapred.supports.subdirectories=TRUE; 
SET mapred.input.dir.recursive=TRUE; 
1

ये टेबल गुण नहीं हैं।

TBLPROPERTIES ("hive.input.dir.recursive" = "TRUE", 
    "hive.mapred.supports.subdirectories" = "TRUE", 
    "hive.supports.subdirectories" = "TRUE", 
    "mapred.input.dir.recursive" = "TRUE"); 

ए) छत्ता-site.xml

0

में जोड़ने

<property> 
    <name>mapred.input.dir.recursive</name> 
    <value>true</value> 
    </property> 

    <property> 
    <name>hive.mapred.supports.subdirectories</name> 
    <value>true</value> 
    </property> 

आप सेट Ambari निम्नलिखित गुण का उपयोग कर रहे हैं, तो कस्टम छत्ता-site.xml अंदर उन्नत config अलग करने।

** - सेट hive.input.dir.recursive = सही

सेट hive.mapred.supports.subdirectories = सही

सेट hive.supports.subdirectories = सही

सेट mapred। input.dir.recursive = TRUE **

और फिर प्रभावित सेवाओं को पुनरारंभ करें। यह सभी डेटा recursively पढ़ा जाएगा। ozw1z5rd की पोस्ट से

0

सेटिंग्स Hortonworks

alter table .... set blproperties (
    "hive.input.dir.recursive" = "TRUE", 
    "hive.mapred.supports.subdirectories" = "TRUE", 
    "hive.supports.subdirectories" = "TRUE", 
    "mapred.input.dir.recursive" = "TRUE");  
संबंधित मुद्दे

 संबंधित मुद्दे