벌써 꽤 되었지만 지난 포스팅에서 도커(docker)에다가 centos7을 구축하고
그 위에 하둡, 스파크, 제플린을 설치해서 배포까지 했습니다.
과정은 아래 링크를 따라가시면 됩니당
https://lsjsj92.tistory.com/418
이거는 도커에 하둡(hadoop) 설치
https://lsjsj92.tistory.com/422
도커에 하둡(hadoop) 설치 후 아파치 스파크(apache spark) 설치
https://lsjsj92.tistory.com/425
아파치 제플린(apache zeppelin) 설치
순서대로 따라가시면 1편부터 보실 수 있습니다.
이번 포스팅은
현재 아파치 제플린까지 설치되어 있는 상태인데요
여기에 이제 apache hive를 설치해보려고 합니다.
하이브는 기존의 맵리듀스(mapreduce)의 단점을 보완하고, HiveQL을 이용해서 마치 sql을 이용하는 것처럼 맵리듀스를 실행시키는데요
기존의 맵리듀스는 자바로 프로그래밍을 짜다보니까 복잡하기도 하고, 개발하는데 시간이 오래 걸리기도 했습니다.
하지만 hive를 이용하면 sql문을 이용해서 질의를 날릴 수 있어 원하는 결과를 빠르게 얻을 수 있습니다.
이러한 하이브를 설치해보죠
마찬가지로 centos7에 하이브(hive)를 설치합니다.
그리고 이미 하둡이 설치되어 있구요
마리아(mariadb)를 이용합니다.(mysql도 가능)
먼저 하이브를 다운을 받습니다.
apache hive를 구글에 검색하면 다운로드 페이지가 나오는데요
거기서 들어가시면 http://apache.tt.co.kr/hive/ 사이트가 나옵니다.
여기서 저는 hive 2.3.4 버전을 받았습니다
그리고 바로 하이브를 설치하는게 아니라
하이브의 메타데이터를 저장할 db가 필요한데요
mysql이나 mariadb를 사용할 수 있습니다.
저는 마리아 디비를 사용할 것입니다.
혹시 mysql로 사용하실 분들을 위해서 mysql 설치 방법만 올리겠습니다.
나머지 hive에서 설정하는 것은 똑같기 때문입니다.
만약 그냥 마리아(mariadb)를 사용하시면 아래 단계는 조금 건너뛰셔도 됩니다.
mysql을 설치하려면 먼저 위와 같이 mysql57-community를 받아야 합니다.
그리고 yum -y nstall mysql-community-server를 입력해서 다운을 받습니다.
이후 systemctl start mysqld, systemctl enable mysqld를 입력해서 실행시켜줍니다.
최초 로그인 시 비밀번호가 필요한데요.
/var/log/mysqld.log 에 임시 비밀번호가 있습니다.
여기 temporary password가 있죠? 저 부분을 기억해둡니다.
그리고 로그인하시면 됩니다.
근데 매번 저 비번을 입력할 수 없으니 비밀번호를 초기화 해야겠죠?
mysql이 정책이 조금 바뀌면서 비밀번호 바꾸는 것이나, 처음 사용할 때 뭔가 달라졌습니다.
맨 처음에 alter user 'root'@'localhost' identified by '비밀번호'; 를 입력해줘야 합니다.
그리고 flush privileges를 잊지 마세요
다음으로 mysql db를 사용한다고 지정하고
update user set authentication_string = password('12341234') where user = 'root' 등을 통해 비밀번호를 바꿔줍니다
마지막으로 /etc/my.cnf에 들어가서 한글 설정을 위한 utf8 설정을 해주고 나옵니다.
그러면 위와 같이 utf8 설정이 완료됩니다.
여기까지가 mysql 설치 방법입니다.
이제 mariadb를 설치하겠습니다.
앞서 말씀드린대로 mariadb를 기준으로 저는 hive를 진행합니다.
mysql을 사용하시는 분들은 아래 mariadb를 설치하는 부분은 건너뛰셔도 됩니다.
먼저 vi /etc/yum.repos.d/MariaDB.repo를 통해 새로운 파일을 하나 만듭니다.
그리고 위 내용을 작성합니다
mariadb를 설치하기 위한 설정입니다
yum install MariaDB-server.x86_64를 입력해서 설치합니다.
근데 중간에 위와 같은 transaction check error가 마리아디비(mariadb)를 설치할 때 나올 수도 있습니다.
이게 mysql과 충돌나서 이렇다고 하네요
yum list installed | grep -i mysql 을 쳐보시면 저 mysql 애들이 나옵니다.
저것들을 전부 삭제합니다!
yum -y erase mysql~을 통해서 삭제하시면 됩니다.
만약 저 오류가 나오지 않고 잘 설치가 되시면 이 과정은 필요없습니다.
그리고 systemctl start mariadb를 입력해서 마리아디비를 실행합니다.
/usr/bin/mysqladmin -u root password '1234'를 입력해서 비밀번호 설정 후 로그인!
그리고 hive 계정을 생성합니다.
create user 'hive'@'%' identified by 'hive';
생성하고 권한 부여
grant all on *.* to 'hive'@localhost identified by 'hive';
flush privileges;
를 진행해서 하이브 계정을 생성해주고 권한을 부여해줍니다.
그리고 mariadb을 잠시 나와서 hive로 로그인해줍니다.
hive 계정으로 로그인 후 create database hive를 입력해서 hive db를 만들어줍니다.
자! 이제 apache hive를 본격적으로 설치해보죠
아까 받았던 apache-hive-2.3.4를 tar zxvf로 압축을 풀어줍니다.
이제 이 디렉토리를 hive로 ln -s를 해줍니다. 사진에는 나와있지 않습니다.
/etc/profile에 가서
export HIVE_HOME을 설정해줍니다
그리고 hive와 mariadb를 연동시켜주기 위해서 java connector를 받습니다
받은 java connector를 hive의 lib에 넣어줍니다
다음으로 hive 디렉터리에 conf에 들어가서 hive-env.sh를 만들어줍니다.
template로 되어 있으니 만들어주셔야 합니다.
여기서 hadoop_home을 설정해줍니다.
hive-site.xml도 설정해줘야 합니다.
아마 파일이 없을 수도 있습니다. 새롭게 만들어서
위 내용을 작성합니다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mariadb://localhost:3306/hive?createDatabaseIfNotExist=true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.mariadb.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>비번</value>
</property>
</configuration>
이렇게 설정했으면 아까 설치한 mariadb에 metastore를 초기화 작업을 해줍니다.
bin 디렉토리에 가서 명령어를 치면되는데요
아 위 명령어는 잘못나왔네요
아래처럼
이렇게 입력하면 schemaTool completed가 나옵니다.
실제로 mariadb에 접속해서 보면
hive db에 접속해서 보면 처음보는 table들이 만들어져있죠
이렇게 mariadb를 이용해서 metastore를 만들어줍니다.
이제 간단한 실습을 해보죠
hdfs에 필요한 디렉토리를 만들어줍니다.
hdfs dfs -mkdir /tmp
/user/hive
/user/hive/warehouse
그 외 권한 설정을 해줍니다.
다음으로 hive를 입력하면 hive 명령 프롬포트 창이 나옵니다.
이 상태에서 데이터를 업로드할 것인데요
이러한 데이터를 업로드할 것입니다.
업로드 전에 미리 table을 만들어줘야 합니다.
이렇게 테이블을 만들겁니다.
입력을 하면 OK가 나오면서 잘 되고
show tables;를 입력하면 만든 테이블 목록이 출력됩니다.
다음은 로컬에 있는 데이터를 hive table에 overwrite해줍니다.
overwrite를 하는 이유는 데이터가 insert 되거나 할 때 무조건 overwrite되기 때문이라고 하네요
load data local inpath 'path' overwirte into table table이름
그리고 select * from dept를 해주면 위 처럼 데이터가 나옵니다!
하지만 헤더가 안보이네요?
set hive.cli.print.header=true; 를 입력해주고 다시 하면
헤더가 보입니다
그리고 위 사진은 join을 진행한 것인데요
마지막쯔음 보면 map, reduce가 나오는 것을 보실 수 있습니다.
이렇게 내부적으로 mapreduce(맵리듀스)로 변환되어서 실행된다는점 알아두시면 되겠습니다.
또한, 아까 만들었던 hdfs의 hdfs dfs -ls /user/hive/warehouse를 보면
디렉터리가 3개가 더 생겼습니다.
저 디렉토리는 각각 하나의 table을 나타냅니다.
실제 데이터가 있죠
자! 이제 여기서 docker commit namenode를 해줍니다.
그리고 tag를 달아줍니다.
(아! 저 여기서 tag3가 에러가 있더라구요. 그래서 실제 배포는 tag가 4입니다!)
그리고 push해줍니다.
실제로는 tag4가 맞습니다
이렇게 확인이 되는데
만약 제꺼 다운 받으시는 분들은(없겠지만..) tag 4를 받으시면 됩니다.
여기까지 docker 환경에서 apache hive 설치 방법을 알아보고 docker를 commit 및 push도 했습니다.