Hadoop自动化安装shell脚本

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

之前写过一些如何安装Cloudera Hadoop的文章,安装hadoop过程中,最开始是手动安装apache版本的hadoop,其次是使用Intel的IDH管理界面安装IDH的hadoop,再然后分别手动和通过cloudera manager安装hadoop,也使用bigtop-util yum方式安装过apache的hadoop。

安装过程中参考了很多网上的文章,解压缩过cloudera的cloudera-manager-installer.bin,发现并修复了IDH shell脚本中关于puppt的自认为是bug的一个bug,最后整理出了一个自动安装hadoop的shell脚本,脚本托管在github上面: hadoop-install

hadoop安装文章

博客中所有关于安装hadoop的文章列出如下:

  1. 【笔记】Hadoop安装部署

  2. 手动安装Cloudera Hive CDH

  3. 手动安装Cloudera HBase CDH

  4. 手动安装Cloudera Hadoop CDH

  5. 安装impala过程

  6. 从yum安装Cloudera CDH集群

  7. 通过Cloudera Manager安装CDH

hadoop-install

hadoop-install上脚本,all-in-one-install.sh是在一个节点上安装hdfs、hive、yarn、zookeeper和hbase,编写该脚本是为了在本机(fedora19系统)上调试mapreduce、hive和hbase;cluster-install.sh是在多个节点上安装hadoop集群,同样目前完成了hdfs、hive、yarn、zookeeper和hbase的自动安装。

脚本片段

IDH安装脚本中有一些写的比较好的shell代码片段,摘出如下,供大家学习。

检测操作系统版本

( grep -i "CentOS" /etc/issue > /dev/null ) && OS_DISTRIBUTOR=centos
( grep -i "Red[[:blank:]]*Hat[[:blank:]]*Enterprise[[:blank:]]*Linux" /etc/issue > /dev/null ) && OS_DISTRIBUTOR=rhel
( grep -i "Oracle[[:blank:]]*Linux" /etc/issue > /dev/null ) && OS_DISTRIBUTOR=oel
( grep -i "Asianux[[:blank:]]*Server" /etc/issue > /dev/null ) && OS_DISTRIBUTOR=an
( grep -i "SUSE[[:blank:]]*Linux[[:blank:]]*Enterprise[[:blank:]]*Server" /etc/issue > /dev/null ) && OS_DISTRIBUTOR=sles
( grep -i "Fedora" /etc/issue > /dev/null ) && OS_DISTRIBUTOR=fedora

major_revision=`grep -oP '\d+' /etc/issue | sed -n "1,1p"`
minor_revision=`grep -oP '\d+' /etc/issue | sed -n "2,2p"`
OS_RELEASE="$major_revision.$minor_revision"

修改root密码

echo 'redhat'|passwd root --stdin

修改dns

# Set up nameservers.
# http://ithelpblog.com/os/linux/redhat/centos-redhat/howto-fix-couldnt-resolve-host-on-centos-redhat-rhel-fedora/
# http://stackoverflow.com/a/850731/1486325
echo "nameserver 8.8.8.8" | tee -a /etc/resolv.conf
echo "nameserver 8.8.4.4" | tee -a /etc/resolv.conf

修改操作系统时区

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改hosts文件

cat > /etc/hosts <<EOF
127.0.0.1       localhost

192.168.56.121 cdh1
192.168.56.122 cdh2
192.168.56.123 cdh3
EOF

去掉b文件中包括a文件的内容

grep -vf a b >result.log

修改file-max

echo -e "Global file limit ..."
rst=`grep "^fs.file-max" /etc/sysctl.conf`
if [ "x$rst" = "x" ] ; then
	echo "fs.file-max = 727680" >> /etc/sysctl.conf || exit $?
else
	sed -i "s:^fs.file-max.*:fs.file-max = 727680:g" /etc/sysctl.conf
fi

生成ssh公要

[ ! -d ~/.ssh ] && ( mkdir ~/.ssh ) && ( chmod 600 ~/.ssh )
yes|ssh-keygen -f ~/.ssh/id_rsa -t rsa -N "" && ( chmod 600 ~/.ssh/id_rsa.pub )

