티스토리 뷰
효율적인 운영을 위해 hadoop cluster 에서 slave server 를 교환하려고 한다.
이를 위해 hadoop 에서는 기존 slave server 를 제거하고 새로운 slave server 를 추가해야 한다.
이때의 작업 절차는 다음과 같다.
1. 기존 slave server 에서 tasktracker 중지
2. 기존 slave server 에서 datanode 중지
3. 기존 slave server 의 ip 변경(새 장비가 기존 slave 역할을 대신해야 하므로)
4. 신규 slave server 에서 hadoop config, ip 설정
5. 신규 slave server 에서 datanode 기동
6. 신규 slave server 에서 tasktracker 기동
slave 에 직접 접속해서 tasktracker, datanode 를 재기동하는 방법은 다음과 같다.
[slave] $hadoop_home/bin/hadoop-daemon.sh stop tasktracker
[slave]$hadoop_home/bin/hadoop-daemon.sh stop datanode
[slave]$hadoop_home/bin/hadoop-daemon.sh start datanode
[slave]$hadoop_home/bin/hadoop-daemon.sh start tasktracker
master 에 접속해서 tasktracker, datanode 를 재기동하는 방법은 다음과 같다.
1) 기동/종료할 DataNode의 hostname를 파일에 확인한다.
2) 대상 서버의 hostname를 NameNode의 $hadoop_home/conf/tmpfile 에 입력한다.
3) tmpfile에 등록된 datanode을 hadoop을 기동/종료한다.
[master] $hadoop_home/bin/hadoop-daemons.sh --hosts tmpfile stop tasktracker
[master] $hadoop_home/bin/hadoop-daemons.sh --hosts tmpfile stop datanode
[master] $hadoop_home/bin/hadoop-daemons.sh --hosts tmpfile start datanode
[master] $hadoop_home/bin/hadoop-daemons.sh --hosts tmpfile start tasktracker
노드 중단은 tasktracker -> datanode 순으로,
노드 기동은 datanode -> tasktracker 순으로 한다.
수행 후 전체 hadoop node 에 반영되는 데는 시간이 소요된다.
$hadoop_home/bin/hadoop dfsadmin -refreshNodes 를 수행하여 refresh 적용해주고 약간의 시간을 기다리자.
(5분 정도)
slave 1대를 제거할 때마다 replicated block 이 생긴다.
이것들이 완전히 해소된 것을 확인하고 다음 노드를 제거하자.
$hadoop_home/bin/hadoop-daemon.sh 과
$hadoop_home/bin/hadoop-daemons.sh 의 차이
# Run a Hadoop command on all slave hosts.
usage="Usage: hadoop-daemons.sh [--config confdir] [--hosts hostlistfile] [start|stop] command args..."
# if no args specified, show usage
if [ $# -le 1 ]; then
echo $usage
exit 1
fi
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
. $bin/hadoop-config.sh
# hadoop-daemons.sh 위치를 받아서, 동일 위치에서 hadoop-config.sh 을 실행한다.
# hadoop-config.sh 은 $HADOOP_CONF_DIR, $HADOOP_SLAVES 를 export 한다.
exec "$bin/slaves.sh" --config $HADOOP_CONF_DIR cd "$HADOOP_HOME" \; "$bin/hadoop-daemon.sh" --config $HADOOP_CONF_DIR "$@"
# hadoop config 의 slaves 목록을 확인 후 각 slave 에 hadoop-daemon.sh 명령 전달
[ hadoop-daemon.sh ]
# slave 자신에 대해 hadoop-daemon.sh 로 hadoop-command 를 start or stop 한다.
# Run a Hadoop command on all slave hosts.
usage="Usage: hadoop-daemon.sh [--config <conf-dir>] [--hosts hostlistfile] (start|stop) <hadoop-command> <args...>"
# if no args specified, show usage
if [ $# -le 1 ]; then
echo $usage
exit 1
fi
bin=`dirname "$0"`
bin=`cd "$bin"; pwd`
. "$bin"/hadoop-config.sh
# get arguments
startStop=$1
shift
command=$1
shift
hadoop_rotate_log ()
{
log=$1;
num=5;
if [ -n "$2" ]; then
num=$2
fi
if [ -f "$log" ]; then # rotate logs
while [ $num -gt 1 ]; do
prev=`expr $num - 1`
[ -f "$log.$prev" ] && mv "$log.$prev" "$log.$num"
num=$prev
done
mv "$log" "$log.$num";
fi
}
if [ -f "${HADOOP_CONF_DIR}/hadoop-env.sh" ]; then
. "${HADOOP_CONF_DIR}/hadoop-env.sh"
fi
# get log directory
if [ "$HADOOP_LOG_DIR" = "" ]; then
export HADOOP_LOG_DIR="$HADOOP_HOME/logs"
fi
mkdir -p "$HADOOP_LOG_DIR"
if [ "$HADOOP_PID_DIR" = "" ]; then
HADOOP_PID_DIR=/tmp
fi
if [ "$HADOOP_IDENT_STRING" = "" ]; then
export HADOOP_IDENT_STRING="$USER"
fi
# some variables
export HADOOP_LOGFILE=hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.log
export HADOOP_ROOT_LOGGER="INFO,DRFA"
log=$HADOOP_LOG_DIR/hadoop-$HADOOP_IDENT_STRING-$command-$HOSTNAME.out
pid=$HADOOP_PID_DIR/hadoop-$HADOOP_IDENT_STRING-$command.pid
# Set default scheduling priority
if [ "$HADOOP_NICENESS" = "" ]; then
export HADOOP_NICENESS=0
fi
case $startStop in
(start)
mkdir -p "$HADOOP_PID_DIR"
if [ -f $pid ]; then
if kill -0 `cat $pid` > /dev/null 2>&1; then
echo $command running as process `cat $pid`. Stop it first.
exit 1
fi
fi
if [ "$HADOOP_MASTER" != "" ]; then
echo rsync from $HADOOP_MASTER
rsync -a -e ssh --delete --exclude=.svn --exclude='logs/*' --exclude='contrib/hod/logs/*' $HADOOP_MASTER/ "$HADOOP_HOME"
fi
hadoop_rotate_log $log
echo starting $command, logging to $log
cd "$HADOOP_HOME"
nohup nice -n $HADOOP_NICENESS "$HADOOP_HOME"/bin/hadoop --config $HADOOP_CONF_DIR $command "$@" > "$log" 2>&1 < /dev/null &
echo $! > $pid
sleep 1; head "$log"
;;
(stop)
if [ -f $pid ]; then
if kill -0 `cat $pid` > /dev/null 2>&1; then
echo stopping $command
kill `cat $pid`
else
echo no $command to stop
fi
else
echo no $command to stop
fi
;;
(*)
echo $usage
exit 1
;;
esac
'개발 노트 > Hadoop' 카테고리의 다른 글
Hadoop Upgrade Guide for v.0.14 (0) | 2013.12.06 |
---|---|
Balancer (0) | 2013.12.05 |
운영상의 이슈 (0) | 2013.11.14 |
hadoop datanode 제거 / 추가 하기 (2) (0) | 2013.11.04 |
Hadoop Job Error (1) | 2013.10.23 |
- Total
- Today
- Yesterday
- natas7
- 웹보안
- nc
- 압축파일
- 32bit
- OverTheWire
- solution
- Encode
- gz
- 리터럴
- over the wire
- grep
- 리눅스
- OpenSSL
- java
- BASE64
- ssh
- Linux
- Strings
- tar
- Natas
- bz2
- 웹보안공부
- SSL
- find
- 풀이
- X32
- tr
- HTTPS
- Bandit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |