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] database 만들기  (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.04.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] 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
[hive] 함수 설명 보기  (0) 2016.03.28
Posted by 김용환 '김용환'

[hive] HiveServer2

hadoop 2016.04.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
[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
[hive] 하이브는 등가 조인(equal join)만 지원한다.  (0) 2016.03.25
Posted by 김용환 '김용환'


hadoop 1.2.1 과 hive 1.0.1에 대한 설치 내용을 간략히 기술한다.



* hadoop 로컬 실행 모드 설치


1) ssh

hadoop을 로컬 실행 모드로 실행하기 위해서 ssh가 연결할 수 있는 환경이어야 한다.

./bin/start-all.sh실행시 ssh로 연결하니 ssh를 잘 연결해야 한다. 



$ ssh-keygen

$ cat ~/.ssh/id_rsa.pub | ssh localhost 'cat >> ~/.ssh/authorized_keys'

$ ssh -l 계정 localhost

또는 

$ ssh 계정@localhost

$ cat ~/.ssh/id_rsa.pub >>  ~/.ssh/known_hosts



맥 환경이면, 시스템 설정 -> 공유 -> 원격 로그인을 활성화하여 ssh접근 되게 함


2) 환경설정

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home




3) 하둡 다운로드

curl http://apache.tt.co.kr/hadoop/common/hadoop-1.2.1/hadoop-1.2.1-bin.tar.gz 

설치 

mv 압축디렉토리 /usr/local/hadoop-1.2.1


4) 하둡 설정 수정 

$ vi /usr/local/hadoop-1.2.1/conf/mapred-site.xml

<configuration>

    <property>

        <name>mapred.job.tracker</name>

        <value>localhost:9001</value>

    </property>

</configuration>


$ vi /usr/local/hadoop-1.2.1/conf/hdfs-site.xml

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

</configuration>


$ vi /usr/local/hadoop-1.2.1/conf/core-site.xml

<configuration>

    <property>

        <name>fs.default.name</name>

        <value>hdfs://localhost:9000</value>

   </property>

</configuration>



5) 환경 변수 추가

.bashrc에 다음을 추가

(만약 JAVA_HOME을 설정안했다는 로그가 출력하면, .profile에도 추가한다.)


export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

export PATH=/usr/local/hadoop-1.2.1/bin:$PATH



6) 네임 노드를 포맷한다.


$ ./bin/hadoop namenode -format

만약 권한 이슈관련 에러가 발생한다면, 에러가 발생한 네임노드 디렉토리에 chmod 755 명령어를 이용한다.

(네임노드 포맷을 하지 않으면, http://localhost:50070/dfshealth.jsp 페이지를 열 수 없으며, 

logs 디렉토리의 로그 파일 에서 ipc.Client: Retrying connect to server: localhost/127.0.0.1:9000 이란 로그를 볼 수 있을 것이다.)


예) chmod 755 /tmp/hadoop/dfs/name




7) 실행


$ ./bin/start-all.sh


에러 없고, 데몬 잘 뜬 경우라면 잘된 경우이다. 




8) 확인


브라우져에서 http://localhost:50030/jobtracker.jsp를 열어서 jobtracker 페이지가 동작하는 지 확인한다.

브라우져에서 http://localhost:50070/dfshealth.jsp를 열어서 namenode 페이가 동작하는 지 확인한다.




* hive 설치 


1) hive 1.0.1 버전을 설치

http://apache.tt.co.kr/hive/hive-1.0.1/apache-hive-1.0.1-bin.tar.gz를 다운로드한다. 


압축을 풀고, /usr/local/hive-1.0.1에 복사한다. 


2) 권한 설정


hadoop fs -mkdir /tmp

hadoop fs -mkdir /user/hive/warehouse

hadoop fs -chmod go+w /tmp

hadoop fs -chmod go+w /user/hive/warehouse

hadoop fs -chmod go+w /tmp/hive



3) PATH 설정