ssh设置无密码登陆

set timeout 20

set host [lindex $argv 0]
set password [lindex $argv 1]
set pubkey [exec cat /root/.ssh/id_rsa.pub]
set localsh [exec cat ./config_ssh_local.sh]

#spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$host
spawn ssh root@$host "
umask 022
mkdir -p  /root/.ssh
echo \'$pubkey\' > /root/.ssh/authorized_keys
echo \'$localsh\' >  /root/.ssh/config_ssh_local.sh
cd /root/.ssh/; sh config_ssh_local.sh
"
expect {
	timeout exit
	yes/no  {send "yes\r";exp_continue}
	assword {send "$password\r"}
}
expect eof
#interact

配置JAVA_HOME

### JAVA_HOME ###
if [ -f ~/.bashrc ] ; then
    sed -i '/^export[[:space:]]\{1,\}JAVA_HOME[[:space:]]\{0,\}=/d' ~/.bashrc
    sed -i '/^export[[:space:]]\{1,\}CLASSPATH[[:space:]]\{0,\}=/d' ~/.bashrc
    sed -i '/^export[[:space:]]\{1,\}PATH[[:space:]]\{0,\}=/d' ~/.bashrc
fi
echo "" >>~/.bashrc
echo "export JAVA_HOME=/usr/java/latest" >>~/.bashrc
echo "export CLASSPATH=.:\$JAVA_HOME/lib/tools.jar:\$JAVA_HOME/lib/dt.jar">>~/.bashrc
echo "export PATH=\$JAVA_HOME/bin:\$PATH" >> ~/.bashrc

alternatives --install /usr/bin/java java /usr/java/latest 5
alternatives --set java /usr/java/latest 
source ~/.bashrc

格式化集群

su -s /bin/bash hdfs -c 'yes Y | hadoop namenode -format >> /tmp/format.log 2>&1'

创建hadoop目录

su -s /bin/bash hdfs -c "hadoop fs -chmod a+rw /"
while read dir user group perm
do
     su -s /bin/bash hdfs -c "hadoop fs -mkdir -R $dir && hadoop fs -chmod -R $perm $dir && hadoop fs -chown -R $user:$group $dir"
     echo "."
done << EOF
/tmp hdfs hadoop 1777 
/tmp/hadoop-yarn mapred mapred 777
/var hdfs hadoop 755 
/var/log yarn mapred 1775 
/var/log/hadoop-yarn/apps yarn mapred 1777
/hbase hbase hadoop 755
/user hdfs hadoop 777
/user/history mapred hadoop 1777
/user/root root hadoop 777
/user/hive hive hadoop 777
EOF

hive中安装并初始化postgresql

yum install postgresql-server postgresql-jdbc -y >/dev/null
chkconfig postgresql on
rm -rf /var/lib/pgsql/data
rm -rf /var/run/postgresql/.s.PGSQL.5432
service postgresql initdb

sed -i "s/max_connections = 100/max_connections = 600/" /var/lib/pgsql/data/postgresql.conf
sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/data/postgresql.conf
sed -i "s/shared_buffers = 32MB/shared_buffers = 256MB/" /var/lib/pgsql/data/postgresql.conf
sed -i "s/127.0.0.1\/32/0.0.0.0\/0/" /var/lib/pgsql/data/pg_hba.conf

sudo cat /var/lib/pgsql/data/postgresql.conf | grep -e listen -e standard_conforming_strings

rm -rf /usr/lib/hive/lib/postgresql-jdbc.jar
ln -s /usr/share/java/postgresql-jdbc.jar /usr/lib/hive/lib/postgresql-jdbc.jar

su -c "cd ; /usr/bin/pg_ctl start -w -m fast -D /var/lib/pgsql/data" postgres
su -c "cd ; /usr/bin/psql --command \"create user hiveuser with password 'redhat'; \" " postgres
su -c "cd ; /usr/bin/psql --command \"CREATE DATABASE metastore owner=hiveuser;\" " postgres
su -c "cd ; /usr/bin/psql --command \"GRANT ALL privileges ON DATABASE metastore TO hiveuser;\" " postgres
su -c "cd ; /usr/bin/psql -U hiveuser -d metastore -f /usr/lib/hive/scripts/metastore/upgrade/postgres/hive-schema-0.10.0.postgres.sql" postgres
su -c "cd ; /usr/bin/pg_ctl restart -w -m fast -D /var/lib/pgsql/data" postgres

