
하둡에 저장된 데이터를 쉽게 처리할 수 있는 데이터웨어하우스 패키지
SQL과 유사한 Query Language를 지원
SQL레벨의 ETL 처리도구로 활용 가능

헷갈리면 안되는 부분
클라이언트는 hive 메타스토어에 저장된 메타데이터를 통해 hive에서 형성한 실제 데이터를 '참조'할 수 있으나 '수정 및 변경'은 불가능하다.
hive에서 생성된 데이터(테이블 정보)를 수정하기 위해서는 다양한 방법이 있지만 Apache sqoop을 사용한다면, hive에서 생성된 데이터는 hive가 HDFS위에 존재하기에 HDFS에 저장이 되고 Sqoop export를 통해 '실제 데이터'를 HDFS로 부터 RDMS로 가져올 수 있다.
HADOOP : 하둡 3.3 버전으로 설치
JAVA : 1.8. 버전으로 설치해야만 hive와 충돌이 발생하지 않는다
HIVE : 3.1.3로 설치
wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz 으로 리눅스에 하이브를 설치한다
링크 : https://dlcdn.apache.org/hive/hive-3.1.3/
tar xzvf -파일이름.tar.gz
unzip 파일이름.zip
gunzip 파일이름.gzip
> mv conf/hive-env.sh.template conf/hive-env.sh
gedit conf/hive-env.sh
(추가 내용)
HADOOP_HOME=~/hadoop-3.3.6
hive-site.xml 파일은 Hive의 기본 설정을 변경하고 사용자 정의 설정을 추가하는 데 사용됩니다. 예를 들어, Hadoop 클러스터의 네임노드 및 데이터노드의 호스트 이름, JDBC 연결 정보, 저장소 위치 및 설정 등을 구성
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
</configuration>
hadoop을 켜줄때 hadoop-3.3.6경로로가서 sbin/start-all.sh를 해도 되지만 다른 경로에 지금 있다면 $HADOOP_HOME/sbin/start-all.sh 해도 된다. 이를 더 간편히 하기위해 경로 설정을 진행하자.
cd hadoop-3.3.6
sbin/start-all.sh

# guava 라이브러리 삭제 및 복사 실행
cp ~/hadoop-3.3.6/share/hadoop/hdfs/lib/guava-27.0-jre.jar ~/apache-hive-3.1.3/lib/
# 하이브 홈 디렉토리
~/apache-hive-3.1.3/bin/schematool -initSchema -dbType derby
hive 환경 변수 추가
#hive 추가
export HIVE_HOME=/root/apache-hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin
수정된 bashrc 재실행
/usr/bin/which: no hbase in (/root/hadoop-3.3.6/bin:/root/jdk-11.0.22/bin:/root/hadoop-3.3.6/bin:/root/jdk-11.0.22/bin:/root/hadoop-3.3.6/bin:/root/jdk-11.0.22/bin:/root/.local/bin:/root/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/apache-hive-3.1.3/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/root/apache-hive-3.1.3/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/root/hadoop-3.3.6/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Hive Session ID = 62ea331f-fe6f-4b47-873d-2162a5285151
Exception in thread "main" java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader 'bootstrap')
at org.apache.hadoop.hive.ql.session.SessionState.<init>(SessionState.java:413)

# root(/)부터 파일명에 해당하는 파일 경로 전부 찾기
find / -name 파일명




파일을 살펴보면 파일의 인코딩이 잘못된 것을 알 수 있다. 해당 파일의 인코딩 방식을 UTF-8로 바꿔주어야 한다.
iconv -f [현재 인코딩] -t UTF-8 input.csv -o /path/to/output.csv

iconv -f cp949 -t utf-8 apartment.csv -o apartment_new_1.csv
hadoop fs -mkdir -r /user/root/hadoop_edu/apartment
hadoop fs -put ~/다운로드/apartment.csv /user/root/hadoop_edu/apartment
sbin/start-all.sh
cd ~/apache-hive
create database if not exists hadoop_edu;


https://spidyweb.tistory.com/235 (설명이 상당히 잘 되어 있음)

예를들어, hadoop-3.3.6을 설치하였고 hadoop에 대한 명령어를 사용하기 위해서는 hadoop-3.3.6/bin/에 존재하는 hadoop을 통해 명령어를 사용해야한다. 즉, hadoop 명령어를 사용하기위해 항상 hadoop-3.3.6/bin/을 사용해야한다. 이를 PATH에 경로를 설정해준다면 hadoop-3.3.6/bin/ 경로로 이동없이 hadoop명령어를 사용할 수 있다.
command1 | command2
[출처 : 출처]
실습>





scp [윈도우파일 경로][리눅스유저명]@[호스트명 or IP][파일을 넣을 리눅스 경로]
