impala를 빌드 한 뒤, 시스템에 적용하기 위해 빈 서버를 준비했다.
( CentOS 7.7 , 최소설치 )

444-11

먼저 임팔라가 작동하려면

  1. statestored
  2. catalogd
  3. impalad
    이렇게 3가지가 필요하다.

그리고 impala-shell은 기본세팅으로 kudu-master를 보고있으므로
kudu-master와, kudu-tserver가 필요하다.

catalogd는 hive 서비스를 필요로 하고,
hive는 hadoop에 job을 날리는 구조기 때문에 hadoop namenode와
hadoop datanode가 필요하다.

또한, hive matastore는 임팔라 설치시 기본적으로 postgresql을 사용하기때문에
이것도 같이 필요하다. ( 옮기는 법은 나중에... )

또 여기서 까보면 hive-site.xml에 sentry 설정이 있어서, 이게 없으면 테이블 생성이 무지 느리다. ( 접속 시도 때문 )

이 외에 깔린것들은 아직 왜 깔렸는지 파악이 안됬는데, 나중에 용도파악이 되면 수정을 하고
우선 위에 언급한것만 구축을 한다.

1. 사용자 생성

  • 나는 gold 라는 계정을 쓰느것을 좋아해서 gold로 만들었다.
  • 하고싶은걸로 하시라.
    555-1

2. kudu 이전

kudu를 이전해보자.
kudu는 tserver의 데이터 노드와, master라고 불리는 메인 노드가 있다.
사실 이런 용어 자체가 이쪽 업계에서는 워낙 다양하게 불려지기 때문에, 그냥 tserver, master로 알아두는것이 좋다.

아, kudu는 ntp 시간이 안맞으면 동작을 안하므로, ntp를 미리 설치하자.
yum install ntp
그리고 자동실행 잊지 말고하자. 미루다가 어디서 버그났지 찾게된다.
systemctl enable ntpd

오픈소스는 ~/bigdata에 저장할 예정이고, 데이터는 ~/data에 저장하려한다.

66

이제 kudu 실행파일과 웹 디렉토리를 가져오자.
내 기준으로 , 대상은

  1. apache-kudu-1.12.0/build/release/bin/kudu
  2. apache-kudu-1.12.0/build/release/bin/kudu-master
  3. apache-kudu-1.12.0/build/release/bin/kudu-tserver
  4. apache-kudu-1.12.0/www
    이다.

6666

환경변수도 만들어주자.
export KUDU_HOME=$HOME/bigdata/kudu
export KUDU_DATA=$HOME/datas/kudu

마스터 부터 시작해주고..
./kudu-master --fs_data_dirs=~/datas/kudu/master --fs_wal_dir=~/datas/kudu/meta

tserver도 실행해주자
$KUDU_HOME/kudu-tserver --tserver_master_addrs=127.0.0.1:7051 --fs_wal_dir=$KUDU_DATA/tserver1 > $HOME/logs/kudu/tserver1.log 2>&1 &

브라우저를 열어서 http://ip:8051 을 입력하면 아래와 같이 아름다운 페이지가!
7777

이제 kudu 명령어를 사용하기 위해 PATH등록을 해주자
그러고 나서, kudu master status localhost 로 상태를 확인하려하면
에러가 나지만...

8888

yum install gcc python-devel
yum install cyrus-sasl*

을 수행후 다시 해보면 상태들이 잘 뜨고
9991

아까 브라우저에서 tablet server를 클릭하면 한개가 잘 등록된것을 볼 수 있다.
9992

3. hadoop , hive 이전

하둡은 java로 되어있으니까 java부터 설치하자
yum install java-1.8.0-openjdk

정신 건강을 위해 devel도 같이 설치하자
yum install java-1.8.0-openjdk-devel

그 다음은 java_home을 만들어주고

export JAVA=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/bin/java
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64

그다음은 하둡 설정을 옮겨주자.
그런데, 아까 임팔라를 빌드할때 임팔라 안에 하둡이 설치되어, 각종 설정파일이 imapla_home 아래에 있으므로, 최대한 그 구조를 유지해본다.

하둡은 여기서 옮겨오면 된다.
apache-impala-3.4.0/toolchain/cdh_components-1814051/hadoop-3.0.0-cdh6.x-SNAPSHOT

