Merge branch 'master' of github.com:HariSekhon/DevOps-Bash-tools

pull/2/head
Hari Sekhon 5 years ago
commit c6624d44de

@ -91,7 +91,7 @@ function dockerrunrm(){
fi
args="$args $x"
done
eval docker run --rm -ti -v $PWD:/pwd "$args"
eval docker run --rm -ti -v $PWD:/pwd -w /pwd "$args"
}
alias drun='docker run --rm -ti -v "${PWD}":/app'

@ -80,5 +80,5 @@ fi
realm="${HIVESERVER2_HOST#*.}"
set -x
[ -n "${VERBOSE:-}" ] && set -x
beeline -u "jdbc:hive2://$HIVESERVER2_HOST:10000/default;principal=hive/_HOST@${realm}${opts}" "$@"

@ -27,16 +27,29 @@ Calls HDFS command which is assumed to be in \$PATH
Make sure to kinit before running this if using a production Kerberized cluster
usage: ${0##*/} <file_or_directory_paths>
usage: ${0##*/} <file_or_directory_paths> [hdfs_dfs_du_options]
EOF
exit 3
}
if [[ "${1:-}" =~ ^- ]]; then
usage
fi
for arg; do
case "$arg" in
# not including -h here because du -h is needed for human readable format
--help) usage
;;
esac
done
# if using -h there will be more columns so remove cols 3 + 4 which are replica sizes eg.
#
# 21.7 M 65.0 M hdfs://nameservice1/user/hive/warehouse/...
#
# otherwise will be in format
#
# 22713480 68140440 hdfs://nameservice1/user/hive/warehouse/...
hdfs dfs -du "$@" |
awk '{ $2=""; print }'
awk '{ if($2 ~ /[A-Za-z]/){ $3=""; $4=""} else { $2="" }; print }' |
column -t

@ -27,17 +27,29 @@ Calls HDFS command which is assumed to be in \$PATH
Make sure to kinit before running this if using a production Kerberized cluster
usage: ${0##*/} <file_or_directory_paths>
usage: ${0##*/} <file_or_directory_paths> [hdfs_dfs_du_options]
EOF
exit 3
}
if [[ "${1:-}" =~ ^- ]]; then
usage
fi
for arg; do
case "$arg" in
# not including -h here because du -h is needed for human readable format
--help) usage
;;
esac
done
# if using -h there will be more columns so remove cols 1 + 2 and use cols 3 + 4 for sizes including replicas eg.
#
# 21.7 M 65.0 M hdfs://nameservice1/user/hive/warehouse/...
#
# otherwise will be in format
#
# 22713480 68140440 hdfs://nameservice1/user/hive/warehouse/...
hdfs dfs -du "$@" |
awk '{ $1=""; print }' |
awk '{ if($2 ~ /[A-Za-z]/){ $1=""; $2="" } else { $2="" }; print }' |
column -t

@ -15,6 +15,8 @@
# List all Hive databases via beeline
#
# FILTER environment variable will restrict to matching databases (if giving <db>.<table>, matches up to the first dot)
#
# Tested on Hive 1.1.0 on CDH 5.10, 5.16
# For a better version written in Python see DevOps Python tools repo:
@ -30,4 +32,13 @@ set -eu -o pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(dirname "$0")"
"$srcdir/beeline.sh" --silent=true --outputformat=tsv2 -e 'SHOW DATABASES' "$@" | tail -n +2 # | awk '{print $1}'
"$srcdir/beeline.sh" --silent=true --outputformat=tsv2 -e 'SHOW DATABASES' "$@" |
tail -n +2 |
# awk '{print $1}' |
while read -r db; do
if [ -n "${FILTER:-}" ] &&
! [[ "$db" =~ ${FILTER%%.*} ]]; then
continue
fi
printf "%s\n" "$db"
done

@ -0,0 +1,64 @@
#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2019-12-10 11:33:52 +0000 (Tue, 10 Dec 2019)
#
# https://github.com/harisekhon/bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/harisekhon
#
# Print each table's DDL metadata field eg. Location
#
# FILTER environment variable will restrict to matching fully qualified tables (<db>.<table>)
#
# Tested on Hive 1.1.0 on CDH 5.10, 5.16
#
# For more documentation see the comments at the top of beeline.sh
# For a better version written in Python see DevOps Python tools repo:
#
# https://github.com/harisekhon/devops-python-tools
# you will almost certainly have to comment out / remove '-o pipefail' to skip authorization errors such as that documented in impala_list_tables.sh
set -eu # -o pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(dirname "$0")"
usage(){
echo "usage: ${0##*/} [beeline_options]"
exit 3
}
for arg; do
if [[ "$arg" =~ -h|--help ]]; then
usage
fi
done
query_template="describe {table}"
opts="--silent=true --outputformat=tsv2"
# exit the loop subshell if you Control-C
trap 'exit 130' INT
"$srcdir/hive_list_tables.sh" "$@" |
while read -r db table; do
printf '%s.%s\t' "$db" "$table"
query="${query_template//\{db\}/\`$db\`}"
query="${query//\{table\}/\`$table\`}"
# shellcheck disable=SC2086
if ! "$srcdir/beeline.sh" $opts -e "USE \`$db\`; $query" "$@"; then
echo "ERROR running query: $query" >&2
echo "UNKNOWN"
fi |
tail -n +2 |
awk '{if(NF == 2){print}}' |
wc -l
done

