-
brew를 통해 Hadoop설치, Hive설치 후 Mysql연동하기ComputerScience/DB,Cloud 2020. 7. 29. 19:07
개발하면서 가장 어렵고 곤란한 것을 뽑자면 새로운 프로그램 툴을 설치하고 환경설정하는 것이 아닐까?
이번에도 그렇다. Hadoop을 설치하고 Hive를 설치하고 Mysql을 연동하는데 정말 한 세월이 걸렸다.
잊지 않기 위해, 나와 같은 곤란함을 가진 사람들에게 도움이 되기 위해 다음과 같은 글을 올립니다.
- 설치는 Macbook에서 진행됐고 사용하는 terminal은 zsh입니다.
- 자바는 미리 설치가 되어있다고 가정합니다.
- 다운 받는 버전은 시기에 따라 다를 수 있으니 해당 버전에 맞게 숫자를 다르게 쓰셔야 합니다.
Homebrew 설치
맥용 패키지 매니저이다. yum과 apt-get과 유사하다고 보면 된다.
$/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
터미널에 다음과 같이 입력하고 brew를 설치해준다.
$brew --verison 을 입력했을 때, 버전이 나온다면 설치가 완료된 것이다.
mysql , hadoop, hive설치
$brew install mysql
... 설치 ...
$brew install hadoop
... 설치 ...
$brew install hive
... 설치 ...brew를 통해 mysql, hadoop 그리고 hive를 설치해주자.
설치된 경로는 /usr/local/Cellar이다. 기억해두자.
PATH설정
$open ~/.zshrc 혹은 vim이 익숙하시다면 vi ~/.zshrc
[bash를 사용하신다면 $open ~/.bash_profile]그러면 .zshrc 내용을 수정할 수 있다.
자바를 설치할 때 아마 경로를 다 설정해 줬을 것이다.
이런식으로 나와 있을 것이다.
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home [자바 경로]
export PATH=${PATH}:$JAVA_HOME/bin:그렇다면 이 내용을
export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
export HADOOP_HOME=/usr/local/Cellar/hadoop/3.3.0/libexec
export HIVE_HOME=/usr/local/Cellar/hive/3.1.2_1/libexec
export PATH=${PATH}:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:이런식으로 수정해준다.
중간에 3.3.0이나 3.1.2_1은 설치한 버전이고 각자의 경로에서 확인 가능하다.
수정한 내용을 저장해주고 터미널에 다음과 같이 입력한다.
$source ~./zshrc
Hadoop설정
하둡을 설치한 뒤 설정을 해주어야 한다.
tariat.tistory.com/492맥(mac)에서 하둡(hadoop) 설치하기
하둡을 집에서도 사용하고 싶어졌다. DB마다 SQL문법이 달라 매번 바뀌는 것도 귀찮기도 하고, 테스트를 해보기도 좋을 것 같다는 얄팍(?)한 생각에서 시작됐다. 하지만 설치를 시작하고 얼마 안 �
tariat.tistory.com
해당 블로그에 설정법을 자세히 써주셨으니 따라서 진행하면 된다.
설정을 마친 뒤 다음과 같이 입력한다.
$start-all.sh
$jps 를 입력 시 다음과 같이 나오면 성공이다,
[모든 것을 마치고 하둡을 사용하지 않을 때는, $stop-all.sh를 해주어야 한다]
mysql-java connector 다운로드
dev.mysql.com/downloads/connector/j/MySQL :: Download Connector/J
MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0.
dev.mysql.com
여기에서 내 버전에 맞는 mysql -java Connector를 다운받아 준다.
mysql 버전은 터미널에서 $mysql --version을 통해 확인이 가능하다.
Mac이기 때문에 Platform Independent를 받아준다.
그 외 버전은 오른쪽 Archives에서 다운로드가 가능하다.
zip파일로 받아준다. 본인은 mysql이 8.0.21이라 해당버전을 다운받아 줬다,.
zip을 풀어준 뒤
$cd를 통해 zip파일을 풀어준 경로로 간다. ($cd mysql-connector-java-8.0.21)
해당 경로에서 /usr/local/Cellar/hive/3.1.2_1/libexec/lib에 jar파일을 복사하는 명령어를 입력한다.
/mysql-connector-java-8.0.21 $cp mysql-connector-java-8.0.21-bin.jar /usr/local/Cellar/hive/3.1.2_1/libexec/lib
mysql에 metastore 만들어 주기
mysql을 설치한 뒤 설정은 다음과 같다.
macOS MySQL 설치 및 설정 사용법
macOS에서 MySQL 설치, 삭제, 환경변수 설정 및 사용법! Web 공부를 하다 보면 데이터베이스는 필수로 사용되는 거 같습니다. 저는 Web 개발 공부를 하고 있는데, 데이터베이스로 MySQL을 사용하려고 ��
whitepaek.tistory.com
이 분 블로그가 설명이 잘 되어있다. 이 블로그를 통해 초기설정을 마치신 뒤,
mysql에 접속한 뒤 다음과 같이 metastore를 만들어준다.
$mysql.server start
mysql >
mysql> -uroot -p
mysql > create database metastore;
mysql > use metastore;
mysql > create user 'hiveuser'@'localhost' identified by '1234';
[ identified by ' '에는 password를 입력해줘야 하는데 여기선 1234를 입력해준다]
mysql > grant all on metastore.* to 'hiveuser'@'localhost' identified by '1234';
mysql > flush privileges;모든것을 완료한 뒤 다음을 통해 권한을 확인할 수 있다.
mysql> use mysql;
mysql> show grants for 'hiveuser'@'localhost';hive-env.sh 수정
hive-env.sh.template파일을 hive-env.sh로 복사해준다.
[HIVE_HOME = /usr/local/Cellar/hive/3.1.2_1/libexec]
$cd $HIVE_HOME/conf
$cp hive-env.sh.template hive-env.sh
$open hive-env.sh48번째 줄에 HADOOP경로를 추가해주자.
export HADOOP_HOME=/usr/local/Cellar/hadoop/3.3.0/libexec
hive-site.xml 수정
hive-default.xml.template파일을 hive-site.xml로 복사해준다.
$cd $HIVE_HOME/conf
$cp hive-default.xml.template hive-site.xml
$open hive-site.xml모든 내용을 지우고 다음의 내용을 복사해서 넣어준다.
user이름을 hiveuser, 비밀번호를 1234로 아까 설정해줬기에 이런식으로 넣어준다.
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/metastore</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveuser</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>1234</value> </property> <property> <name>datanucleus.fixedDatastore</name> <value>false</value> </property> <property> <name>hive.exec.local.scratchdir</name> <value>/tmp/hive</value> <description>Local scratch space for Hive jobs</description> </property> <property> <name>hive.downloaded.resources.dir</name> <value>/tmp/hive</value> <description>Temporary local directory for added resources in the remote file system.</description> </property> <property> <name>hive.querylog.location</name> <value>/tmp/hive</value> <description>Location of Hive run time structured log file</description> </property> <property> `<name>hive.metastore.schema.verification</name>` <value>false</value> <description>Some Description</description> </property> <property> <name>hive.blobstore.optimizations.enabled</name> <value>true</value> <description> This parameter enables a number of optimizations when running on blobstores: (1) If hive.blobstore.use.blobstore.as.scratchdir is false, force the last Hive job to write to the blobstore. This is a performance optimization that forces the final FileSinkOperator to write to the blobstore. See HIVE-15121 for details. </description> </property> </configuration>
metastore 초기화 작업
hive를 실행시키기 전에 metastore를 초기화시켜야 함.
$schemaTool -dbType mysql -initSchema
hdfs 디렉토리 생성
hdfs 디렉토리를 생성하고 권한을 변경시켜 주자.
$hdfs dfs -mkdir /tmp
$hdfs dfs -mkdir /user
$hdfs dfs -mkdir /user/hive
$hdfs dfs -mkdir /user/hive/warehouse
$hdfs dfs -chmod g+x/tmp
$hdfs dfs -chmod g+x/user/hive
$hdfs dfs -chmod g+x/user/hive/warehouse이렇게 하면 완료!!
마무리
다시 터미널에서
$hive
를 키면 정상적으로 켜짐을 알 수 있는데,
만약에, mysql 버전이 높다면
다음과 같은 time-zone에러가 뜰 수 있다.
다음 오류는 이 블로그를 참고하길 바란다.
MySQL 한국시간 설정 (Time Zone)
I MySQL 한국시간 설정 (Time Zone) 1. MySQL 접속 2. Seoul 이 들어가는 시간대 선택 1 2 3 4 select b.name,a.time_zone_id from mysql.time_zone a, mysql.time_zone_name b where a.time_zone_id = ..
tlo-developer.tistory.com
다시, mysql을 켜서
mysql > use metastore;
mysql > show tables;다음과 같이 나온다면 성공!!!
'ComputerScience > DB,Cloud' 카테고리의 다른 글
[Database] 트랜잭션은 무엇인가? (0) 2020.06.13 [Cloud] IaaS, PaaS, SaaS (0) 2020.06.13 Private 클라우드, Public 클라우드 그리고 Hybrid 클라우드 (0) 2020.06.12 하둡(Hadoop)에 관하여 (0) 2020.06.12