하이브는 여기서 옮겨오면 된다.
apache-impala-3.4.0/toolchain/cdh_components-1814051/hive-2.1.1-cdh6.x-SNAPSHOT

하둡이든 하이브든 아래 경로에 설정파일이 있다. 나는 이것을 impala/config로 옮겼다.
apache-impala-3.4.0/fe/src/test/resources

4. hadoop 구성

이제 나머지의 환경변수를 잡아주고...
export IMPALA_HOME=$HOME/bigdata/impala

export HADOOP_HOME=$HOME/bigdata/hadoop/
export HADOOP_INCLUDE_DIR=$HADOOP_HOME/include
export HADOOP_LIB_DIR=$HADOOP_HOME/lib
export DEFAULT_FS=hdfs://localhost:20500
export TARGET_FILESYSTEM=hdfs
export HADOOP_CONF_DIR=$IMPALA_HOME/config

hdfs-site를 편집해준다.
vi impala/config/hdfs-site.xml

데이터노드와 네임도드의 파일 저장 경로를 적절히 바꿔주고
9994

요기에 쌓일수 있도록 디렉토리도 만들어준다.
9995

하둡은 hdfs namenode , datanode로 실행하는데, hdfs 명령어를 PATH 지정해주자
PATH=$PATH:$KUDU_HOME:$HADOOP_HOME
export PATH

hdfs namenode 로 실행하면 java.io.IOException: NameNode is not formatted
에러가 떨어지니까
hdfs namenode -format
hdfs namenode
하면 잘 실행되고,

datanode의 경우는
내 경우 /home/gold/datas/hadoop/socket/ 요기에 socket 폴더를 만들어주고

데이터노드 보안정책때문에, 그룹의 쓰기 권한을 빼자
chmod 700 /home/gold/datas/hadoop
chmod 700 /home/gold/datas/hadoop/socket

hdfs datanode 2>&1 &

브라우저를 열어, http://ip:5070을 입력하면 네임노드 페이지가 열리는 것을 볼수있고,
데이터노드가 하나 연결되어있는것을 볼 수 있다.
9996

5. hive 구성

cdh 6.x에서 하이브의 메타스토어는 postgre를 기본적으로 사용한다.
( 설치하자는 뜻임... )
yum install postgresql-server

초기화도 해주고
service postgresql initdb

시작도 해준다
service postgresql start

자동실행 잊지 말고
systemctl enable postgresql

vim /var/lib/pgsql/data/pg_hba.conf 파일을 열어서
로컬쪽 METHOD를 trust로 바꾼다.
더 유연한 방법이 있긴 하겠지만, 어차피 임팔라 설치할때도 md5로 권한을 낮춘다.

하이브쪽 환경변수 등록을 해주고
export IMPALA_HIVE_VERSION=2.1.1-cdh6.x-SNAPSHOT

export HIVE_AUX_JARS_PATH=$IMPALA_HOME/lib/dependency/postgresql-42.2.5.jar
export POSTGRES_JDBC_DRIVER=$IMPALA_HOME/lib/dependency/postgresql-42.2.5.jar

export HIVE_HOME=$HOME/bigdata/hive
exprot HIVE_METASTORE_THRIFT_DIR=$HIVE_HOME/bin
export HIVE_CONF_DIR=$IMPALA_HOME/config
export HIVE_SRC_DIR=$HIVE_HOME/src

메타스토어를 구성하자...(.........)
sudo –u postgres psql
CREATE USER hiveuser WITH PASSWORD 'hiveuser';
CREATE DATABASE metastore;

그다음 postgres를 재시작하고
hive 밑에서
./schematool -dbType postgres -initSchema 로 hiveuser의 권한을 세팅한다.

조심스레 하이브 메타스토어를 실행보면
./hive --service metastore -p 9083

