|
윈도우에서 리눅스를 설치 후 실습한다면
방법1) oracle사의 VirtualBox https://www.virtualbox.org
VirtualBox 설치시 다음 버튼이 안보이는 경우가 있다. 이 때는 가상시스템을 새로만들기 한 후에 해당 가상시스템을 선택하고 VirtualBox 메뉴의 설정을 누르고 디스플레이 메뉴에서 '그래픽 컨트롤러'를 선택하고 우측의 VBoxVGA를 선택한다. 가상시스템 설정을 완료한 후에 가상시스템을 시작하게 되는데 설치 도중 다음 버튼이 보이지 않으면 Alt + F7 키를 눌러 화면을 움직으면 버튼을 볼 수 있다. 설치가 끄나면 '그래픽 컨트롤러'를 다시 원래 상태 즉, VMSVGA로 바꾸어 주도록 한다.
참고 : 설치 또는 실행 시 제어권이 VirtualBox에서 윈도우로 넘어 가지 않을 경우, Crl + Alt + Deltete 한 후 취소 버튼을 눌러 주면 된다.
이 것이 귀찮으면 '호스트 키 조합'을 변경하면 됩니다. https://ivps.tistory.com/729
방법2) Vmware의 Vmware player를 사용할 수 있다.
무료사용 제품 https://www.vmware.com/kr/products/workstation-player.html
참고 : vmware 설치 후 실행 시 초기화면에 아무 이메일이나 입력해 주어야 실행이 가능함
centos 다운로드 https://www.centos.org/
* 하둡(빅데이터 저장소) 싱글노드로 설치 (http://hadoop.apache.org)
^ 완전 분산 모드 : 1대의 컴퓨터로는 구축 불가
^ 독립 실행 모드
^ 가상 분산 모드 - 독립 실행 모드에 추가적인 처리
① CentOS 설치
메모리 크기 : 2048 이상
설치 옵션에서는
GNOME 데스크탑을 선택하고 아래의 옵션을 선택해 준다.
-인터넷 프로그램, 호환성 라이브러리, 개발용 도구 등
② CentOS 설치 후 최신 버전으로 업데이트
- centos7은 업데이트하면 openjdk8이 자동으로 설치된다.
" 은 python2가 기본적으로 설치되어 있다.
- centos8은 java가 설치되어 있지 않다.
" 은 python3이 기본적으로 설치되어 있다.
실제로 설치된 java의 경로를 알 수 있다.
[...@localhost ~]$ ls -al /etc/alternatives/java
... -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64/jre/bin/java
java jdk, jre를 설치하려면 root 계정에서
# yum -y install java-1.8.0-openjdk-devel
하면 된다.
# rpm -qa | grep java * 설치된 jdk 패키지 정보 읽기
# yum remove java-1.8.0-openjdk java 제거
참고 : 방화벽 (Firewall)
- 인터넷에서 각 도메인의 내부 네트워크를 외부 해킹, 바이러스로부터 보호.
- 일반적인 방화벽 시스템은 보안 유지를 위한 시스템과 인터넷 사이에 설치되는 프록시 서버로서,
사전에 등록된 IP 주소만 접근이 가능하도록 관리.
- 방화벽에서 사용하지 않는 서비스의 포트들을 모두 닫아 외부 경로를 최대한 차단.
# 하둡 설정을 위한 특정 port 방화벽 해제 ~~~~~~~~~~~~~~~~~~~~~~~
[root@localhost ~]# cd /usr/lib/firewalld/services/
[root@localhost services]# cp http.xml hadoop.xml
[root@localhost services]# vi hadoop.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Hadoop</short>
<description></description>
<port protocol="tcp" port="8042"/>
<port protocol="tcp" port="9864"/>
<port protocol="tcp" port="9870"/>
<port protocol="tcp" port="8088"/>
<port protocol="tcp" port="19888"/>
</service>
[root@localhost services]# firewall-cmd --permanent --zone=public --add-service=hadoop
[root@localhost services]# firewall-cmd --reload
* HDFS 상태 확인은 50070 포트이었으나 hadoop3.x에서는 9870 으로 변경됨
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
시스템 전체에 대한 방화벽 해제
[root@localhost ~]# systemctl status firewalld.service
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl mask firewalld
참고 : 방화벽 재설정하기
[root@localhost ~]# systemctl unmask firewalld
[root@localhost ~]# systemctl start firewalld
싱글노드 설치 시작
[...@localhost ~]$ wget http://apache.mirror.cdnetworks.com/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
[...@localhost ~]$ tar xvzf hadoop-3.2.1.tar.gz
[...@localhost ~]$ vi .bash_profile
-----------------------------------------------------------------------------
# User specific environment and startup programs
export JAVA_HOME=/usr/java/jdk1.8.0.161
또는
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
export HADOOP_HOME=/home/사용자명/hadoop-3.2.1
또는
export HADOOP_HOME=$HOME/hadoop-3.2.1
PATH=$PATH:$HOME/.local/bin:$HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin #추가
export PATH
-----------------------------------------------------------------------------
[...@localhost ~]$ source .bash_profile : .bash_profile을 수정된 내용으로 등록
[...@localhost ~]$ cd hadoop-3.2.1/etc/hadoop/ : 디렉토리 이동
아래의 실행과 관련된 파일은 /home/hadoop/hadoop-3.2.1/etc/hadoop 디렉토리에 저장되어 있다.
[...@localhost hadoop]$ vi hadoop-env.sh : MR framework 주요 설정 파일
export JAVA_HOME=/usr/java/jdk1.8.0_65 <--- 파일 상단에 추가한다.
또는
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
설명 : hadoop-env.sh : JobTracker(NameNode)나 TaskTracker(dataNode)의 자바 옵션이나, 로그, 프로세스 ID용 디렉토리 설정을 기술한다. 그러니까 hadoop-env.sh 는 자바 경로나 JobTracker나 TaskTracker에서 사용하는 JVM의 heap 메모리 크기, 가비지 컬렉션 옵션 등 자바 관련 설정을 한다. 그리고 로그 디렉토리, 프로세스 ID용 디렉토리 설정을 기술한다. 하둡을 실행하는 셸 스크립트 파일에서 필요한 변수를 설정한다. $HADOOP_HOME/bin 디렉토리에 있는 쉘 스크립트 파일들이 hadoop-env.sh 파일을 사용한다.
하둡 실행 시, 경고 메시지가 계속 뜰 수 있다. “Warning: $HADOOP_HOME is deprecated”
이런 경우 hadoop-env.sh에 export HADOOP_HOME_WARN_SUPPRESS=1 을 추가 해 준다.
[...@localhost hadoop]$ vi core-site.xml : 하둡 공통 설정을 기술
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name> <value>/home/사용자명/hadoop-3.2.1/tmp/</value> </property>
</configuration>
설명 : fs.default.name 속성을 hdfs://localhost:9000 로 설정하게 되면 URI에 hdfs 스키마를 사용함으로 해서 로컬 파일 시스템이 아닌 hdfs를 사용한다는 뜻이다. 또한 NameNode가 9000번 포트를 통해 요청을 접수한다는 것을 의미하기도 한다. HDFS와 맵리듀스에서 공통적으로 사용할 환경정보를 설정한다. Hadoop-core jar파일에 포함되어 있는 core-default.xml 파일을 오버라이드 한 파일이다. core-site.xml에 없는 설정 값은 core-default.xml에 있는 기본 값을 사용한다.
[...@localhost hadoop]$ vi hdfs-site.xml : HDFS 동작에 관한 설정
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
설명 : dfs.replication - 유사 분산 모드에서는 파일 시스템으로 로컬 파일 시스템이 아닌 HDFS를 사용한다. 또한 이 모드에서는 DataNode가 하나만 동작하기 때문에 초기 복제 수인 3을 사용하면 HDFS가 동작하지 않는다. 그러므로 replication 수를 1로 설정해 준다.
[...@localhost hadoop]$ vi yarn-env.sh : yarn 설정 파일
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el7_5.x86_64
[...@localhost hadoop]$ vi mapred-site.xml : yarn 설정 파일
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.admin.user.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME</value>
</property>
<property>
<name>yarn.app.mapreduce.am.env</name>
<value>HADOOP_MAPRED_HOME=$HADOOP_COMMON_HOME</value>
</property>
</configuration>
설명 : mapred-site.xml은 JobTracker나 TaskTracker에서 사용하는 설정을 기술한다. MR의 동작을 설정하는 것이다.
[...@localhost hadoop]$ vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
[...@localhost ~]$ cd
처음 HDFS를 사용할 때는 HDFS를 포맷할 필요가 있다.
[...@localhost ~]$ hdfs namenode -format
[...@localhost ~]$ hadoop version : 하둡 버전 확인
=설치 완료 후 ssh 설정==================================
ssh : 원격지 시스템에 접근하여 암호화된 메시지를 전송할 수 있는 프로그램
[...@localhost ~]$ ssh-keygen -t rsa # ssh 키 생성
[...p@localhost ~]$ cd .ssh
[...@localhost .ssh]$ scp id_rsa.pub /home/사용자명/.ssh/authorized_keys # 생성키를 접속할 때 사용하도록 복사함
[...@localhost .ssh]$ ssh 사용자명@localhost
위의 명령을 입력하면 암호 묻는 작업을 하지 않게 된다. 1회만 실행하면 된다.
아래의 실행과 관련된 파일은 /home/사용자명/hadoop-3.2.1/sbin 디렉토리에 있다.
실행방법 )
모두 실행 [...@localhost ~]$ start-all.sh #deprecated
각각 실행 [...@localhost ~]$ start-dfs.sh
각각 실행 [...@localhost ~]$ start-yarn.sh
선택적 [...@localhost ~]$ mr-jobhistory-daemon.sh start historyserver
하둡 종료
모두 실행 [...@localhost ~]$ stop-all.sh #deprecated
각각 실행 [...@localhost ~]$ stop-dfs.sh
각각 실행 [...@localhost ~]$ stop-yarn.sh
[...@localhost ~]$ jps : 하둡 실행 상태 확인 - NameNode와 DataNode의 동작여부 확인
* Summary(HDFS 상태 확인) : http://localhost:9870/
* All Applications : http://localhost:8088/
--- 워드 카운트 예제 실행 ----------------------------------
[...@nameserver1 ~]$ cd hadoop-3.2.1
[...@localhost hadoop-3.2.1]$ hdfs dfs -mkdir /test
[...@localhost hadoop-3.2.1]$ hdfs dfs -copyFromLocal ./README.txt /test
[...@localhost hadoop-3.2.1]$ hdfs dfs -cat /test/README.txt
[...@localhost hadoop-3.2.1]$ hadoop jar /home/사용자명/hadoop-3.2.1/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar wordcount /test/README.txt /output
[...@localhost hadoop-3.2.1]$ hdfs dfs -ls /output
[...@localhost hadoop-3.2.1]$ hdfs dfs -cat /output/part-r-00000
참고 - 내부 네트워크에서...