hive에서 count를 사용하기 위해 group by 컬럼을 적용한 후 order by 컬럼을 사용할 때 사용할 팁이다.



특정 필드를 기반으로 group by 후, count 별 역순으로 확인할 때, 

order by 뒤에 들어갈 필드는 count(*)에 대한 앨리어스를 사용하면 잘된다.


select timezone, count(*) as count from request where date=20160401

 group by timezone order by count desc limit 30




'hadoop' 카테고리의 다른 글

[hadoop] getmerge 명령어  (0) 2016.04.21
[hive] count와 distinct 이슈  (0) 2016.04.20
[hive] ALTER TABLE 예시  (0) 2016.04.19
[hive] alter table 시 주의 사항  (0) 2016.04.19
[hive] hive.cli.print.header  (0) 2016.04.19
Posted by '김용환'
,

[hive] ALTER TABLE 예시

hadoop 2016. 4. 19. 15:21






Hive의 ALTER TABLE 문은 많은 기능을 가진다.

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterTable



단순한 컬럼 수정 뿐 아니라, 순서 변경, 추가, 완전 치환, 이름 변경 등의 기능을 가진다.



RENAME TO 절을 이용하여 이름을 변경한다. 



hive> CREATE TABLE users (`id` int, `location` string);

OK

hive> desc users;

OK

col_name data_type comment

id                   int

location             string




hive> ALTER TABLE users RENAME TO new_users;

OK

hive> desc new_users;

OK

col_name data_type comment

id                   int

location             string

Time taken: 0.036 seconds, Fetched: 2 row(s)




테이블 속성을 변경할 수 있다.


hive> ALTER TABLE users SET TBLPROPERTIES ('comment' = 'new user heros');

OK



컬럼을 추가할 수 있다.


hive> ALTER TABLE  users ADD COLUMNS (`work` string COMMENT 'comment');

OK

Time taken: 0.108 seconds

hive> desc users;

OK

col_name data_type comment

id                   int

location             string

work                 string               comment

Time taken: 0.104 seconds, Fetched: 3 row(s)





한 번에 다중 컬럼 추가 기능도 제공한다.


hive> ALTER TABLE  users ADD COLUMNS (`has_talk` string COMMENT 'checking whether user has talk', `json` string);

OK

Time taken: 0.041 seconds

hive> desc users;

OK

col_name data_type comment

id                   int

location             string

work                 string               comment

has_talk             string               checking whether user has talk

json                 string

Time taken: 0.036 seconds, Fetched: 5 row(s)





컬럼의 타입과 순서를 변경한다. 


hive> ALTER TABLE users CHANGE work work_name string AFTER json;

OK

Time taken: 0.047 seconds

hive> desc users;

OK

col_name data_type comment

id                   int

location             string

has_talk             string               checking whether user has talk

json                 string

work_name           string               comment

Time taken: 0.039 seconds, Fetched: 5 row(s)



컬럼을 삭제하기 위해 DROP 또는 DROP COLUMN 절을 사용하면 에러가 발생한다.

hive>ALTER TABLE users DROP COLUMN json;

error



따라서 DROP 대신 REPLACE 절을 이용하여 테이블 스키마를 수정한다.



hive> ALTER TABLE users REPLACE COLUMNS (`id` int, `location` string);

OK

Time taken: 0.071 seconds

hive> desc users;

OK

col_name data_type comment

id                   int

location             string

Time taken: 0.05 seconds, Fetched: 2 row(s)




Posted by '김용환'
,



필드명과 주석에 쓰이는 문자열을 표시하는 기호가 다르다.


