使用pdsh在集群执行命令(hadoop适用)

本文介绍如何使用pdsh工具批量在集群节点执行命令,包括安装、验证安装、集群实践以及常见FAQ。重点展示了如何通过pdsh与ssh结合实现Hadoop集群的批量启动和关闭操作。

快速了解

这个小工具作用就是批量在集群节点执行命令,比如我想在 node_1至node_9上执行hostname命令:

 

 

/usr/bin/pdsh -R ssh -w node_[1-9] hostname

 

  • -R:指定传输方式,默认为rsh,本例为ssh,如果希望ssh传输需要另行安装pdsh-rcmd-ssh,如果希望ssh无密码访问需要提前配置好。
  • -w:指定待执行命令host,也可以这样配置,node_[1-9, 35,22]
  • command:本例为hostname

 

安装

 

 

# 官方tarball方式:
http://sourceforge.net/projects/pdsh/
wget http://cdnetworks-kr-2.dl.sourceforge.net/project/pdsh/pdsh/pdsh-2.26/pdsh-2.26.tar.bz2
tar -jxf pdsh-2.26.tar.bz2 && cd pdsh-2.26
./configure --with-ssh --without-rsh && make && make install

#yum安装(32位机器我没有找到源,64为机器可以使用rpmforce的源)
yum install pdsh 

 

验证安装:

 

pdsh -V

 如果rcmd modules的值中有ssh说明安装成功了。

 

hadoop集群上的实践

CDH3已经不推荐使用start-all.sh, stop-all.sh管理集群,而是推荐使用script(/etc/init.d/hadoop-0.20-*)方式独立运行集群,这样做的好处是可以把hadoop分为hdfs和mapred两种用户,更好管理权限,但是直到CDH3u1都没有支持批量方式启动、关闭jobtracker和datanode,so,我们可以用pdsh + ssh + shell 实现这个start-all.sh和stop-all.sh的功能,附上我写的脚本,把它放到PATH里,就可以方便使用了:

 

 

sudo /etc/init.d/hadoop-0.20-namenode start
sudo /etc/init.d/hadoop-0.20-jobtracker start
/usr/bin/pdsh -R ssh -w CHN-DG-3-5I[3,4,8,9] "sudo /etc/init.d/hadoop-0.20-datanode start"
/usr/bin/pdsh -R ssh -w CHN-DG-3-5I[3,4,8,9] "sudo /etc/init.d/hadoop-0.20-tasktracker start"

 

FAQ:

Q:使用pdsh执行集群命令有些集群出现错误:“sudo: sorry, you must have a tty to run sudo”

A:找到问题集群,切换大root用户,执行“visudo”,注释掉“Defaults    requiretty”

 

Q: 执行 pdsh -R ssh ...时候报错:“ssh Bad configuration option: ConnectTimeout”,但执行ssh命令是可以的。

A:安装最新版本openssh吧

 

参考:

http://bbs.chinaunix.net/thread-2002080-1-1.html

 

