antony@notes:~/data-platform$ cat "dt-script-簡介.md"
dt*_script 簡介
dt*_script 簡介
[TOC]
dtwget

- 當我們透過
dtwget 33到apache.org網站下載資料,要先確定 套件是否有更新,再執行dtwget 33這個命令
:::spoiler dtwget 完整程式內容
#!/bin/bash
[ "$#" != 1 ] && echo "dtwget version" && exit 1
[ ! -d ~/vmalpdt/hdp${1} ] && echo "~/vmalpdt/hdp${1} not found" && exit 1
[ ! -f ~/vmalpdt/hdp${1}/dlist ] && echo "~/vmalpdt/hdp${1}/dlist not found" && exit 1
read -p "下載資科套件 ? (YES/NO) " ans
if [ "$ans" == "YES" ]; then
[ -d ~/vmalpdt/hdp${1}/opt ] && rm -r ~/vmalpdt/hdp${1}/opt &>/dev/null
mkdir -p ~/vmalpdt/hdp${1}/opt
while read line; do
wget $line &>/dev/null
if [ "$?" == "0" ]; then
n=${line##*/}
tar xvfz $n -C ~/vmalpdt/hdp${1}/opt &>/dev/null
[ "$?" == "0" ] && echo "$n ok"
rm $n
else
n=${line##*/}
echo "$n failed"
fi
done < ~/vmalpdt/hdp${1}/dlist
fi
if [ -f ~/vmalpdt/hdp${1}/hadoop-2.10.1.zip ]; then
cd ~/vmalpdt/hdp${1}/opt/
unzip ~/vmalpdt/hdp${1}/hadoop-2.10.1.zip &>/dev/null
[ "$?" == "0" ] && echo "Hadoop-2.10.1 ok"
fi
sudo chown -R bigred:bigred ~/vmalpdt/hdp${1}/opt:::

- 如果不想一直到
apache.org下載套件,可以先把套件載進本機,再自己寫一支程式dttar,一樣解壓縮到~/vmusdt/hdp33/opt/
dtcopy

dtconf
/etc/profile
gw=$(/sbin/route -n | grep -e "^0.0.0.0 " | head -n 1)
export GWIF=${gw##* }
ips=$(/sbin/ifconfig $GWIF | grep 'inet ')
export IP=$(echo $ips | cut -d' ' -f2 | cut -d':' -f2)
export NETID=${IP%.*}
export GW=$(/sbin/route -n | grep -e '^0.0.0.0' | tr -s \ - | cut -d ' ' -f2)
export PATH=/home/bigboss/bin:/home/bigboss/vmusdt/bin:$PATH
clear; sleep 3
v=$(cat /etc/os-release | grep 'PRETTY_NAME' | cut -d '=' -f 2)
echo "Welcome to DT Platform V 22.07 ($v)"
[ "$IP" != "" ] && echo "IP : $IP"
echo ""
alias ping='ping -c 4 '
alias dir='ls -alh '
alias poweroff='sudo poweroff'
alias reboot='sudo reboot'/etc/profile| 使用者登入後,第一支 run 的程式 ( 注意,不是開機後,是登入後 )source /home/bigboss/us.bash| 會執行 us.bash 這支程式,且程式裡的變數,會全部保留在 bigboss 使用者的環境裡面。
us.bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/| Java 的家,他的變數一定要大寫的 JAVA_HOMEexport HADOOP_HOME=/opt/hadoop-3.3.3| hadoop 的家us.bash會將 PATH 環境變數 重新設定,有了這個設定,可以讓我們順利的 run {dtcopy,dtconf,dtwget,dthdpchk}- 任何作業系統,裡面都會有 PATH 環境變數,裡面記了一堆目錄,只要把程式塞在其中一個目錄裡面,就可以在任何目錄 run 這支程式 。
- 要給 /home/bigboss 775 的權限,us.bash 也要
#!/bin/bash
adminuser=bigboss
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
export HADOOP_HOME=/opt/hadoop-3.3.3
export HADOOP_LOG_DIR=/tmp
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop/
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native/
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
# export HADOOP_USER_CLASSPATH_FIRST=true
[ -z $HADOOP_USER_NAME ] && [ $SHELL == '/bin/bash' ] && declare -r HADOOP_USER_NAME=$USER
# JobHistory log file path, 會自動產生目錄
# export HADOOP_MAPRED_LOG_DIR="/home/bigboss/jhslog"
export YARN_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export YARN_LOG_DIR=/tmp
# hadoop 3.2.1 及 3.1.3 這二個版本只要執行檔案傳送命令就會出現以下訊息
# hadoop fs -put -f /etc/passwd /tmp
# SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
export HADOOP_ROOT_LOGGER="WARN,console"
export PIG_HOME=/opt/pig-0.17.0
export PIG_HEAPSIZE=512
export HIVE_HOME=/opt/apache-hive-3.1.3-bin
export PATH=/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH=/home/bigboss/vmusdt/bin:$PATH
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PIG_HOME/bin:$HIVE_HOME/bin
export HBASE_HOME=/opt/hbase-2.4.13
export HBASE_CONF_DIR=/opt/hbase-2.4.13/conf
export ZOOKEEPER_HOME=/opt/apache-zookeeper-3.6.3-bin
export ZOO_LOG_DIR=/tmp/logs
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin
#export ZEPPELIN_HOME=/opt/zeppelin-0.9.0-bin-all
#export PATH=$PATH:$ZEPPELIN_HOME/bin
export SPARK_HOME=/opt/spark-3.2.2-bin-hadoop3.2
export SPARK_CONF_DIR=$SPARK_HOME/conf
export PYSPARK_PYTHON=/usr/bin/python3
export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
if [ -d /opt/jupyter/miniconda3/bin ];then
export ANACONDA_ROOT=/opt/jupyter/miniconda3
export PATH=$ANACONDA_ROOT/bin:$PATH
export PYSPARK_PYTHON=$ANACONDA_ROOT/bin/python
fi
if [ "$USER" != "" ]; then
[ -f /home/$USER/dkc.env ] && source /home/$USER/dkc.env
if [ ! -d metastore_db ]; then
#hn=$(hostname)
#if [ ${hn:0:3} == "adm" ] || [ ${hn:0:2} == "ds" ] || [ ${hn:0:8} == "zeppelin" ]; then
echo -n "build derby database ..."
schematool -initSchema -dbType derby &>/dev/null
if [ "$?" == "0" ]; then
echo " ok"
echo "set hive.cli.print.current.db=true;" > .hiverc
echo "set hive.metastore.warehouse.dir=/user/$USER/hive;" >> .hiverc
echo "set hive.exec.scratchdir=/user/$USER/tmp;" >> .hiverc
fi
fi
alias nano='nano -Ynone'
alias dir='ls -alh'
alias ssh='ssh -q'
fi
[ -d ~/.ssh ] && env > ~/.ssh/environmentssh 遠端執行
當我們 run 以下的命令,執行者會是 ssh 這支程式 命令 :
$ ssh < 主機名稱 > < command > 以下命令執行時的環境變數,與本機的環境變數不同
$ ssh dtw1 env:::spoiler output ( 點我 ) :
SHELL=/bin/bash
HBASE_CONF_DIR=/opt/hbase-2.4.13/conf
YARN_LOG_DIR=/tmp
YARN_HOME=/opt/hadoop-3.3.3
HBASE_LOG_DIR=/tmp
HADOOP_OPTS=-Djava.library.path=/opt/hadoop-3.3.3/lib/native
JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/
PWD=/home/bigboss
LOGNAME=bigboss
XDG_SESSION_TYPE=tty
HADOOP_MAPRED_LOG_DIR=/home/bigboss/jhslog
PIG_HOME=/opt/pig-0.17.0/
HIVE_HOME=/opt/apache-hive-3.1.3-bin
MOTD_SHOWN=pam
HOME=/home/bigboss
LANG=en_US.UTF-8
SSH_CONNECTION=192.168.23.135 44470 192.168.23.170 22
XDG_SESSION_CLASS=user
HADOOP_HOME=/opt/hadoop-3.3.3
USER=bigboss
PIG_HEAPSIZE=512
SHLVL=0
SPARK_HOME=/opt/spark-3.2.2-bin-hadoop3.2
XDG_SESSION_ID=8
LD_LIBRARY_PATH=/opt/hadoop-3.3.3/lib/native/
HBASE_HOME=/opt/hbase-2.4.13
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.23.135 44470 22
HADOOP_COMMON_LIB_NATIVE_DIR=/opt/hadoop-3.3.3/lib/native
PATH=/root/bin:/opt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/hadoop-3.3.3/bin:/opt/hadoop-3.3.3/sbin:/opt/pig-0.17.0/bin:/opt/apache-hive-3.1.3-bin/bin:/opt/spark-3.2.2-bin-hadoop3.2/bin:/opt/spark-3.2.2-bin-hadoop3.2/sbin:/opt/hbase-2.4.13/bin:/opt/apache-zookeeper-3.6.3-bin/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
HADOOP_LOG_DIR=/tmp
ZOO_LOG_DIR=/tmp/logs
_=/usr/bin/env:::
實作
在 dtw1 修改 .ssh/envirment 名稱,再 ssh dtw1 env
可以發現, output 結果變了
- 要到人家家 run 他的命令,一定要在他家的
.ssh/envirment這個檔案裡面加 PATH 環境變數,因為他絕對不會讀取 /etc/profile - 這命令要成功,需要開啟公鑰憑證登入。