小编awh*_*han的帖子

将CSV Serde与Hive create table一起使用可将所有字段类型转换为字符串

如果我创建表并指定CSVSerde,则所有字段都将转换为字符串类型.

hive> create table foo(a int, b double, c string) row format serde 'com.bizo.hive.serde.csv.CSVSerde' stored as textfile; OK Time taken: 0.22 seconds hive> describe foo; OK a string from deserializer b string from deserializer c string from deserializer Time taken: 0.063 seconds, Fetched: 3 row(s) Serde来自https://github.com/ogrodnek/csv-serde

如果我从这个页面https://cwiki.apache.org/confluence/display/Hive/CSV+Serde尝试serde'org.apache.hadoop.hive.serde2.OpenCSVSerde',我看到了同样的事情.所有字段都将更改为字符串类型.

Hive版本1.2.1 Hadoop版本2.7.0 java版本"1.7.0_80"

csv hadoop hive opencsv hiveql

6
推荐指数
1
解决办法
4794
查看次数

修改配置单元查询以强制使用1个以上的reducer

WRT由c3.2xlarge实例组成的3节点集群.

我有两张桌子.表U有大约6500万条记录,包含纬度和经度等字段.表L有大约100万条记录,还包含纬度和经度.

U存储为ORC表.

任务是确定有多少U记录落在L的10英里半径范围内.

select l.id, count(u.id) from U u, L l where 3960 *
acos(cos(radians(l.lat)) * cos(radians(u.lat)) * cos(radians(l.long) -
radians(u.long)) + sin(radians(l.lat)) * sin(radians(u.lat))) < 10.0
group by l.id;
Run Code Online (Sandbox Code Playgroud)

该位3960 * acos(cos(radians(l.lat)) * cos(radians(u.lat)) * cos(radians(l.long) - radians(u.long)) + sin(radians(l.lat)) * sin(radians(u.lat))) < 10.0只是纬度/长度对之间的距离应小于10英里约束.

问题:查询似乎需要永远完成.虽然地图阶段相对较快地完成,但减少阶段会以某个固定百分比(80%ish)停滞

我在Hive发出的输出消息中注意到了这一点.编译时确定的减少任务数:1

我尝试通过将mapred.reduce.tasks设置为7来增加reducer的数量, 但它总是最终为1.我没有成功增加reducers的数量.

这个答案 似乎表明,如果我以不同的方式编写查询,那么我可以强制使用1个以上的reducer.但我还没能做到.

执行时间估计:对于L中的单个位置,获得答案大约需要60秒.通过该帐户,它应该需要6000万秒,大约700天!应该花这么多时间吗?即使是Hadoop.

我也尝试过将附加条件限制在一个10英里乘10英里见方的盒子中,L在盒子中心的位置,但现在花费的时间是40秒,这不是一个巨大的进步.

问题:

1)如何强制减少更多的减速器?2)是否有更好的(在执行时间方面)查询?3)任何其他建议,将帮助我解决这个问题.

版本: Hadoop - 2.7.0 Java 1.7.0_80 Hive 1.2.1

sql hadoop hive bigdata

5
推荐指数
1
解决办法
959
查看次数

标签 统计

hadoop ×2

hive ×2

bigdata ×1

csv ×1

hiveql ×1

opencsv ×1

sql ×1