总结

更多脚本,请关注github:hadoop-install,你可以下载、使用并修改其中代码!

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
2天前
|
机器学习/深度学习 运维 Devops
自动化运维:从脚本到DevOps的演进之路
【7月更文挑战第24天】本文旨在探讨自动化运维的发展轨迹,从早期的脚本编写到现代DevOps实践的转变。文章将分析自动化工具如何提高运维效率,促进开发与运维之间的协作,并展望自动化运维的未来趋势。通过实际案例和技术解析,读者将获得对自动化运维深入理解及其在企业中实施的指导。
29 14
|
3天前
|
机器学习/深度学习 边缘计算 人工智能
自动化运维的演进之路:从脚本到智能化
本文将探讨自动化运维的发展历程,从最初的脚本编写到现今的智能化运维平台。文章将详细阐述每个阶段的关键特点、技术进步以及面临的挑战,并展示这些变革如何提升运维效率和质量。我们将通过具体案例分析,揭示自动化运维在现代IT基础设施管理中的核心作用,同时预测未来的发展趋势。 【7月更文挑战第23天】
22 9
|
3天前
|
机器学习/深度学习 运维 监控
运维自动化的进阶之路:从脚本到智能
本文将深入探讨运维自动化的演变,从早期的脚本编写到现今的智能化实践。文章将通过具体案例和统计数据,展示自动化工具如何提升运维效率,并分析其在现代IT架构中的应用。我们将讨论自动化策略的实施过程,包括选择合适的工具、制定标准化流程、以及评估自动化效果的方法。最后,文章将预测未来运维自动化的趋势,并就如何构建一个高效、可靠的自动化运维系统提供建议。
|
16天前
|
数据采集 存储 监控
python 10个自动化脚本
【7月更文挑战第10天】
37 3
|
15天前
|
机器学习/深度学习 数据采集 人工智能
探索自动化测试的边界:从脚本到智能
在软件开发领域,自动化测试已成为确保产品质量和提升开发效率的关键因素。随着人工智能和机器学习技术的飞速发展,传统的自动化测试方法正面临重大的变革。本文将从多个角度分析自动化测试的现状与未来趋势,探讨如何通过集成先进的技术手段优化测试流程,并预测自动化测试领域的发展方向。
27 1
|
19天前
|
数据采集 数据处理 数据安全/隐私保护
Python的自动化脚本可以完成哪些任务?
【7月更文挑战第7天】Python的自动化脚本可以完成哪些任务?
24 3
|
21天前
|
SQL 分布式计算 关系型数据库
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
27 2
|
21天前
|
Shell Linux
Linux Shell 脚本入门教程:开启你的自动化之旅
Shell是一种计算机程序,它充当了用户与操作系统之间的接口。在Linux系统中,Shell允许用户通过命令行界面(CLI)来控制计算机。Shell脚本则是一种使用Shell语言编写的脚本,它可以自动执行一系列的命令,帮助用户实现任务自动化,提高工作效率。
|
21天前
|
机器学习/深度学习 运维 物联网
自动化运维的进阶之路:从脚本到智能化
在数字化转型的浪潮中,自动化运维不再是可选项,而是企业持续竞争力的核心要素。本文旨在探讨自动化运维的演变轨迹,分析从基础脚本编写到复杂系统整合、再到智能化运维平台的跃迁过程中的关键技术和实践挑战,并提供面向未来的策略建议。
|
21天前
|
Ubuntu Linux
Linux软件安装-Linux系统靠yum命令安装软件,yum命令是一个RPM包软件管理器,用于自动化安装配置Linux软件,.rpm是Linux包下的软件,yum install下载 wget re
Linux软件安装-Linux系统靠yum命令安装软件,yum命令是一个RPM包软件管理器,用于自动化安装配置Linux软件,.rpm是Linux包下的软件,yum install下载 wget re