<think>好的,用户想在FinalShell环境下搭建Hadoop分布式集群并安装Spark。我需要先理清楚步骤,然后结合之前的引用内容给出指导。 首先,用户可能已经对Hadoop和Spark有一定了解,但需要具体的配置步骤。根据引用[1],搭建Spark集群需要每个Hadoop节点都安装Spark,所以Hadoop集群应该是已经配置好的。不过用户的问题是关于配置Hadoop分布式集群并安装Spark,所以可能需要从头开始。 接下来,引用[3]和[4]提到了伪分布式和单机版的Spark搭建,但用户需要的是分布式集群。可能需要先配置Hadoop集群,再在每个节点安装Spark,并配置环境变量。同时,引用[2]提到了启动命令和权限问题,需要注意目录权限和启动顺序。 步骤可能包括:准备多台虚拟机,安装Java和SSH,配置主机名和hosts文件,设置SSH免密登录。然后安装Hadoop,配置core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml,格式化HDFS,启动Hadoop集群。之后安装Spark,配置spark-env.sh和slaves文件,启动Spark集群。 需要提醒用户注意各个节点的时间同步、防火墙设置,以及配置文件的正确性。同时,根据引用[2],启动命令需要在正确的目录下执行,并注意权限问题,比如使用hadoop用户操作,避免权限错误。 测试部分可能包括运行Hadoop的wordcount示例和Spark的SparkPi示例,验证集群是否正常工作。最后,关闭集群的顺序也很重要,先停Spark再停Hadoop。 用户可能遇到的问题包括SSH连接失败、配置文件错误、端口冲突、权限不足等,需要给出排查建议,例如检查日志文件、确认服务是否正常启动等。 总结下来,回答的结构应该是分步骤详细说明,结合引用中的注意事项,确保用户能顺利搭建环境。</think>### 在FinalShell中配置Hadoop分布式集群并安装Spark的完整指南 --- #### 一、基础环境准备 1. **虚拟机配置** - 准备3台及以上CentOS 7虚拟机(建议配置:2核CPU/4GB内存/50GB磁盘) - 配置静态IP和主机名(如`hserver1`、`hserver2`、`hserver3`) - 所有节点配置`/etc/hosts`文件,示例: ```bash 192.168.1.101 hserver1 192.168.1.102 hserver2 192.168.1.103 hserver3 ``` - 关闭防火墙和SELinux: ```bash systemctl stop firewalld && systemctl disable firewalld sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config ``` 2. **创建专用用户** ```bash useradd hadoop && echo "hadoop:password" | chpasswd echo "hadoop ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers ``` --- #### 二、Hadoop集群部署 1. **安装依赖** ```bash yum install -y ssh pdsh openssl-devel epel-release ``` 2. **JDK安装** - 所有节点安装JDK 8: ```bash tar -zxvf jdk-8u371-linux-x64.tar.gz -C /usr/local/ echo 'export JAVA_HOME=/usr/local/jdk1.8.0_371' >> /etc/profile echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile source /etc/profile ``` 3. **Hadoop安装配置** - 主节点解压安装包: ```bash tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local/ chown -R hadoop:hadoop /usr/local/hadoop-3.3.6 ``` - 配置关键文件: - `core-site.xml`: ```xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hserver1:9000</value> </property> </configuration> ``` - `hdfs-site.xml`: ```xml <property> <name>dfs.replication</name> <value>2</value> </property> ``` 4. **集群启动** - 格式化HDFS(仅在首次执行): ```bash su - hadoop hdfs namenode -format ``` - 启动HDFS和YARN: ```bash start-dfs.sh && start-yarn.sh # 在hserver1执行[^2] ``` --- #### 三、Spark集群部署 1. **Spark安装** - 所有节点安装Spark 3.4.4: ```bash tar -zxvf spark-3.4.4-bin-hadoop3.tgz -C /usr/local/ chown -R hadoop:hadoop /usr/local/spark-3.4.4-bin-hadoop3 ``` - 配置环境变量: ```bash echo 'export SPARK_HOME=/usr/local/spark-3.4.4-bin-hadoop3' >> /etc/profile source /etc/profile ``` 2. **Spark配置** - 修改`spark-env.sh`: ```bash cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh echo 'export SPARK_MASTER_HOST=hserver1' >> $SPARK_HOME/conf/spark-env.sh ``` - 配置`workers`文件: ```bash echo "hserver1" > $SPARK_HOME/conf/workers echo "hserver2" >> $SPARK_HOME/conf/workers echo "hserver3" >> $SPARK_HOME/conf/workers ``` 3. **启动Spark集群** ```bash cd $SPARK_HOME/sbin ./start-all.sh # 在hserver1执行[^3] ``` --- #### 四、验证部署 1. **Hadoop验证** ```bash hdfs dfs -mkdir /test hdfs dfs -put /etc/passwd /test ``` 2. **Spark验证** ```bash $SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi \ --master spark://hserver1:7077 \ $SPARK_HOME/examples/jars/spark-examples_2.12-3.4.4.jar 100 ``` --- #### 五、服务管理 1. **启动顺序** ```bash # 启动Hadoop start-dfs.sh && start-yarn.sh # [^2] # 启动Spark cd $SPARK_HOME/sbin && ./start-all.sh # [^3] ``` 2. **关闭顺序** ```bash # 先关闭Spark cd $SPARK_HOME/sbin && ./stop-all.sh # [^2] # 再关闭Hadoop stop-yarn.sh && stop-dfs.sh ``` --- #### 六、常见问题排查 1. **SSH连接失败** - 确认`authorized_keys`权限为600 - 检查`/etc/ssh/sshd_config`中`PasswordAuthentication yes`是否启用 2. **Spark启动失败** - 检查`$SPARK_HOME/logs`目录下的日志文件 - 确认所有节点的`SPARK_HOME`路径一致 3. **端口冲突** - 使用`netstat -tunlp | grep <端口号>`检查Hadoop/Spark默认端口占用情况 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值