rsync: mkstemp "/opt/module/hadoop-3.1.3/etc/hadoop/.capacity-scheduler.xml.fvSFHz" failed: Permission denied (13)
时间: 2023-12-20 22:07:10 浏览: 261
这个错误提示是由于权限问题导致的。rsync 是一个文件同步工具,它需要有足够的权限来在目标目录中创建临时文件。在你的情况下,rsync 在目标目录 "/opt/module/hadoop-3.1.3/etc/hadoop/" 中尝试创建临时文件 ".capacity-scheduler.xml.fvSFHz" 时被拒绝了。
要解决这个问题,你可以尝试以下几个方法:
1. 确保你有足够的权限来在目标目录中创建临时文件。你可以使用 `ls -ld /opt/module/hadoop-3.1.3/etc/hadoop/` 命令来检查该目录的权限和所有者。如果你没有足够的权限,可以使用 `chmod` 命令更改目录的权限,或者使用 `chown` 命令更改目录的所有者。
2. 以管理员身份运行 rsync 命令。如果你当前的用户没有足够的权限,你可以尝试使用 `sudo` 命令以管理员身份运行 rsync。
3. 检查目标目录是否已满。如果目标目录已满,可能会导致无法创建临时文件。你可以使用 `df -h` 命令检查磁盘空间使用情况。
希望这些方法能帮助你解决问题!如果还有其他问题,请随时提问。
相关问题
rsync: mkdir "/opt/module/hadoop-3.1.3/etc" failed: No such file or directory (2) rsync error: error in file IO (code 11) at main.c(657) [Receiver=3.1.2]
这个错误是由于 rsync 命令在同步文件时无法创建目录 "/opt/module/hadoop-3.1.3/etc" 导致的。错误提示为 "No such file or directory",即目录不存在。rsync 出现这个错误的原因可能是源目录或目标目录不存在,或者没有足够的权限创建目录。
您可以先确认一下目录 "/opt/module/hadoop-3.1.3" 是否存在。如果不存在,您可以手动创建该目录并重新运行 rsync 命令。如果该目录已经存在,请确保您有足够的权限在该目录下创建子目录。
另外,您也可以使用 --no-relative 参数来避免使用相对路径进行同步,而是直接使用绝对路径。这样可以确保 rsync 在目标目录下正确创建所需的子目录。
希望以上信息对您有所帮助!如果您有任何其他问题,请随时提出。
用空格隔开 如果敲错了 按下ctrl+backspace可以删除 注意一定要有四个)" one two three four if [ ! -n $four ] then echo "Args Number Input Error..." exit; fi}# 获取用户的8个配置文件存放路径和将要安装的目录function getFilesAndTargetDir(){ read -p "请输入你的软件包路径(绝对路径)" softwareDir read -p "请输入你的8个配置文件存放路径(配置文件已修改好 绝对路径)" filesDir read -p "你想要将HA安装在哪个目录下(空目录 绝对路径)" targetDir}function getUserPathFileName(){ read -p "你的环境变量配置文件名:(在/etc/profile.d/下 例如my_path.sh 只要文件名)" pathFileName}# 1 function unpackSoftwarePackage(){ echo "----------一、解压软件包----------" sleep 2 echo "----------1.创建hadoop HA高可用目录:$targetDir/----------" if [ ! -d "$targetDir/" ];then mkdir $targetDir/ fi echo "----------2.解压JDK----------" tar -xzvf $softwareDir/jdk-8u202-linux-x64.tar.gz -C $targetDir/ echo "----------3.解压hadoop----------" tar -xzvf $softwareDir/hadoop-3.1.3.tar.gz -C $targetDir/ echo "----------4.解压zookeeper----------" tar -xzvf $softwareDir/apache-zookeeper-3.5.7-bin.tar.gz -C $targetDir/ echo "----------第一步已完成----------" return 0}# 2 function changeName(){ echo "----------二、改名----------" sleep 2 echo "----------1.重命名Zookeeper----------" mv $targetDir/apache-zookeeper-3.5.7-bin/ $targetDir/zookeeper echo "----------2.重命名JDK----------" mv $targetDir/jdk1.8.0_202/ $targetDir/jdk1.8 echo "----------第二步已完成----------" return 0}# 3function copyConfigurationFiles(){ echo "----------三、修改八个配置文件----------" sleep 2 echo "----------1.修改hadoop下的6个文件----------" cat $filesDir/core-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/core-site.xml cat $filesDir/hdfs-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/hdfs-site.xml cat $filesDir/mapred-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/mapred-site.xml cat $filesDir/yarn-site.xml > $targetDir/hadoop-3.1.3/etc/hadoop/yarn-site.xml cat $filesDir/workers > $targetDir/hadoop-3.1.3/etc/hadoop/workers cat $filesDir/hadoop-env.sh > $targetDir/hadoop-3.1.3/etc/hadoop/hadoop-env.sh echo "----------2.修改zookeeper下的1个文件----------" mv $targetDir/zookeeper/conf/zoo_sample.cfg $targetDir/zookeeper/conf/zoo.cfg cat $filesDir/zoo.cfg > $targetDir/zookeeper/conf/zoo.cfg echo "----------3.修改环境变量----------" cat $filesDir/$pathFileName > /etc/profile.d/$pathFileName source /etc/profile.d/$pathFileName echo "----------4.安装psmisc插件----------" sudo yum install -y psmisc ssh $two "sudo yum install -y psmisc" echo "----------第三步已完成----------" return 0}# 4.function createDir(){ echo "----------四、创建目录----------" sleep 2 echo "----------1.创建zkData高可用目录----------" mkdir $targetDir/zookeeper/zkData touch $targetDir/zookeeper/zkData/myid echo "----------2.创建Hadoop数据临时目录----------" mkdir $targetDir/tmp echo "----------3.创建JournalNode日志目录----------" mkdir $targetDir/logs echo "----------第四步已完成----------" return 0}# 5.function xsyncHA(){ echo "----------五、分发HA目录----------" sleep 2 xsync $targetDir/ echo "----------1.分发环境变量配置文件----------" for i in $two $three $four do sudo scp /etc/profile.d/$pathFileName $i:/etc/profile.d/ done echo "----------2.刷新环境变量----------" for i in $two $three $four do ssh $i "source /etc/profile.d/$pathFileName" done echo "----------第五步已完成----------" return 0}# 6.function changeMyIdOfZK(){ echo "----------六、修改zookeeper的myid 使用ssh方式----------" sleep 2 echo "---------- 修改two的myid文件------------" ssh $two "echo '1' >> $targetDir/zookeeper/zkData/myid" echo "---------- 修改three的myid文件------------" ssh $three "echo '2' >> $targetDir/zookeeper/zkData/myid" echo "---------- 修改four的myid文件------------" ssh $four "echo '3' >> $targetDir/zookeeper/zkData/myid" echo "----------第六步已完成----------"}# 7.function startZKOnThreeNode(){ echo "----------七、启动ZK----------" sleep 2 echo "----------启动zookeeper----------" for i in $two $three $four do echo ---------- zookeeper $i 启动 ------------ ssh $i "$targetDir/zookeeper/bin/zkServer.sh start" done echo "----------第七步已完成----------"}# 8.function startHadoop(){ echo "----------八、启动hadoop----------" sleep 2 echo "----------1.启动JournalNode----------" for i in $one $two $three do echo ---------- hadoop $i JournalNode启动 ------------ ssh $i "hdfs --daemon start journalnode" done echo "----------2.初始化NameNode----------" hdfs namenode -format echo "----------3.初始化Zookeeper----------" ssh $two "hdfs zkfc -formatZK" echo "----------4.启动两个NameNode----------" hdfs --daemon start namenode ssh $two "hdfs namenode -bootstrapStandby" echo "----------5.启动集群----------" start-dfs.sh echo "----------第八步已完成----------" echo "----------Hadoop HA高可用搭建已完成----------"}# 调用上述函数完成安装HAtestReadgetFilesAndTargetDirgetUserPathFileNameunpackSoftwarePackagechangeNamecopyConfigurationFilescreateDirxsyncHAchangeMyIdOfZKstartZKOnThreeNodestartHadoop123
### 编写Bash脚本实现Hadoop HA高可用部署
#### 解压缩软件包并安装
为了自动化解压JDK、Hadoop和ZooKeeper的安装过程,可以利用`tar`命令来完成此操作。假设所有软件包都位于同一目录中,并且目标路径已定义为`$targetDir`。
```bash
#!/bin/bash
# 定义变量
software_dir="/path/to/software"
target_dir="$HOME/installation"
# 创建目标目录
mkdir -p ${target_dir}
# 解压软件包到指定位置
cd ${software_dir}
for package in jdk-*.tar.gz hadoop-*.tar.gz zookeeper-*.tar.gz; do
tar -zxvf "${package}" --strip-components=1 -C "${target_dir}"
done
```
#### 复制配置文件
对于已经预先修改完毕的八个配置文件,可以通过简单的循环结构将其分发给各个组件对应的配置目录下:
```bash
config_files=("core-site.xml" "hdfs-site.xml" "mapred-site.xml" "yarn-site.xml" \
"zoo.cfg" "slaves" "masters" "hadoop-env.sh")
source_config_dir="/path/to/configs"
destination_dirs=(
"${target_dir}/etc/hadoop/"
"${target_dir}/conf/" # 对应于Zookeeper配置
)
for file in "${config_files[@]}"; do
cp "${source_config_dir}/${file}" "${destination_dirs[0]}"
[[ "$file" =~ ^(zoo\.cfg|slaves|masters)$ ]] && cp "${source_config_dir}/${file}" "${destination_dirs[1]}"
done
```
#### 创建必要的工作与日志目录
确保每台机器上都有适当的工作空间和日志记录区域是非常重要的。这一步骤同样适用于集群中的每一台计算机。
```bash
work_log_dirs=(
"/data/nn/datanode"
"/data/jn/journalnode"
"/var/log/hadoop-hdfs"
"/var/log/hadoop-yarn"
"/var/log/hadoop-mapreduce"
)
for dir in "${work_log_dirs[@]}"; do
mkdir -p "${dir}"
chown hdfs:hadoop "${dir}"
done
```
#### 同步HA目录及环境变量
在多节点环境中保持一致性至关重要。这里采用`rsync`工具来进行高效的数据传输;而针对环境变量,则是在`.bashrc`或者类似的shell初始化文件里追加相应的导出语句。
```bash
ha_sync_directories=("/etc/hadoop" "/opt/hadoop/conf")
remote_nodes=("hadoop102" "hadoop103" "hadoop104")
export JAVA_HOME="${target_dir}/jdk"
echo 'export JAVA_HOME=/home/user/installation/jdk' >> ~/.bashrc
for node in "${remote_nodes[@]}"; do
for sync_dir in "${ha_sync_directories[@]}"; do
rsync -avzh --delete "${sync_dir}/" maxwell@"${node}":"${sync_dir}"
done
ssh maxwell@"${node}" << EOF
echo 'export JAVA_HOME=${JAVA_HOME}' >> ~/.bashrc
EOF
done
```
#### 设置Zookeeper `myid` 文件和启动服务
最后,在每个运行着ZooKeeper实例的服务器上设定唯一的ID号,并通过SSH执行远程命令开启JournalNode, NameNode以及ZooKeeper服务[^1]。
```bash
zk_servers=("hadoop102" "hadoop103" "hadoop104")
for idx in {1..3}; do
zk_server="hadoop10$(($idx + 1))"
echo $idx > /tmp/myid
scp /tmp/myid maxwell@${zk_server}:${ZOOKEEPER_HOME}/data/
ssh maxwell@${zk_server} << EOF
${target_dir}/sbin/hadoop-daemon.sh start journalnode
${target_dir}/sbin/hadoop-daemon.sh start namenode
${target_dir}/bin/zkServer.sh start
EOF
done
```
阅读全文
相关推荐