뭐 이런 에러가 떨어진다
MetaException(message:Failed to instantiate listener named: org.apache.sentry.binding.metastore.SentrySyncHMSNotificationsPostEventListener, reason: java.lang.ClassNotFoundException: org.apache.sentry.binding.metastore.SentrySyncHMSNotificationsPostEventListener

9997

얘도 java를 쓰고 하는데... 저 mata-sentry 관련 라이브러리들을 못찾아서 나오는 에러라,
환경변수를 잡아주어야한다.

export HADOOP_CLASSPATH=$IMPALA_HOME/lib/hadoop/hadoop-lzo-0.4.15.jar:$HOME/bigdata/hadoop/share/hadoop/tools/lib/*:$IMPALA_HOME/lib/hive/*:$IMPALA_HOME/lib/dependency/*
![9998](http://ignis.kr/content/images/2020/09/9998.PNG)

export HIVE_SERVER2_THRIFT_PORT=11050
export HIVE_METASTORE_HADOOP_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=30010"

다시 조심스레 하이브 메타스토어를 실행보면 잘된다.
./hive --service metastore -p 9083

9998-2

6. impala 구성

이제, 임팔라다.

그냥 실행해보면 이런 에러가 뜨는데,
./impalad: error while loading shared libraries: libjvm.so: cannot open shared object file: No such file or directory

ldd 로 봐도 못찾는것을 확인할수있다.
9999-1

그러니까...
LD_LIBRARY_PATH를 조정해야한다는 뜻.

export LD_PRELOAD=:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/lib/amd64/libjsig.so
export LD_LIBRARY_PATH=:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/lib/amd64:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/lib/amd64/server/:$IMPALA_HOME/lib/kudu/lib/exported:$IMPALA_HOME/lib/gcc

statestored 부터 실행해보자.
./statestored -logbufsecs=5 -v=1 -max_log_files=10 -log_filename=statestored -log_dir=$HOME/logs/cluster 1>/$HOME/logs/cluster/statestore-out.log 2>&1 &

요기까지는 잘 되는데,

그 다음은 catalogd
뜻처럼 되지 않는다. classpath를 지정해주자
여기에 변수가 하나 있는데, 임팔라가 빌드된곳에 build-classpath.txt 라는 파일이 있다.
이 안에 maven으로 받아온 라이브러들이 있는데, 이중에서 뭘 참고하는지 모르겠지만
( 에러날때마다 코어덤프를 분석해보면 알 수도 .. ), 여튼 이거를 다 옮겨주고 다 classpath에 반영해주어야 한다.

export CLASSPATH=/home/gold/bigdata/impala/lib/hadoop/hadoop-lzo-0.4.15.jar:/home/gold/apache-impala-3.4.0/fe/src/test/resources:/home/gold/bigdata/impala/lib/classes://home/gold/bigdata/impala/lib/dependency:

export CLASSPATH=$(cat ./build-classpath.txt):"$CLASSPATH":/home/gold/bigdata/impala/config

export CLASSPATH="$CLASSPATH":/home/gold/bigdata/impala/config

그다음에
catalog 실행
export JAVA_TOOL_OPTIONS='-agentlib:jdwp=transport=dt_socket,address=30030,server=y,suspend=n ';
./catalogd -logbufsecs=5 -v=1 -max_log_files=10 -log_filename=catalogd -kudu_master_hosts localhost

마지막으로 impalad 실행
export JAVA_TOOL_OPTIONS='-agentlib:jdwp=transport=dt_socket,address=30000,server=y,suspend=n '
./impalad -disconnected_session_timeout 3600 -kudu_client_rpc_timeout_ms 0 -kudu_master_hosts localhost -mem_limit=3789610734 -logbufsecs=5 -v=1 -max_log_files=10 -log_filename=impalad -beeswax_port=21000 -hs2_port=21050 -hs2_http_port=28000 -be_port=22000 -krpc_port=27000 -state_store_subscriber_port=23000 -webserver_port=25000

그리고!
임팔라 빌드 디렉토리에 가보면 impala-shell-3.4.0-RELEASE 디렉토리에
impala-shell 이 있다.

./impala-shell로 똻 실행하면

9999_1-1

[localhost.localdomain:21000] default 가 나오면 잘 나온것.

테이블도 생성해보고
CREATE TABLE lol ( uname STRING, age INTEGER, PRIMARY KEY(uname) ) STORED AS KUDU TBLPROPERTIES ( 'kudu.master_addresses' = '127.0.0.1', 'kudu.num_tablet_replicas' = '1' );

9999_2

8051 웹에 들어가서, kudu가 잘 인식했는지 본다!
9999_3

끝 ㅎㅎ

9999_4