bashrc에 PATH에 /usr/local/hive-1.0.1/bin를 추가한다. 


$ vi ~/.bashrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

export PATH=/usr/local/hadoop-1.2.1/bin:/usr/local/hive-1.0.1/bin:$PATH



정상적으로 동작하는지 확인한다.


hive> show tables;

OK

Time taken: 0.012 seconds

hive> select 1 + 1;

OK

2

Time taken: 0.342 seconds, Fetched: 1 row(s)





'hadoop' 카테고리의 다른 글

[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
[hive] 함수 설명 보기  (0) 2016.03.28
[hive] 하이브는 등가 조인(equal join)만 지원한다.  (0) 2016.03.25
[hive] 데이터를 하나로 합치기  (0) 2016.02.29
Posted by 김용환 '김용환'


hive 함수를 보려면 다음 명령어를 사용한다.


SHOW FUNCTIONS; 

DESCRIBE FUNCTION 함수이름;

DESCRIBE FUNCTION EXTENDED 함수이름;

 


예)


> DESCRIBE FUNCTION  xpath_string;

OK

xpath_string(xml, xpath) - Returns the text contents of the first xml node that matches the xpath expression

Time taken: 0.006 seconds, Fetched: 1 row(s)



> DESCRIBE FUNCTION EXTENDED xpath_string;

OK

xpath_string(xml, xpath) - Returns the text contents of the first xml node that matches the xpath expression

Example:

  > SELECT xpath_string('<a><b>b</b><c>cc</c></a>','a/c') FROM src LIMIT 1;

  'cc'

  > SELECT xpath_string('<a><b>b1</b><b>b2</b></a>','a/b') FROM src LIMIT 1;

  'b1'

  > SELECT xpath_string('<a><b>b1</b><b>b2</b></a>','a/b[2]') FROM src LIMIT 1;

  'b2'

  > SELECT xpath_string('<a><b>b1</b><b>b2</b></a>','a') FROM src LIMIT 1;

  'b1b2'

Time taken: 0.01 seconds, Fetched: 10 row(s)



'hadoop' 카테고리의 다른 글

