HBase - 1.0.1 학습 노트 (8) 시작 스 크 립 트 분석

14161 단어 shellhbase
노 춘 리 의 업무 노트, 누가 프로그래머 가 문예 범 위 를 가 질 수 없다 고 했 습 니까?
아래 내용 은 주로 참고 하 였 다http://zjushch.iteye.com/blog/1736065고맙다
일반적인 스 크 립 트 는 다음 과 같 습 니 다:
1、$HBASE_HOME/bin/start-hbase.sh 
    전체 군집 시작
2、$HBASE_HOME/bin/stop-hbase.sh 
    전체 군집 을 중지 하 다.
3、$HBASE_HOME/bin/hbase-daemons.sh
    시작 또는 정지, 모든 regionserver 또는 zookeeper 또는 backup - master
4、$HBASE_HOME/bin/hbase-daemon.sh
    시작 또는 정지, 단일 master 또는 regionserver 또는 zookeeper
5、$HBASE_HOME/bin/hbase
    최종 시작 은 이 스 크 립 트 에서 실 행 됩 니 다.
일반적으로 start - hbase. sh 를 통 해 HBase 클 러 스 터 를 시작 합 니 다. 스 크 립 트 실행 절 차 는 다음 과 같 습 니 다.
#!/usr/bin/env bash
# $?             
# $#  shell        
# $0 shell       
# $1 shell        
# $2 shell        
# $@ shell          
 
# Start hadoop hbase daemons.
# Run this on master node.
usage="Usage: start-hbase.sh"
 
bin=`dirname "${BASH_SOURCE-$0}"`
bin=`cd "$bin">/dev/null; pwd`
 
# 1、      
. "$bin"/hbase-config.sh
 
# start hbase daemons
errCode=$? #             
if [ $errCode -ne 0 ] # 
then
  exit $errCode
fi
 
# 2、    (0.96             autorestart,      ) 
if [ "$1" = "autorestart" ] #   start-hbase.sh   ,        
then
  commandToRun="autorestart"
else 
  commandToRun="start"
fi
 
# HBASE-6504 - only take the first line of the output in case verbose gc is on
distMode=`$bin/hbase --config "$HBASE_CONF_DIR" org.apache.hadoop.hbase.util.HBaseConfTool 
hbase.cluster.distributed | head -n 1`
#   hbase        ,hbase-site.xml    
 
# 3、         
if [ "$distMode" == 'false' ] 
then
  "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@
else
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper
  "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master 
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" --hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver
  "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" --hosts "${HBASE_BACKUP_MASTERS}" $commandToRun master-backup
fi

hbase - config. sh 의 역할:
    HBASE 와 같은 설정 불 러 오기HOME 디 렉 터 리, conf 디 렉 터 리 (HBASE CONF DIR), regionserver 기기 목록 (HBASE REGIONSERVERS), JAVAHOME 디 렉 터 리 및 HBASEBACKUP_MASTERS 기계 목록 에서 $HBASE 를 호출 합 니 다.HOME/conf/hbase-env.sh。
if [ -z "$HBASE_ENV_INIT" ] && [ -f "${HBASE_CONF_DIR}/hbase-env.sh" ]; then
  . "${HBASE_CONF_DIR}/hbase-env.sh"
  export HBASE_ENV_INIT="true"
fi

hbase - env. sh 의 역할:
    주로 JVM 과 GC 인 자 를 설정 하고 log 디 렉 터 리 와 인 자 를 설정 할 수 있 으 며 hbase 관리 ZK 가 필요 한 지, 프로 세 스 id 디 렉 터 리 등 을 설정 할 수 있 습 니 다.
# export JAVA_HOME=/usr/sca_app/java/jdk1.7.0
# Where log files are stored.  $HBASE_HOME/logs by default.
# export HBASE_LOG_DIR=${HBASE_HOME}/logs
# Tell HBase whether it should manage it's own instance of Zookeeper or not.
# export HBASE_MANAGES_ZK=true

hbase - daemons. sh 의 역할:
    필요 에 따라 시작 하 는 프로 세 스 입 니 다.
# Run a hbase command on all slave hosts.
# Modelled after $HADOOP_HOME/bin/hadoop-daemons.sh
 
usage="Usage: hbase-daemons.sh [--config <hbase-confdir>] \
 [--hosts regionserversfile] [start|stop] command args..."
 
