我已经建立了一个Hadoop集群(通过Cloudera Manager使用Cloudera发行版),我正在使用Hue接口运行一些Hive查询,该接口使用下面的Beeswax.
我的所有查询运行正常,我甚至成功部署了自定义UDF.
但是,在部署UDF时,我遇到了一个非常令人沮丧的版本问题.在我的UDF类的初始版本中,我使用了导致a的第三方类StackOverflowError.
我修复了这个错误,然后验证了可以从hive命令行成功部署和使用UDF.
然后,当我再次使用Hue和Beeswax时,我不断得到同样的错误.我只能通过更改我的UDF java类名来解决这个问题.(从Lower到Lower2).
现在,我的问题是,处理这类版本问题的正确方法是什么?
据我所知,当我使用左边的方便表单字段添加jar时,它们会被添加到分布式缓存中.那么,如何刷新/清除分布式缓存?(我无法LIST JARS;从Hive/Beeswax中运行等.它给我一个语法错误.)
当然希望有人可以通过自动添加基于驻留在HDFS目录中的逗号分隔文件的数据来帮助我创建外部HIVE分区表.我的理解或缺乏理解是,当您定义CREATE EXTERNAL TABLE,PARTITIONED并为其提供LOCATION时,它应递归扫描/读取每个子目录,并将数据加载到新创建的分区外部表中.以下内容应该为我的麻烦提供一些额外的见解......
Sample HDFS directory structure:<br>
/data/output/dt=2014-01-01<br>
/data/output/dt=2014-01-02<br>
/data/output/dt=2014-01-03 ...<br>
/data/output/dt=2014-05-21<br>
Run Code Online (Sandbox Code Playgroud)
每个'dt ='子目录都包含分隔文件.
以下是我的CREATE EXTERNAL TABLE语法的示例:
CREATE EXTERNAL TABLE master_test (UID string,
lname string,
fname string,
addr string,
city string,
state string,
orderdate string,
shipdate string)
PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/data/output/';
Run Code Online (Sandbox Code Playgroud)
在创建master_test外部表后,我原本认为我的所有分隔文件都已包含在CREATE中的表中.我将数据导入新定义的外部表的唯一方法是通过ALTER TABLE ADD PARTITION语句,例如:ALTER TABLE master_test ADD PARTITION(dt ='2014-04-16').或者,如果我明确定义分隔文件的位置,它将添加定义表的单个文件.
非常感谢任何建议或指导.