필드명은 `로 사용하고, 주석은 '로 사용한다.



hive> ALTER TABLE  users ADD COLUMNS (`json` string, `timezone` string COMMENT `timezone of user`);

mismatched input 'timezone of user' expecting StringLiteral near 'COMMENT' in column specification




hive> ALTER TABLE  users ADD COLUMNS (`json` string, `timezone` string COMMENT 'timezone of user');

OK


Posted by '김용환'
,


hive에서 헤더가 안나올 때가 있다.



hive> select * from members


값만 나옴




헤더가 나오게 하려면,  아래 설정 값을 true로 설정한다.


hive> set hive.cli.print.header=true;




hive 실행시부터 select 결과에서 헤더를 보고 싶다면, .hiverc에 추가한다.


cat > ~/.hiverc

 set hive.cli.print.header=true;



Posted by '김용환'
,


텍스트 파일에서 hive 테이블로 읽어들일 때, 구분자를 잘 사용하여, 데이터 타입에 맞게 잘 저장할 수 있다.




CREATE TABLE  ..



ROW FORMAT DELIMITED

FIELDS TERMINATED BY '|'

COLLECTION ITEMS TERMINATED BY ','

MAP KEYS TERMINATED BY ':';





데이터을 읽어 테이블로 생성할 때. LOAD DATA LOCAL INPATH 문을 사용한다.



LOAD DATA LOCAL INPATH '/home/www/data.txt' OVERWRITE INTO TABLE member;




'hadoop' 카테고리의 다른 글

[hive] alter table 시 주의 사항  (0) 2016.04.19
[hive] hive.cli.print.header  (0) 2016.04.19
brew를 이용해서 hadoop, hive 설치하기  (0) 2016.04.19
[hadoop] mkdir -p  (0) 2016.04.18
[hive] database 만들기  (0) 2016.04.18
Posted by '김용환'
,



mac에서 hadoop, hive를 쉽게 쓰기 위한 방법을 링크한다.


1. hadoop 설치

https://getblueshift.com/setting-up-hadoop-2-4-and-pig-0-12-on-osx-locally/


(hadoop 2.7.1 설치)



./sbin/start-dfs.sh 하고 아래와 같은 에러가 발생했다.


There are 0 datanode(s) running and no node(s) are excluded in this operation.




 libexec/etc/hadoop/core-site.xml에 추가한다.


  <property>

        <name>hadoop.tmp.dir</name>

   <value>/app/hadoop/tmp</value>

   <description>A base for other temporary directories.</description>

</property>




디렉토리 생성 및 권한을 추가한다.


sudo mkdir -p /app/hadoop/tmp

sudo chown 사용자이름 /app/hadoop/tmp




그리고, 네임노드를 포맷한다.

bin/hadoop namenode -format

네임 노드를 포맷하지 않으면, 아래 에러가 발생한다.

ERROR org.apache.hadoop.hdfs.server.namenode.FSNamesystem: FSNamesystem initialization failed.

java.io.IOException: NameNode is not formatted.





2. hive 설치

https://noobergeek.wordpress.com/2013/11/09/simplest-way-to-install-and-configure-hive-for-mac-osx-lion/



(hive 1.2.7 설치)


'hadoop' 카테고리의 다른 글

[hive] hive.cli.print.header  (0) 2016.04.19
[hive] 데이터 타입에 맞게 구분자 활용하여 테이블 저장하기  (0) 2016.04.19
[hadoop] mkdir -p  (0) 2016.04.18
[hive] database 만들기  (0) 2016.04.18
[hive] hive cli history  (0) 2016.04.17
Posted by '김용환'
,

[hadoop] mkdir -p

hadoop 2016. 4. 18. 15:06


하둡의 mkdir 명령어는 디렉토리를 생성한다.


hdfs dfs -mkdir /user/www/dump/



상위 디렉토리가 없으면, 'No such file or directory' 에러가 발생한다.


리눅스 머신에서 mkdir -p 명령어를 사용한 것처럼 -p 옵션을 추가해야 에러가 발생하지 않고, 하위 디렉토리까지 깔끔하게 만들어진다. 


hdfs dfs -mkdir -p /user/www/dump/



Posted by '김용환'
,

[hive] database 만들기

hadoop 2016. 4. 18. 13:47



hive에서 테이블 생성시, 테이블 정보가 저장되는 HDFS 디렉토리는 hive-site.xml에서 정의된 hive.metastore.warehouse.dir로 정의된 디렉토리이다.



 <property>

    <name>hive.metastore.warehouse.dir</name>

    <value>/user/hive/warehouse</value>

  </property>




flynn 이라는 하이브 데이터베이스를 생성한다.


hive>CREATE DATABASE flynn;



하이브 데이터베이스가 없을 때만 하이브 데이터베이스를 생성한다.


hive>CREATE DATABASE IF NOT EXISTS flynn;



생성한 데이터베이스를 보려면 다음과 같이 사용한다.


hive>SHOW DATABASES;

flynn


hive>SHOW DATABASES LIKE 'fl.*';

OK

flynn



기본 데이터 베이스에 대한 정보를 확인하려면 DESCRIBE DATABASE를 확인한다. hive-site.xml 에서 정의된 내용과 동일하다.



hive> DESCRIBE DATABASE default;

OK

default Default Hive database hdfs://story-hadoop/user/hive/warehouse public ROLE



flynn 하이브 데이터베이스를 생성하면, 다음과 같이 hdfs 명령어를 이용하여 정상적으로 하이브 DB를 만들었는지 확인할 수 있다. 


$ hdfs dfs -ls /user/hive/warehouse

/user/hive/warehouse/flynn.db



flynn 데이터베이스를 삭제하려면 drop database 명령어를 사용한다.



hive> DROP DATABASE flynn;


$ hdfs dfs -ls /user/hive/warehouse

파일 없음



참고로, 아래처럼 특정 hdfs 위치, 주석, 속성을 넣어 만들 수도 있지만, hdfs 위치는 잘 정의할 필요가 있다. 


$ CREATE DATABASE IF NOT EXISTS flynn COMMENT 'demo' LOCATION '/user/hive/warehouse1/' WITH DBPROPERTIES ('creator'='flynn');



hive> DESC DATABASE flynn;

OK

flynn demo hdfs://story-hadoop/user/hive/warehouse1 deploy USER




하이브의 데이터베이스와 테이블은 디렉토리처럼 테이블이 존재하면, 데이터베이스를 삭제할 수 없다. 먼저 테이블을 모두 삭제하고, 데이터베이스를 삭제해야 한다.

이런 불편함을 줄이기 위해 CASCADE를 사용할 수 있다. CASCADE를 사용하면 rm -rf와 같은 효과를 제공한다.


DROP DATABASE IF EXISTS flynn CASCADE;




ALTER DATABASE 문은 테이블 속성과 테이블의 권한(role, 하이브 0.13.0 이후)에만 적용할 수 있는 한계가 있다. 그 이상 하려면 삭제하고 다시 만들어야 한다. 

'hadoop' 카테고리의 다른 글

brew를 이용해서 hadoop, hive 설치하기  (0) 2016.04.19
[hadoop] mkdir -p  (0) 2016.04.18
[hive] hive cli history  (0) 2016.04.17
[hive] HiveServer2  (0) 2016.04.16
install hadoop 1.2.1 and hive 1.0.1  (0) 2016.03.29
Posted by '김용환'
,

[hive] hive cli history

hadoop 2016. 4. 17. 22:47



hive 명령어에 대한 history는 HOME/.hivehistory 위치에서 볼 수 있다.


$ cat ~/.hivehistory  | wc -l

100000


기본은 100,00 라인을 저장하며, hive 환경에서는 화살표 위/아래 키로 확인할 수 있다.




'hadoop' 카테고리의 다른 글

[hadoop] mkdir -p  (0) 2016.04.18
[hive] database 만들기  (0) 2016.04.18
[hive] HiveServer2  (0) 2016.04.16
install hadoop 1.2.1 and hive 1.0.1  (0) 2016.03.29
[hive] 함수 설명 보기  (0) 2016.03.28
Posted by '김용환'
,

[hive] HiveServer2

hadoop 2016. 4. 16. 18:27


hive의 버전 정리.




hive 0.11 버전(2013년 5월) 에서 내부 엔진을 리팩토링하면서 HiveServer2라는 이름으로 배포했다.


hive 1.0.0 버전(2015년 2월)


hive 2.0.0 버전(2016년 2월)



'hadoop' 카테고리의 다른 글

[hive] database 만들기  (0) 2016.04.18
[hive] hive cli history  (0) 2016.04.17
install hadoop 1.2.1 and hive 1.0.1  (0) 2016.03.29
[hive] 함수 설명 보기  (0) 2016.03.28
[hive] 하이브는 등가 조인(equal join)만 지원한다.  (0) 2016.03.25
Posted by '김용환'
,