[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
[hive] 하이브는 등가 조인(equal join)만 지원한다.  (0) 2016.03.25
[hive] 데이터를 하나로 합치기  (0) 2016.02.29
[hive] 날짜 구하기  (0) 2016.02.26
Posted by 김용환 '김용환'


하이브는 현재 등가 조인(equal join)만 지원한다. 비등가 조인(non equal join)은 지원하지 않는다. 

즉 = 만 된다.(예, on a.id = b.id)


https://issues.apache.org/jira/browse/HIVE-3133



대신, 다양한 조인을 지원한다. 


JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN,FULL OUTER JOIN, CROSS JOIN






Posted by 김용환 '김용환'


hive의 hql에서 하나의 테이블처럼 데이터를 하나로 합치는 방법은 다음과 같다. union all을 사용한다.



SELECT unioned.id, unioned.var1, unioned.var2

FROM (

  SELECT a.id, a.var1, a.var2

  FROM table_A a


  UNION ALL


  SELECT b.id, b.var1, b.var2

  from table_B b

) unioned;



주의할 점
1. FROM 절에 쓰는 테이블 명에 다른 alias 이름을 다르게 해줘야 한다.
2. 하위 질의의 필드명이 모두 동일해야 한다.
3. 특히 GROUP BY 절을 쓴다면, select에서 사용하는 as 절 뒷 부분이 아니라, 원래 select 원본 데이터를 기준으로 한다.


Posted by 김용환 '김용환'

[hive] 날짜 구하기

hadoop 2016.02.26 19:21



hive에서 날짜를 구하는 방법을 작성한 예시 코드이다.


오늘 날짜를 구하려면 다음과 같이 unix_timestamp를 이용하거나 unix_timestamp와 from_unixtime() 함수를 이용한 방식이 있다. 사람이 읽을 수 있는 함수를 보려면 from_unixtime() 함수를 잘 활용한다.


> select unix_timestamp();

1456481927


> select from_unixtime(unix_timestamp());

2016-02-26 19:21:52

 

YYYYMMDD와 같은 형태로 날짜의 특정 항목만 얻고 싶다면, year(), month()등과 같은 함수를 사용한다. 


unix_timestamp을 사용하는 방식을 사용하면 에러가 발생한다. 


> select year(unix_timestamp()), month(unix_timestamp()), day(unix_timestamp()), hour(unix_timestamp()), minute(unix_timestamp()), second(unix_timestamp());

 


current_timestamp이나 current_date로 현재 날짜를 얻을 수 있다. 두 개의 큰 차이는 current_date는 hour, minute, second 함수를 함께 사용할 수 없다.



> select year(current_timestamp), month(current_timestamp), day(current_timestamp), hour(current_timestamp), minute(current_timestamp), second(current_timestamp);

 2016 2 26 19 21 3

 


> select year(current_date), month(current_date), day(current_date), hour(current_date), minute(current_date), second(current_date);

 2016 2 26 NULL NULL NULL


Posted by 김용환 '김용환'


hadoop streaming을 처음 하는 사람에게 추천하는 글



http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/




mapper.py

#!/usr/bin/env python import sys # input comes from STDIN (standard input) for line in sys.stdin: # remove leading and trailing whitespace line = line.strip() # split the line into words words = line.split() # increase counters for word in words: # write the results to STDOUT (standard output); # what we output here will be the input for the # Reduce step, i.e. the input for reducer.py # # tab-delimited; the trivial word count is 1 

print '%s\t%s' % (word, 1)




reducer.py


#!/usr/bin/env python from operator import itemgetter import sys current_word = None current_count = 0 word = None # input comes from STDIN for line in sys.stdin: # remove leading and trailing whitespace line = line.strip() # parse the input we got from mapper.py word, count = line.split('\t', 1) # convert count (currently a string) to int try: count = int(count) except ValueError: # count was not a number, so silently # ignore/discard this line continue # this IF-switch only works because Hadoop sorts map output # by key (here: word) before it is passed to the reducer if current_word == word: current_count += count else: if current_word: # write result to STDOUT print '%s\t%s' % (current_word, current_count) current_count = count current_word = word # do not forget to output the last word if needed! if current_word == word: 

print '%s\t%s' % (current_word, current_count)



실행


hadoop jar contrib/streaming/hadoop-*streaming*.jar \

-mapper ./mapper.py \

-reducer ./reducer.py \

-file ./mapper.py  \

-file ./reducer.py \ -input /user/hduser/gutenberg/* \

-output /user/hduser/gutenberg-output

'hadoop' 카테고리의 다른 글

[hive] 데이터를 하나로 합치기  (0) 2016.02.29
[hive] 날짜 구하기  (0) 2016.02.26
[펌] hadoop streaming 기초 지식 쌓기  (0) 2016.02.17
[hadoop] top n 소팅  (0) 2016.02.16
[hadoop] scoop 쓸 때 유의사항  (0) 2016.02.05
[hadoop] hadoop distcp  (0) 2016.02.05
Posted by 김용환 '김용환'

[hadoop] top n 소팅

hadoop 2016.02.16 20:56


hadoop을 돌려서 키와 개수를 얻었고, 이에 대한 top n 소팅을 하고 싶다.


url별 개수별로 hadoop map-reduce를 돌려 다음과 같이 얻었다고 가정한다.


hadoop fs -text /user/google/count/2016/02/15/*


/search/test  15

/search/abc  10

/search/check  20

...





sort와 head를 그냥 사용하면 결과를 얻을 수 있다.

hadoop fs -text /user/google/count/2016/02/15/* | sort -n -k2 -r | head -n3


/search/check  20

/search/test  15

/search/abc  10





Posted by 김용환 '김용환'