@ -61,7 +61,7 @@ while read -r db table; do
query="${query_template//\{db\}/\`$db\`}"
query="${query//\{table\}/\`$table\`}"
# shellcheck disable=SC2086
{ "$srcdir/beeline.sh" $opts -e "USE \`$db\`; $query" "$@" || echo ERROR; } |
{ "$srcdir/beeline.sh" $opts -e "USE \`$db\`; $query" "$@" || echo "ERROR running query: $query" >&2; } |
{ grep "^$field" || echo UNKNOWN; } |
sed "s/^$field:[[:space:]]*//; s/[[:space:]]*NULL[[:space:]]*$//"
done

@ -15,6 +15,8 @@
# Lists all Impala databases using adjacent impala_shell.sh script
#
# FILTER environment variable will restrict to matching databases (if giving <db>.<table>, matches up to the first dot)
#
# Tested on Impala 2.7.0, 2.12.0 on CDH 5.10, 5.16 with Kerberos and SSL
#
# For more documentation see the comments at the top of impala_shell.sh
@ -29,4 +31,12 @@ srcdir="$(dirname "$0")"
# strip comments after database name, eg.
# default Default Hive database
"$srcdir/impala_shell.sh" -Bq 'SHOW DATABASES' "$@" | awk '{print $1}'
"$srcdir/impala_shell.sh" --quiet -Bq 'SHOW DATABASES' "$@" |
awk '{print $1}' |
while read -r db; do
if [ -n "${FILTER:-}" ] &&
! [[ "$db" =~ ${FILTER%%.*} ]]; then
continue
fi
printf "%s\n" "$db"
done

@ -36,7 +36,7 @@ srcdir="$(dirname "$0")"
"$srcdir/impala_list_databases.sh" |
while read -r db; do
"$srcdir/impala_shell.sh" -Bq "SHOW TABLES IN \`$db\`" "$@" |
"$srcdir/impala_shell.sh" --quiet -Bq "SHOW TABLES IN \`$db\`" "$@" |
sed "s/^/$db /"
done |
while read -r db table; do

@ -0,0 +1,67 @@
#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2019-12-10 11:33:52 +0000 (Tue, 10 Dec 2019)
#
# https://github.com/harisekhon/bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/harisekhon
#
# Print each table's number of columns
#
# FILTER environment variable will restrict to matching fully qualified tables (<db>.<table>)
#
# Caveats:
#
# Hive is more reliable as Impala breaks on some table metadata definitions where Hive doesn't
#
# Impala is faster than Hive for the first ~1000 tables but then slows down
# so if you have a lot of tables I recommend you use the Hive version of this instead
#
# Tested on Impala 2.7.0, 2.12.0 on CDH 5.10, 5.16 with Kerberos and SSL
#
# For more documentation see the comments at the top of impala_shell.sh
# For a better version written in Python see DevOps Python tools repo:
#
# https://github.com/harisekhon/devops-python-tools
# you will almost certainly have to comment out / remove '-o pipefail' to skip authorization errors such as that documented in impala_list_tables.sh
set -eu # -o pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(dirname "$0")"
usage(){
echo "usage: ${0##*/} [impala_shell_options]"
exit 3
}
for arg; do
if [[ "$arg" =~ -h|--help ]]; then
usage
fi
done
query_template="describe {table}"
# exit the loop subshell if you Control-C
trap 'exit 130' INT
"$srcdir/impala_list_tables.sh" "$@" |
while read -r db table; do
printf '%s.%s\t' "$db" "$table"
query="${query_template//\{db\}/\`$db\`}"
query="${query//\{table\}/\`$table\`}"
if ! "$srcdir/impala_shell.sh" --quiet -Bq "USE \`$db\`; $query" "$@"; then
echo "ERROR running query: $query" >&2
echo "UNKNOWN"
fi |
awk '{if(NF == 2){print}}' |
wc -l
done

