하둡은 대용량 데이터를 분산 처리할 수 있는 자바기반의 오픈 소스 프레임워크입니다.
구글에 쌓여있는 수많은 빅데이터(웹페이지, 로그 데이터들을 오라클)에 입력하고 데이터를 저장하고 처리하려고 시도를 했으나 데이터가 너무 많아서 실패를 하고 자체적으로 빅데이터를 저장할 기술을 개발하고 대외적으로 논문을 발표 했다.
구글의 논문을 야후에 있는 더그커팅이 읽고 자바로 구현했다.
RDBMS(오라클) ---------------------------- 하둡
실시간 데이터처리 배치처리, 분산처리
centos 설치



/etc/hosts
192.168.56.101 centos
systemctl status firewalld

systemctl stop firewalld
systemctl disable firewalld
java -version

디렉터리 생성
mkdir -p /usr/java
다운받은 jdk파일 이동
cp /media/sf_hadoop/jdk-8u131-linux-x64\ (1).tar.gz /usr/java/
압축풀기
tar xvfz jdk-8u131-linux-x64\ (1).tar.gz
압축파일 확인
cd jdk1.8.0_131/

vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin
export CLASS_PATH="."
source /etc/profile
java 디렉터리 위치 확인
which java

기본 jdk을 설치한 jdk로 등록
update-alternatives --install "/usr/bin/java" "java" "/usr/java/jdk1.8.0_131/bin/java" 1
update-alternatives --config java

변경작업 확인
java -version

groupadd hadoop
tail /etc/group

useradd -g hadoop -G vboxsf hadoop
tail /etc/passwd

passwd hadoop (hadoop으로 설정)
su - hadoop
tar xvzf hadoop-3.2.4.tar.gz
vi .bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_131
export HADOOP_HOME=/home/hadoop/hadoop-3.2.4
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source .bashrc
hadoop version

설치하기 전 혹시 이미 있을 수도 있으니 삭제 작업
rm -rf .ssh
설정 작업할때 계속 enter로 넘어가기
ssh-keygen

공개키 안에 패스워드 등록
ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@192.168.56.101

설정이 잘 되었는지 확인
ssh hadoop@192.168.56.101

해당 위치로 이동
cd $HADOOP_HOME/etc/hadoop
환경변수 추가
vi hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131
export HADOOP_HOME=/home/hadoop/hadoop-3.2.4
네임노드 실행 서버
vi masters
192.168.56.101
데이터노드 실행 서버
vi workers
기존에 작성되어있는거 삭제 후 ip 주소 입력
192.168.56.101
하둡 파일시스템, 맵리듀스 공통적으로 사용할 환경정보 설정
vi core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos:9010</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-3.2.4/tmp</value>
</property>
</configuration>
vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/data/dfs/namenode</value>
</property>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>/home/hadoop/data/dfs/namesecondary</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data/dfs/datanode</value>
</property>
<property>
<name>dfs.http.address</name>
<value>centos:50070</value>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>centos:50090</value>
</property>
</configuration>
vi mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.map.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
<property>
<name>mapreduce.reduce.env</name>
<value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>
</configuration>
vi yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce_suffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.nodemanager.local-dirs</name>
<value>/home/hadoop/data/yarn/nm-local-dir</value>
</property>
<property>
<name>yarn.resourcemanager.fs.state-store.uri</name>
<value>/home/hadoop/data/yarn/system/rmstore</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>centos</value>
</property>
<property>
<name>yarn.web-proxy.address</name>
<value>0.0.0.0:8089</value>
</property>yes
</configuration>
start-all.sh

jps

hdfs dfs -ls /
hdfs dfs -mkdir /user
hdfs dfs -ls /

hdfs dfs -ls /user

hdfs dfs -cat /user/obama.txt
맵리듀스 디렉터리로 이동
cd $HADOOP_HOME/share/hadoop/mapreduce

java 프로그램으로 실행
yarn jar hadoop-mapreduce-examples-3.2.4.jar wordcount /user/obama.txt output
wordcount를 작업하기 위해 temp 공간이 생성되었다.
hdfs dfs -ls /

새로운 디렉터리가 생성되어있다.
hdfs dfs -ls /user

wordcount 작업 내용이 담겨있다.
hdfs dfs -ls output


cp /media/sf_hadoop/apache-hive-3.1.3-bin.tar.gz .
tar xvzf apache-hive-3.1.3-bin.tar.gz
vi .bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_131
export HADOOP_HOME=/home/hadoop/hadoop-3.2.4
export HADOOP_CONFIG_HOME=$HADOOP_HOME/etc/hadoop
export HIVE_HOME=/home/hadoop/apache-hive-3.1.3-bin
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
source .bashrc
cd $HIVE_HOME/conf
vi 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.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
</configuration>
vi $HIVE_HOME/bin/hive-config.sh
export HADOOP_HOME=/home/hadoop/hadoop-3.2.4
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/guava-27.0-jre.jar
mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.jar.bak
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod g+w /user/hive/warehouse
schematool -dbType derby -initSchema

hive

ls /media/sf_hadoop/emp.csv

hdfs dfs -put /media/sf_hadoop/emp.csv /user
hdfs dfs -put /media/sf_hadoop/dept.csv /user
create table emp
(empno int,
ename string,
hiredate string,
sal int,
deptno int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE ;

show tables;

desc emp;

로컬파일 -> hive 전송
hive>load data local inpath '/home/hadoop/emp.csv' into table emp;
하둡 -> hive 전송
hive>load data inpath 'hdfs://centos:9010/user/emp.csv' into table emp;
drop table emp;

hdfs dfs -mkdir /user/hive/warehouse/emp
hdfs dfs -put /media/sf_hadoop/emp.csv /user/hive/warehouse/emp/
hdfs dfs -ls -R /user/hive/warehouse/emp
create external table if not exists emp
(empno int,
ename string,
hiredate string,
sal int,
deptno int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/emp';
select * from emp where sal >= 10000;

select * from emp where ename like 'K%';

dual을 사용할 필요가 없다.
select 7/2, 7%2;

nvl 함수도 지원
select empno, nvl(deptno,0) from emp where deptno is null;
