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클라이언트가 실행된다. 

 
 


+ Recent posts