@ -65,7 +65,7 @@ while read -r db table; do
printf '%s.%s\t' "$db" "$table"
query="${query_template//\{db\}/\`$db\`}"
query="${query//\{table\}/\`$table\`}"
{ "$srcdir/impala_shell.sh" --quiet -Bq "USE \`$db\`; $query" "$@" || echo ERROR; } |
{ "$srcdir/impala_shell.sh" --quiet -Bq "USE \`$db\`; $query" "$@" || echo "ERROR running query: $query" >&2; } |
{ grep "^$field" || echo UNKNOWN; } |
sed "s/^$field:[[:space:]]*//; s/[[:space:]]*NULL[[:space:]]*$//"
done

@ -117,6 +117,10 @@ check_bin(){
local bin="${1:-}"
if ! type -P "$bin" &>/dev/null; then
echo "command '$bin' not found in \$PATH ($PATH)"
if is_CI; then
echo "Running in CI, searching entire system for '$bin'"
find / -type f -name "$bin" 2>/dev/null
fi
exit 1
fi
}

@ -102,5 +102,8 @@ else
echo "$sudo $envopts $CPANM --notest $opts $cpan_modules"
# want splitting of opts and modules
# shellcheck disable=SC2086
eval $sudo $envopts "$CPANM" --notest $opts $cpan_modules
if ! eval $sudo $envopts "$CPANM" --notest $opts $cpan_modules; then
find ~/.cpanm/work -type f -name build.log -print0 | xargs -0 ls -tr | tail -n1 | xargs cat
exit 1
fi
fi

@ -0,0 +1,57 @@
#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2020-02-21 09:52:05 +0000 (Fri, 21 Feb 2020)
# forked from pylib's Makefile from:
# Original Date: 2013-01-06 15:45:00 +0000 (Sun, 06 Jan 2013)
#
# https://github.com/harisekhon/bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/harisekhon
#
set -euo pipefail
[ -n "${DEBUG:-}" ] && set -x
sudo=""
[ $EUID -eq 0 ] || sudo=sudo
#$sudo ln -sv `type -P python2` /usr/local/bin/python
set +e
python2="$(type -P python2 2>/dev/null)"
python3="$(type -P python3 2>/dev/null)"
pip2="$(type -P pip2 2>/dev/null)"
pip3="$(type -P pip3 2>/dev/null)"
set -e
if ! type -P python; then
if [ -n "$python3" ]; then
$sudo alternatives --set python "$python3"
elif [ -n "$python2" ]; then
$sudo alternatives --set python "$python2"
fi
fi
if ! type -P pip; then
if [ -f /usr/local/bin/pip ]; then
echo "/usr/local/bin/pip already exists, not symlinking - check your \$PATH includes /usr/local/bin (\$PATH = $PATH)"
elif [ -n "$pip3" ]; then
$sudo ln -sv "$pip3" /usr/local/bin/pip
elif [ -n "$pip2" ]; then
$sudo ln -sv "$pip2" /usr/local/bin/pip
else
$sudo easy_install pip || :
fi
fi
echo
python -V
echo
pip -V
echo

@ -49,6 +49,7 @@ dnsmasq
dnstop
docker-completion
docker-compose-completion
dos2unix
e2fsprogs
expect
etcd
@ -117,6 +118,7 @@ thrift
tree
tmux
urlview # used by tmux plugin tmux-urlview
unix2dos
vagrant-completion
watch
#wget # in brew-packages.txt

@ -25,6 +25,8 @@ python
python-pip
python2
python2-pip
python3
python3-pip
# required in Fedora, but not available in RHEL6
hostname

@ -69,7 +69,23 @@ if [ -z "${packages// }" ]; then
exit 0
fi
packages="$(echo "$packages" | tr ' ' ' \n' | sort -u | tr '\n' ' ')"
packages="$(echo "$packages" | tr ' ' ' \n' | sort -u | sed '/^[[:space:]]*$/d')"
# RHEL8 ruining things with no default python and lots of python package renames
# - handling systematically rather than exploding out all my repos package lists
if [ -n "${NO_FAIL:-}" ]; then
if grep '^REDHAT_SUPPORT_PRODUCT_VERSION="8"' /etc/*release 2>/dev/null; then
if grep -q 'python-' <<< "$packages"; then
# shellcheck disable=SC2001
packages="$packages
$(sed 's/^python-/python2-/' <<< "$packages")
$(sed 's/^python-/python3-/' <<< "$packages")
$(sed '/^python[23]*-/d; s/^/python2-/' <<< "$packages")
$(sed '/^python[23]*-/d; s/^/python3-/' <<< "$packages")"
echo "Expanding Python packages out to: $packages"
fi
fi
fi
SUDO=""
# shellcheck disable=SC2039

Loading…
Cancel
Save