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;




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 설치)


Posted by 김용환 '김용환'

[hadoop] mkdir -p

hadoop 2016.04.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/



'hadoop' 카테고리의 다른 글

[hive] 데이터 타입에 맞게 구분자 활용하여 테이블 저장하기  (0) 2016.04.19
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
Posted by 김용환 '김용환'



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 김용환 '김용환'