Hive空間演算 -1-


取り敢えずこれと同じ事をやってみる
大量データ処理

あらかじめArcGISでデータをJsonにしていれてみた。
結果から言うと一日待っても処理が返ってくることは無かった。。

mount -t cifs //ipあどれす/shared /mnt -o username=ゆーざ,password=ぱす
cp -r /mnt/json_data /tmp
umount /mnt

sudo -u hdfs hadoop fs -mkdir /user/hive/jpn
sudo -u hdfs hadoop fs -mkdir /user/hive/addr

sudo -u hdfs hadoop fs -put /tmp/json_data/jpn/japan_ver71.json /user/hive/jpn
sudo -u hdfs hadoop fs -put /tmp/json_data/addr/cb.json /user/hive/addr

sudo -u hdfs hadoop fs -chmod -R 777 /user

hive

ADD JAR /usr/lib/hive/lib/esri-geometry-api.jar;
ADD JAR /usr/lib/hive/lib/spatial-sdk-hadoop.jar;

create temporary function ST_Contains as 'com.esri.hadoop.hive.ST_Contains';

SHOW DATABASES;

use test;
show tables;

CREATE EXTERNAL TABLE IF NOT EXISTS
 jpn71
  (
    JCODE string
   ,KEN string
   ,SICHO string
   ,GUN string
   ,SEIREI string
   ,SIKUCHOSON string
   ,CITY_ENG string
   ,P_NUM INT
   ,H_NUM INT
   ,SHAPE binary
  )
ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde'              
STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/user/hive/jpn';


CREATE EXTERNAL TABLE IF NOT EXISTS
 addrjpn
  (
   KEN string
  ,SHIKUTYOSON string
  ,OOAZATYOU string
  ,GAIKU string
  ,KEI TINYINT
  ,X DOUBLE
  ,Y DOUBLE
  ,lat DOUBLE
  ,lon DOUBLE
  ,JyukyoCode INT
  ,DaihyoCode INT
  ,PreCode INT
  ,PostCode INT
  ,SHAPE binary
  )

ROW FORMAT SERDE 'com.esri.hadoop.hive.serde.JsonSerde'              
STORED AS INPUTFORMAT 'com.esri.json.hadoop.EnclosedJsonInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/user/hive/addr';
   

SELECT
 jpn71.SIKUCHOSON 
 ,count(*) cnt 
FROM
 jpn71
JOIN
 addrjpn
WHERE
 ST_Contains(jpn71.shape, addrjpn.shape)
GROUP BY
 jpn71.SIKUCHOSON
ORDER BY
 cnt desc;

exit;

テーブル消すときは下記のような形
EXTERNAL TABLEの場合は実体の分散FSに存在するファイルが消える訳ではない様子

drop table if exists addrjpn;
カテゴリー: 開発, 設計 タグ: , パーマリンク