# if no args specified, show usage
if [ $# -le 1 ]; then
  echo $usage
  exit 1
fi
 
bin=`dirname "${BASH_SOURCE-$0}"`
bin=`cd "$bin">/dev/null; pwd`
 
. $bin/hbase-config.sh
 
remote_cmd="cd ${HBASE_HOME}; $bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} $@"
args="--hosts ${HBASE_REGIONSERVERS} --config ${HBASE_CONF_DIR} $remote_cmd"
 
command=$2
case $command in
  (zookeeper)
exec "$bin/zookeepers.sh" $args
;;
  (master-backup)
exec "$bin/master-backup.sh" $args
;;
  (*)
exec "$bin/regionservers.sh" $args
;;
esac

zookeepers. sh 의 역할:
    하면, 만약, 만약...MANAGES_ZK" = "true ", 그러면 ZKServerTool 과 같은 xml 프로필 을 분석 하여 ZK 노드 목록 (즉, hbase. zookeeper. quorum 의 설정 값) 을 가 져 온 다음 SSH 를 통 해 이 노드 에 원 격 명령 을 보 냅 니 다.
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop zookeeper 
if [ "$HBASE_MANAGES_ZK" = "true" ]; then
  hosts=`"$bin"/hbase org.apache.hadoop.hbase.zookeeper.ZKServerTool | grep '^ZK host:' | sed 's,^ZK host:,,'`
  cmd=$"${@// /\\ }"
  for zookeeper in $hosts; do
   ssh $HBASE_SSH_OPTS $zookeeper $cmd 2>&1 | sed "s/^/$zookeeper: /" &
   if [ "$HBASE_SLAVE_SLEEP" != "" ]; then
 sleep $HBASE_SLAVE_SLEEP
   fi
  done
fi

regionserver. sh 의 역할: 
    zookeepers. sh 와 유사 합 니 다. ${HBASE CONF DIR} / regionserver 설정 파일 을 통 해 regionserver 기기 목록 을 가 져 온 다음 SSH 를 통 해 원 격 명령 을 보 냅 니 다.
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop regionserver

master - backup. sh 의 역할: 
    ${HBASE CONF DIR} / backup - masters 이 프로필 을 통 해 backup - masters 기기 목록 을 가 져 옵 니 다 (기본 설정 에 서 는 이 프로필 이 존재 하지 않 기 때문에 backup - master 를 시작 하지 않 습 니 다). 그리고 SSH 는 이 기기 에 원 격 명령 을 보 냅 니 다.
cd ${HBASE_HOME};
$bin/hbase-daemon.sh --config ${HBASE_CONF_DIR} start/stop master --backup

hbase - daemon. sh 의 역할:
    zookeepers. sh 든 regionserver. sh 든 master - backup. sh 든 최종 적 으로 로 컬 hbase - daemon. sh 를 호출 합 니 다. 그 실행 과정 은 다음 과 같 습 니 다. 
    1. hbase - config. sh 를 실행 하고 각종 설정 (자바 환경, 로그 설정, 프로 세 스 ID 디 렉 터 리 등) 을 불 러 옵 니 다.
    2. 파일 의 실행 및 로그 출력 경 로 를 지정 합 니 다.
# get arguments
startStop=$1
JAVA=$JAVA_HOME/bin/java
export HBASE_LOG_PREFIX=hbase-$HBASE_IDENT_STRING-$command-$HOSTNAME
export HBASE_LOGFILE=$HBASE_LOG_PREFIX.log
 
if [ -z "${HBASE_ROOT_LOGGER}" ]; then
export HBASE_ROOT_LOGGER=${HBASE_ROOT_LOGGER:-"INFO,RFA"}
fi
 
if [ -z "${HBASE_SECURITY_LOGGER}" ]; then 
export HBASE_SECURITY_LOGGER=${HBASE_SECURITY_LOGGER:-"INFO,RFAS"}
fi
 
logout=$HBASE_LOG_DIR/$HBASE_LOG_PREFIX.out
loggc=$HBASE_LOG_DIR/$HBASE_LOG_PREFIX.gc
loglog="${HBASE_LOG_DIR}/${HBASE_LOGFILE}"
pid=$HBASE_PID_DIR/hbase-$HBASE_IDENT_STRING-$command.pid
export HBASE_ZNODE_FILE=$HBASE_PID_DIR/hbase-$HBASE_IDENT_STRING-$command.znode
export HBASE_START_FILE=$HBASE_PID_DIR/hbase-$HBASE_IDENT_STRING-$command.autorestart
# hbase0.98
# thiscmd=$0,   hbase-daemon.sh       
# hbase1.0.1   ,            
thiscmd="$bin/$(basename ${BASH_SOURCE-$0})"
args=$@
 
case $startStop in
 
(start)
check_before_start
hbase_rotate_log $logout
hbase_rotate_log $loggc
echo starting $command, logging to $logout
#       internal_start        hbase-daemon.sh  
nohup $thiscmd --config "${HBASE_CONF_DIR}" internal_start $command $args < /dev/null > ${logout} 2>&1  &
sleep 1; head "${logout}"
  ;;
 
(autorestart)
check_before_start
hbase_rotate_log $logout
hbase_rotate_log $loggc
nohup $thiscmd --config "${HBASE_CONF_DIR}" internal_autorestart $command $args < /dev/null > ${logout} 2>&1  &
  ;;
 
(internal_start)
# Add to the command log file vital stats on our environment.
echo "`date` Starting $command on `hostname`" >> $loglog
echo "`ulimit -a`" >> $loglog 2>&1
nice -n $HBASE_NICENESS "$HBASE_HOME"/bin/hbase \
--config "${HBASE_CONF_DIR}" \
$command "$@" start >> "$logout" 2>&1 &
echo $! > $pid
wait
cleanZNode
  ;;
 
(internal_autorestart)
touch "$HBASE_START_FILE"
#keep starting the command until asked to stop. Reloop on software crash
while true
  do
lastLaunchDate=`date +%s`
$thiscmd --config "${HBASE_CONF_DIR}" internal_start $command $args
 
#if the file does not exist it means that it was not stopped properly by the stop command
if [ ! -f "$HBASE_START_FILE" ]; then
  exit 1
fi
 
#if the cluster is being stopped then do not restart it again.
zparent=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.parent`
if [ "$zparent" == "null" ]; then zparent="/hbase"; fi
zkrunning=`$bin/hbase org.apache.hadoop.hbase.util.HBaseConfTool zookeeper.znode.state`
if [ "$zkrunning" == "null" ]; then zkrunning="running"; fi
zkFullRunning=$zparent/$zkrunning
$bin/hbase zkcli stat $zkFullRunning 2>&1 | grep "Node does not exist"  1>/dev/null 2>&1
#grep returns 0 if it found something, 1 otherwise
if [ $? -eq 0 ]; then
  exit 1
fi
 
#If ZooKeeper cannot be found, then do not restart
$bin/hbase zkcli stat $zkFullRunning 2>&1 | grep Exception | grep ConnectionLoss  1>/dev/null 2>&1
if [ $? -eq 0 ]; then
  exit 1
fi
 
#if it was launched less than 5 minutes ago, then wait for 5 minutes before starting it again.
curDate=`date +%s`
limitDate=`expr $lastLaunchDate + 300`
if [ $limitDate -gt $curDate ]; then
  sleep 300
fi
  done
;;
 
(stop)
rm -f "$HBASE_START_FILE"
if [ -f $pid ]; then
  pidToKill=`cat $pid`
  # kill -0 == see if the PID exists
  if kill -0 $pidToKill > /dev/null 2>&1; then
echo -n stopping $command
echo "`date` Terminating $command" >> $loglog
kill $pidToKill > /dev/null 2>&1
waitForProcessEnd $pidToKill $command
  else
retval=$?
echo no $command to stop because kill -0 of pid $pidToKill failed with status $retval
  fi
else
  echo no $command to stop because no pid file $pid
fi
rm -f $pid
  ;;
 
(restart)
# stop the command
$thiscmd --config "${HBASE_CONF_DIR}" stop $command $args &
wait_until_done $!
# wait a user-specified sleep period
sp=${HBASE_RESTART_SLEEP:-3}
if [ $sp -gt 0 ]; then
  sleep $sp
fi
# start the command
$thiscmd --config "${HBASE_CONF_DIR}" start $command $args &
wait_until_done $!
  ;;
 
(*)
  echo $usage
  exit 1
  ;;
esac

    3. start 명령 이 라면?
    출력 파일 스크롤, gc 로그 파일 스크롤, 로그 파일 출력 시작 시간 + ulimit -정보
“Mon Nov 26 10:31:42 CST 2012 Starting master on dwxx.yy.taobao”
"..open files                      (-n) 65536.."

    4. $HBASE 호출HOME/bin/hbase start master/regionserver/zookeeper
    5. wait 를 실행 하고 3 에서 열 리 는 프로 세 스 가 끝 날 때 까지 기 다 립 니 다.
    6. cleanZNode 를 실행 하고 regionserver 가 zk 에 등 록 된 노드 를 삭제 합 니 다. 이렇게 하 는 목적 은 regionserver 프로 세 스 가 예상 치 못 하 게 종료 되 었 을 때 3 분 동안 ZK 심장 박동 이 시간 을 초과 하지 않 고 master 에서 다운 되 는 것 입 니 다. 
    7. stop 명령 이 라면?
    프로 세 스 ID 에 따라 프로 세 스 가 존재 하 는 지 확인 합 니 다.kill 명령 을 호출 하고 프로 세 스 가 존재 하지 않 을 때 까지 기 다 립 니 다.
    8. restart 명령 이 라면?
    stop 호출 후 start 호출... 
$HBASE_HOME / bin / hbase 의 역할:
    최종 시작 은 이 스 크 립 트 에서 실 행 됩 니 다.
    1. $HBASE 입력 가능HOME / bin / hbase 사용 현황 확인
[mvtech2@cu-dmz3 bin]$ hbase
Usage: hbase [<options>] <command> [<args>]
Options:
  --config DIR    Configuration direction to use. Default: ./conf
  --hosts HOSTS   Override the list in 'regionservers' file
 
Commands:
Some commands take arguments. Pass no args or -h for usage.
  shell           Run the HBase shell
  hbck            Run the hbase 'fsck' tool
  hlog            Write-ahead-log analyzer
  hfile           Store file analyzer
  zkcli           Run the ZooKeeper shell
  upgrade         Upgrade hbase
  master          Run an HBase HMaster node
  regionserver    Run an HBase HRegionServer node
  zookeeper       Run a Zookeeper server
  rest            Run an HBase REST server
  thrift          Run the HBase Thrift server
  thrift2         Run the HBase Thrift2 server
  clean           Run the HBase clean up script
  classpath       Dump hbase CLASSPATH
  mapredcp        Dump CLASSPATH entries required by mapreduce
  version         Print the version
  CLASSNAME       Run the class named CLASSNAME

    2.bin/hbase 셸, 이것 이 바로 자주 사용 하 는 셸 도구 입 니 다. 운영 에 자주 사용 되 는 DDL 과 DML 은 모두 이 를 통 해 진행 되 며 구체 적 인 실현 (hbase 호출) 은 ruby 로 작 성 됩 니 다.
[mvtech2@cu-dmz3 bin]$ hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 0.98.1-hadoop2, r1583035, Sat Mar 29 17:19:25 PDT 2014
 
hbase(main):001:0>

    3.bin/hbase hbck
    클 러 스 터 의 데이터 일치 성 상 태 를 확인 하 는 데 자주 사용 되 는 도 구 를 사용 합 니 다. org. apache. hadop. hbase. util. HBaseFsck 의 main 함 수 를 직접 조정 합 니 다.
    4.bin/hbase hlog
    log 분석 도 구 는 org. apache. hadop. hbase. wal. WALPretty Printer 의 main 함 수 를 직접 조정 합 니 다.   
    5.bin/hbase hfile
    hfile 분석 도구 의 실행 은 org. apache. hadop. hbase. io. hfile. HFile Pretty Printer 의 main 함수 입 니 다.
    6.bin/hbase zkcli
    ZK 의 셸 도 구 를 보 거나 관리 합 니 다. org. apache. zookeeper. ZooKeeperMain 의 main 함 수 를 호출 했 습 니 다.
    7.bin/hbase master、regionserver、zookeeper
$HBASE_HOME/bin/hbase start master/regionserver/zookeeper
        
org.apache.hadoop.hbase.master.HMaster
org.apache.hadoop.hbase.regionserver.HRegionServer
org.apache.hadoop.hbase.zookeeper.HQuorumPeer
 main  ,   main     new   Runnable HMaster/HRegionServer/QuorumPeer,    Running...

    8.bin/hbase classpath 인쇄 classpath
    9.bin/hbase version hbase 버 전 정보 인쇄
    10.bin/hbase CLASSNAME
    main 함 수 를 실현 한 모든 클래스 는 이 스 크 립 트 를 통 해 실 행 될 수 있 습 니 다. 예 를 들 어 앞의 hlog 입 니 다. hfile hbck 도 구 는 실질 적 으로 이 인터페이스 에 대한 단축 호출 입 니 다. 다른 단축 키 를 제공 하지 않 은 class 도 이 인터페이스 로 호출 할 수 있 습 니 다. 예 를 들 어 Region. merge 호출: $HBASEHOME/bin/hbase/org.apache.hadoop.hbase.util.Merge。
    
스 크 립 트 사용 소결:
    1. 클 러 스 터 오픈, start - hbase. sh
    2. 클 러 스 터 닫 기, stop - hbase. sh
    3. 모든 regionserver, zookeeper 열기 / 닫 기
    hbase-daemons.sh start/stop regionserver/zookeeper
    4. 한 지역 서버, zookeeper 를 켜 거나 닫 습 니 다.
    hbase-daemon.sh start/stop regionserver/zookeeper
    5. 마스터 열기 / 닫 기 
    hbase-daemon.sh start/stop master, active 가 될 지 여부 master 는 현재 active master 가 있 는 지 여부 에 달 려 있 습 니 다.

좋은 웹페이지 즐겨찾기