2014-11-25 [Linux] Hadoop 설치 가이드 1
<시작하세요 하둡 프로그래밍> 기초에서 실무까지 하둡의 모든 것 - 정재화 지음
사용자 추가/삭제
$ sudo adduser hadoop2
(useradd 아님)
사용자 계정 삭제
#userdel 계정명 // 사용자 계정 디렉토리와 파일은 삭제하지 않고 계정만 삭제
#userdel -r 계정명 // 사용자 디렉토리까지 함께 삭제
삭제명령
rm 의
-r은 해당 폴더안에 있는 모든 파일들까지 같이 삭제하고 자기자신 즉 폴더까지 삭제하는 옵션입니다.
-i는 각 파일들이나 폴더를 삭제할때 삭제할것인가를 묻도록 하는 옵션입니다.
-f는 파일이 있든없든 오류를 표출하지 않고 무조건 삭제한다는 옵션입니다.
|
rmdir 는 폴더만 삭제
rm -rf dir3 는 하위 파일/폴더도 삭제
사용자 계정 생성여부 확인법.
로그인
파일 디렉토리 조회
리눅스와 유닉스의 차이점
리눅스 |
유닉스 |
|
신뢰도 |
서버들이 수 년간 중단 없이 운행되곤 하지만, 일반적인 사용자에게 있어 리눅스는 매우 믿음직한 운영체제이다. |
포털이나 대기업 사이트 같은 주요한 서버에 사용된다. 그만큼 유닉스는 신뢰도 문제에서 큰 점수를 받는 운영체제이다. |
성능 |
과중한 네트워크 부하를 처리하여야 할 경우에는 최적화된 성능을 발휘하지는 못하지만, 서버 운영체제로서 적합하다. |
서버 운영용 운영체제이다. ID와 비밀번호 관리 등의 기능과 암호화 능력 월등히 좋다.안정성과 메모리 관리 능력도 뛰어나다. |
기술
지원
|
많은 기관들이 리눅스를 전문적으로 지원한다. 모든 주요 리눅스 업체들은 다양한 방법으로 고객을 지원 하며, 몇몇 업체는 중단없이 365일 서비스를 제공한다. 최후의 수단으로 소스를 수정하여 직접 문제를 해결할 수 있다. |
하드웨어와 OS 자체가 통합적으로 개발되서 나오므로 IBM사에서 일괄 관리한다. 회사 브랜드가 걸려있어 리눅스에 비해서는 지원이 좋은 편이다. |
구축
비용
|
몇몇 업체들은 상용 배포판을 매우 저렴한 가격에 제공한다. 어플리케이션과 문서들 또한 무상 혹은 저렴하게 구할 수 있다. 리눅스는 사용 제한이 없기 때문에, 구축하고자 하는 모든 시스템에 추가 비용없이 설치할 수 있다. 리눅스 시스템을 위한 총 구축비용은 매우 저렴하다고 할 수 있다 |
굉장히 비싸다. 유닉스는 장비 자체도 따로 나오는 경우가 태반이고, PC용 유닉스도 있지만 보통은 장비가 하나 개발되고 거기에 최적화된 유닉스를 개발해서 상품으로 나오는 경우가 많다. 따라서 장비 값만 해도 몇 억 씩 하는 경우가 대부분. 그러나 대기업에서는 큰 비용을 들여서라도 보안 등의 문제로 유닉스를 사용한다. |
하드웨어
지원
|
리눅스는 다양한 하드웨어, 플랫폼들을 지원한다. |
많은 상용 유닉스가 있지만, 리눅스에는 못 미친다. |
root 권한 얻기 |
sudo -s |
$가 #으로 바뀌면 관리자 권한을 획득한 것이 된다.
디렉토리 조회 |
ls -al
ll
|
재부팅 |
sudo restart 혹은
sudo init 6 혹은
sudo shutdown -r
|
하둡설치
하둡 다운로드 사이트
하둡 다운로드 명령어 |
|
압축풀기 명령어 |
tar xvfz hadoop-1.0.3.tar.gz |
심볼릭 링크 생성 |
ln -s hadoop-1.0.3 hadoop
ls -l
|
현재 내가 받은 파일
vi 편집기 명령어
i 는 insert 모드 -> esc 는 종료하기 -> shift+q -> wq
인코딩 방식 변경(한글처리)
한글 폰트 생성
(없을시)
|
root@clus15:~# sudo locale-gen ko_KR.UTF-8
root@clus15:~# sudo locale-gen ko_KR
|
인코딩 설정 파일 변경 |
root 계정 로그인
root@clus15:~# vi /etc/default/locale
(혹은 vi /etc/sysconfig/i18n)
|
설정 내용 |
LANG="ko_KR.UTF-8"
SUPPORTED="en_US.UTF-8:en_US:ko_KR.eucKR:ko_KR:ko"
SYSFONT="lat0-sun16"
SYSFONTACM="8859-15"
|
설정 내용 적용 |
root@clus15:~# source /etc/default/locale
echo $LANG
|
에러발생시 |
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
복원
|
JDK설치
호스트파일 수정 |
sudo vi /etc/hosts 로컬 호스트 관련 내용은 전부 주석(#)처리 하고 저장
source /etc/hosts
|
JDK다운 |
sudo apt-get install openjdk-6-jdk
가능하면 오라클에서 자바 받아서 사용할 것. (위에 것 말고) jdk-6u33-linux-x64.bin
|
FTP업로드 후,
파일 이동
|
hadoop2@clus11:~$ sudo cp jdk-6u33-linux-x64.bin /usr/local |
하위폴더까지 권한변경 |
sudo chmod -Rf 777 hadoop2
hadoop2@clus11:/usr/local$ sudo chmod -Rf 755 jdk-6u33-linux-x64.bin
|
JDK 설치 |
root@clus15:/usr/local# ./jdk-6u33-linux-x64.bin |
환경변수지정 |
-- 수정 호출 root@clus11:/# sudo vi /etc/profile
-- 수정내용 ---
# 2014-11-26 JDK Enviroment Variables Enroll Section created by YUNHO MAENG
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
export CLASS_PATH="."
---수정내용 재부팅 없이 반영---cd
source /etc/profile
---지정 확인---
java -version
|
자바 심볼릭 링크 |
cd /usr/local/
ln -s jdk1.6.0_33 java
|
SSH 인증
0. SSH 설치가 되어 있지 않을 경우 설치진행
▼ Redhet 또는 CentOS Linux의 경우
# yum -y install openssh-server openssh-clients
▼ Ubuntu Linix의 경우
# sudo apt-get install openssh-server openssh-clients
1. SSH 사용 포트 확인
netstat -anp | grep sshd
위 그림처림 기본포트인 22번 포트 사용 확인
2. SSH 설정 포트 설정 변경
cat /etc/ssh/sshd_config | grep -n 22
위 그림을 참고하면 /etc/ssh/sshd_config 파일의 13번째 라인의 #Port 22 값을 주석 해제 후 원하는 포트로 변경하도록 하자
vi /etc/ssh/sshd_config
변경 전 : #Port 22 -----> 변경 후 Port 2222
3. SSH 변결된 설정 적용
▼ Redhet 또는 CentOS Linux의 경우
# service sshd restart 또는 # /etc/rc.d/init.d/sshd restart
▼ Ubuntu Linix의 경우
#sudo service ssh restart
4. SSH 변경된 포트 확인
아래의 명령어를 통해 기존 22번 포트에서 사용자가 수정한 포트(본문에서는 22222번으로 변경)로 변경되었는지 확인한다.
netstat -anp | grep sshd
5. Iptable 편집(IPtable을 사용하는 경우 옵션)
#vi /etc/sysconfig/iptables
아래 내용 추가
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22222 -j ACCEPT
서비스 재시작
#/etc/init.d/iptables restart
ssh 인증관련 동영상 강의
rsa 옵션 확인 |
|
ssh인증키 생성 |
hadoop2@clus15:~$
ssh-keygen -t rsa
클라이언트에서도 만들어야 작동.
|
생성결과예시 |
The key fingerprint is:
12:50:fa:80:1c:32:43:11:5c:cb:c5:9a:a5:3d:c1:36 hadoop2@clus15
|
ssh인증키 전송 |
hadoop2@clus15:~$
scp ~/.ssh/id_rsa.pub hadoop2@clus16:id_rsa.pub
|
authorized_keys 에 추가 |
cat $HOME/id_rsa.pub >> $HOME/.ssh/authorized_keys
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
|
패스워드 요구시 |
sudo chmod -Rf 755 .ssh
|
폴더생성하고 권한 설정 |
mkdir .ssh
chmod 700 .ssh
|
(데이터노드)
ssh 폴더로 이동
|
mv id_rsa.pub ~/.ssh/id_rsa.pub
cp id_rsa.pub ~/.ssh/authorized_keys
|
ssh 서버재시작 |
sudo /etc/init.d/ssh restart
service ssh restart
|
Delete old ssh host keys |
# /bin/rm -v /etc/ssh/ssh_host_* |
Reconfigure OpenSSH Server |
# dpkg-reconfigure openssh-server |
Host SSH info update |
ssh-keygen -R hostname
ssh-keygen -R 163.152.47.62
example ssh-keygen -R 163.152.47.64
This will update the offending of your host from the known_hosts
|
ssh 변경시 에러날 때
|
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
클라이언트에서 해당 명령어 실행
hadoop2@clus16:~/.ssh$ sudo vi known_hosts
hadoop2@clus16:~/.ssh$ source known_hosts
|
ssh 서버 정지 |
sudo service ssh stop |
ssh접속시도 |
hadoop2@clus15:~$ ssh clus16 |
공개키 전송 |
hadoop2@clus15:~$ cd ~/.ssh
hadoop2@clus15 .ssh$ cp id_rsa.pub authorized_keys
|
하둡 실행 |
start-all.sh |
하둡 환경설정 파일 수정
경로 |
$HADOOP_HOME/conf |
/home/hadoop2/.profile |
# 2014-11-26 set HADOOP_HOME enviroment variable here created by YUNHO MAENG
HADOOP_HOME=/home/hadoop2/hadoop-1.0.3
|
hadoop-env.sh |
hadoop2@clus11:~/hadoop-1.0.3/conf$ sudo vi hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.6.0_33
# 2014-11-26 HADOOP_HOME setting created by YUNHO MAENG
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
|
masters |
hadoop2@clus11:~/hadoop-1.0.3/conf$ sudo vi masters
localhost -> clus15로 변경
|
slaves |
hadoop2@clus11:~/hadoop-1.0.3/conf$ sudo vi slaves
localhost -> clus16 로 변경
clus11 추가
clus16
clus11
|
core-site.xml |
hadoop2@clus11:~/hadoop-1.0.3/conf$ sudo vi core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://clus15:9000</value>
</property>
<property>
<name>hadoop2.tmp.dir</name>
<value>/home/hadoop2/hadoop-data/</value>
</property>
</configuration>
|
hdfs-site.xml |
hadoop2@clus11:~/hadoop-1.0.3/conf$ sudo vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.http.address</name>
<value>clus15:50070</value>
<description>
The address and the base port where the dfs namenode web ui will listen
on.
If the port is 0 then the server will start on a free port.
</description>
</property>
<property>
<name>dfs.secondary.http.address</name>
<value>clus16:50070</value>
<description>
The secondary namenode http server address and port.
If the port is 0 then the server will start on a free port.
</description>
</property>
|
mapred-site.xml |
hadoop2@clus11:~/hadoop-1.0.3/conf$ sudo vi mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>clus15:9001</value>
</property>
|
환경 설정 파일 전송 |
scp /home/hadoop2/hadoop/conf/* hadoop2@clus16:/home/hadoop2/hadoop/conf |
하둡 실행 |
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/hadoop namenode -format
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/start-all.sh
|
실행 확인 |
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/hadoop dfsadmin -report |
하둡 예제 실행 |
예제 파일 업로드
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/hadoop fs -put conf/hadoop-env.sh conf/hadoop-env2.sh
./bin/hadoop fs -put news.txt output/news2.txt
hadoop2@clus15:~$ ./hadoop-1.0.3/bin/hadoop fs -put ex/2008.csv output/2008.csv
워드카운트 실행
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/hadoop jar hadoop-examples-*.jar wordcount conf/hadoop-env2.sh wordcount_output
./bin/hadoop jar hadoop-examples-*.jar wordcount output/news2.txt wc_output_1127
워드카운트 출력 결과 조회
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/hadoop fs -cat wordcount_output/part-r-00000
./bin/hadoop fs -cat wc_output_1127/part-r-00000
./bin/hadoop fs -cat wc_output_2008.csv/part-r-00000
|
하둡 멈춤 |
hadoop2@clus15:~/hadoop-1.0.3$ ./bin/stop-all.sh |
항공 출발 지연 데이터 분석 |
다운로드
업로드
hadoop2@clus15:~$ ./hadoop-1.0.3/bin/hadoop fs -put ex/2008.csv input/2008.csv
실행
./bin/hadoop jar wikibooks-hadoop-examples.jar wikibooks.hadoop.chapter05.DepartureDelayCount input dep_delay_count
확인
./bin/hadoop fs -cat dep_delay_count/part-r-00000 | tail -10
|
이클립스에 하둡 개발환경 만들기
프로젝트 생성 |
Package Explorer -> 우클릭 -> new -> 자바 프로젝트 ->next 3번째 탭 Library -> Add External jar -> jar파일들추가 -> finish
|
build.xml |
Package Explorer -> 우클릭 -> New -> File -> build.xml 이름 적고 생성.
<?xml version="1.0" encoding="utf-8"?>
<project name="HadoopExamples" default="build">
<!-- version info -->
<property name="major-version" value="1" />
<property name="minor-version" value="0" />
<property name="build-number" value="0" />
<property name="version" value="${major-version}.${minor-version}.${build-number}" />
<!-- name info -->
<property name="company-name" value="Korea Univ" />
<property name="project-name" value="hadoop-examples" />
<property name="general-lib" value="${company-name}-${project-name}.jar" />
<property name="general-src" value="${company-name}-${project-name}-src.zip" />
<!-- source directory info -->
<property name="build-Path" location="." />
<property name="src.dir.src" location="${build-Path}/src" />
<property name="src.dir.bin" location="${build-Path}/bin" />
<property name="src.dir.build" location="${build-Path}/build" />
<!-- build info -->
<target name="build" depends="build-lib, build-src" />
<target name="clean-all" depends="clean-lib, clean-src" />
<target name="clean-lib">
<delete file="${src.dir.build}/${general-lib}" />
</target>
<target name="clean-src">
<delete file="${src.dir.build}/${general-src}" />
</target>
<target name="build-lib" depends="clean-lib">
<jar destfile="${src.dir.build}/${general-lib}" basedir="${src.dir.bin}">
<manifest>
<attribute name="${project-name}-Version" value="${version}" />
</manifest>
</jar>
</target>
<target name="build-src" depends="clean-src">
<zip zipfile="${src.dir.build}/${general-src}" basedir="${src.dir.src}">
</zip>
</target>
</project>
|
Ant build |
생성된 xml 파일 우클릭 -> Run As -> Ant Build
|
Heartbeat 방화벽 설정
iptables 방화벽 포트 접근 허용
# master.namenode, secondary_namenode
1
2
3
4
5
6
|
[root@master ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50030 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50070 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50090 -j ACCEPT
|
# 테이터노드(datanode) : 각 datanode 서버들 별로 포트 접근 허용
1
2
3
4
5
6
|
[root@master ~]# vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50010 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50020 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50060 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 50075 -j ACCEPT
|
번 외
설치 확인법
(Standalone)
|
hadoop2@clus15:~$ cd $HADOOP_HOME
globus@clus15:/home/hadoop2/hadoop-1.0.3$ ./bin/hadoop jar hadoop-examples-1.0.3.jar wordcount README.txt wordcount_output
(hadoop2@clus15:~$ $HADOOP_HOME/bin/hadoop jar hadoop-examples-1.0.3.jar wordcount README.txt wordcount_output)
|
Maven설치 |
$ sudo apt-get install maven2 |
FTP에서 파일 수정하기 |
파일 읽기/쓰기/실행 권한을 루트 디렉토리에 준다.
globus@clus15:/home$ sudo chmod 777 hadoop2
r : 읽기권한(4) , w : 쓰기권한(2), x : 실행권한(1)
권한값 읽기 : [ -rw-rw-r-- ] => 664로 읽을 수 있다. (r+w(6), r+w(6), r(4))
이 후, Xshell의 새 파일 전송 버튼을 누르면 FTP클라이언트가 실행된다.
|
'Data Science 데이터 과학' 카테고리의 다른 글
2015-05-30 [통계] PLS 상세 설명 버전 (0) | 2018.02.19 |
---|---|
2015-05-07 사회과학 연구방법론 - 연세대학교 정보대학원 수업내용 (0) | 2018.02.19 |
빅데이터 분석을 통한 조혈모세포 기증에 대한 대중 인식과 실제 (1) | 2018.02.19 |
하둡 (Hadoop) 한글 지원 (UTF-8) 지원 (0) | 2018.02.18 |
2014-12-10 High-throughput Analysis of Large Microscopy Image Datasets on CPU-GPU 용어정리 (0) | 2018.02.18 |