目录
一、 完全分布式集群(单点)
1 准备3台客户机
1.1防火墙,静态IP,主机名
1.3 添加用户账号
1.4 /opt目录下创建文件夹
2 安装配置jdk1.8
3 安装hadoop集群
3.1 集群部署规划
3.2 设置SSH免密钥
3.3 解压安装hadoop
4 配置hadoop集群
4.1 修改core-site.xml
4.2 修改hadoop-env.sh
4.3 修改hdfs-site.xml
4.4 修改slaves
4.5 修改mapred-env.sh
4.6 修改mapred-site.xml
4.7 修改yarn-env.sh
4.8 修改yarn-site.xml
4.9 分发hadoop到节点
4.10 配置环境变量
5 启动验证集群
5.1 启动集群
5.2 Hadoop启动停止方式
5.3 集群时间同步
二 完全分布式集群(HA)
1 环境准备
2 集群规划
3 安装Zookeeper集群
4 安装配置Hadoop集群
4.1 解压安装Hadoop
4.2 配置Hadoop集群
5 启动集群
6 测试集群
三 配置集群常见错误
1 自动故障转移错误
2HDFS启动警告信息
四 Hadoop集群群启脚本
1启动服务
2脚本
3赋权限给脚本
4其他问题
一、 完全分布式集群(单点)
Hadoop官方地址:Apache Hadoop
1 准备3台客户机
1.1防火墙,静态IP,主机名
关闭防火墙,设置静态IP,主机名此处略,参考 Linux之CentOS7.5安装及克隆
1.2 修改host文件
我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。因此我们在主机的/etc/hosts下均进行如下配置:
[root@node21 ~]# vi /etc/hosts
配置主机host
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.100.21 node21
192.168.100.22 node22
192.168.100.23 node23
将配置发送到其他主机(同时在其他主机上配置)
[root@node21 ~]# scp -r /etc/hosts root@node22:/etc/
[root@node21 ~]# scp -r /etc/hosts root@node23:/etc/
测试
[root@node21 ~]# ping node21
[root@node21 ~]# ping node22
[root@node21 ~]# ping node23
1.3 添加用户账号
在所有的主机下均建立一个账号admin用来运行hadoop ,并将其添加至sudoers中
[root@node21 ~]# useradd admin 添加用户通过手动输入修改密码
[root@node21 ~]# passwd admin 更改用户 admin 的密码
123456 passwd: 所有的身份验证令牌已经成功更新。
设置admin用户具有root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
[root@node21 ~]# visudo
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
admin ALL=(ALL) ALL
修改完毕 :wq! 保存退出,现在可以用admin帐号登录,然后用命令 su - ,切换用户即可获得root权限进行操作。
1.4 /opt目录下创建文件夹
1)在root用户下创建module、software文件夹
[root@node21 opt]# mkdir module
[root@node21 opt]# mkdir software
2)修改module、software文件夹的所有者
[root@node21 opt]# chown admin:admin module
[root@node21 opt]# chown admin:admin software
3)查看module、software文件夹的所有者
[root@node21 opt]# ll
total 0
drwxr-xr-x. 5 admin admin 64 May 27 00:24 module
drwxr-xr-x. 2 admin admin 267 May 26 11:56 software
2 安装配置jdk1.8
[deng@node21 ~]# rpm -qa|grep java #查询是否安装java软件:
[deng@node21 ~]# rpm -e –nodeps 软件包 #如果安装的版本低于1.7,卸载该jdk
在线安装 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
这里使用本地下载然后 xftp上传到 /opt/software/ 下
[root@node21 software]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /opt/module/
[root@node21 module]# mv jdk1.8.0_171 jdk1.8
设置JAVA_HOME
vi /etc/profile
export JAVA_HOME=/opt/module/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin
source /etc/profile
向其他节点复制jdk
[root@node21 ~]# scp -r /opt/module/jdk1.8 root@node22:`pwd`
[root@node21 ~]# scp -r /opt/module/jdk1.8 root@node23:`pwd`
配置各个主机下jdk的环境变量,由于我的电脑上linux都是新安装的,环境变量相同,因此直接复制到了其他主机上。如果不同的主机的环境变量不同,请手动设置
[root@node21 ~]# scp /etc/profile root@node22:/etc/
[root@node21 ~]# scp /etc/profile root@node23:/etc/
在每个主机上都重新编译一下/etc/profile
[root@node21]# source /etc/profile
测试 java -version
3 安装hadoop集群
3.1 集群部署规划
节点名称 | NN1 | NN2 | DN | RM | NM |
node21 | NameNode | DataNode | NodeManager | ||
node22 | SecondaryNameNode | DataNode | ResourceManager | NodeManager | |
node23 | DataNode | NodeManager |
3.2 设置SSH免密钥
关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。 这项操作可以在admin用户下执行,执行完毕公钥在/home/admin/.ssh/id_rsa.pub
[admin@node21 ~]# ssh-keygen -t rsa
[admin@node21 ~]# ssh-copy-id node21
[admin@node21 ~]# ssh-copy-id node22
[admin@node21 ~]# ssh-copy-id node23
node1与node2为namenode节点要相互免秘钥 HDFS的HA
[admin@node22 ~]# ssh-keygen -t rsa
[admin@node22 ~]# ssh-copy-id node22
[admin@node22 ~]# ssh-copy-id node21
[admin@node22 ~]# ssh-copy-id node23
node2与node3为yarn节点要相互免秘钥 YARN的HA
[admin@node23 ~]# ssh-keygen -t rsa
[admin@node23 ~]# ssh-copy-id node23
[admin@node23 ~]# ssh-copy-id node21
[admin@node23 ~]# ssh-copy-id node22
3.3 解压安装hadoop
[admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/
4 配置hadoop集群
注意:配置文件在hadoop2.7.6/etc/hadoop/下
4.1 修改core-site.xml
[admin@node21 hadoop]$ vi core-site.xml
4.2 修改hadoop-env.sh
[admin@node21 hadoop]$ vi hadoop-env.sh
修改 export JAVA_HOME=/opt/module/jdk1.8
4.3 修改hdfs-site.xml
[admin@node21 hadoop]$ vi hdfs-site.xml
4.4 修改slaves
[admin@node21 hadoop]$ vi slaves
node21
node22
node23
4.5 修改mapred-env.sh
[admin@node21 hadoop]$ vi mapred-env.sh
修改 export JAVA_HOME=/opt/module/jdk1.8
4.6 修改mapred-site.xml
[admin@node21 hadoop]# mv mapred-site.xml.template mapred-site.xml
[admin@node21 hadoop]$ vi mapred-site.xml
4.7 修改yarn-env.sh
[admin@node21 hadoop]$ vi yarn-env.sh
修改 export JAVA_HOME=/opt/module/jdk1.8
4.8 修改yarn-site.xml
[admin@node21 hadoop]$ vi yarn-site.xml
4.9 分发hadoop到节点
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:`pwd`
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:`pwd`
4.10 配置环境变量
[admin@node21 ~]$ sudo vi /etc/profile
末尾追加
export HADOOP_HOME=/opt/module/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
编译生效 source /etc/profile
5 启动验证集群
5.1 启动集群
如果集群是第一次启动,需要格式化namenode
[admin@node21 hadoop-2.7.6]$ hdfs namenode -format
启动Hdfs:
[admin@node21 ~]# start-dfs.sh
Starting namenodes on [node21]
node21: starting namenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-namenode-node21.out
node21: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node21.out
node22: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node22.out
node23: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node23.out
Starting secondary namenodes [node22]
node22: starting secondarynamenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-secondarynamenode-node22.out
启动Yarn: 注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。
[admin@node22 ~]# start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-resourcemanager-node22.out
node21: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node21.out
node23: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node23.out
node22: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node22.out
jps查看进程
[admin@node21 ~]# jps
1440 NameNode
1537 DataNode
1811 NodeManager
1912 Jps
[admin@node22 ~]# jps
1730 Jps
1339 ResourceManager
1148 DataNode
1198 SecondaryNameNode
1439 NodeManager
[admin@node23 ~]# jps
1362 Jps
1149 DataNode
1262 NodeManager
web页面访问
5.2 Hadoop启动停止方式
1)各个服务组件逐一启动
分别启动hdfs组件: hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
启动yarn: yarn-daemon.sh start|stop resourcemanager|nodemanager
2)各个模块分开启动(配置ssh是前提)常用
start|stop-dfs.sh start|stop-yarn.sh
3)全部启动(不建议使用)
start|stop-all.sh
5.3 集群时间同步
参考Ntp时间服务器与定时任务Crontab https://www.cnblogs.com/frankdeng/p/9005691.html
二 完全分布式集群(HA)
1 环境准备
1.1 修改IP
1.2 修改主机名及主机名和IP地址的映射
1.3 关闭防火墙
1.4 ssh免密登录
1.5 安装JDK,配置环境变量
2 集群规划
节点名称 | NN | JJN | DN | ZKFC | ZK | RM | NM |
node21 | NameNode | JournalNode | DataNode | ZKFC | Zookeeper | NodeManager | |
node22 | NameNode | JournalNode | DataNode | ZKFC | ZooKeeper | ResourceManager | NodeManager |
node23 | JournalNode | DataNode | ZooKeeper | ResourceManager | NodeManager |
3 安装Zookeeper集群
安装详解参考 : CentOS7.5搭建Zookeeper集群与命令行操作
4 安装配置Hadoop集群
4.1 解压安装Hadoop
解压 hadoop-2.7.6到/opt/module/目录下
[admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/
4.2 配置Hadoop集群
配置文件都在/opt/module/hadoop-2.7.6/etc/hadoop/下
4.2.1 修改hadoop-env.sh, mapred-env.sh ,yarn-env.sh 的JAVA环境变量
export JAVA_HOME=/opt/module/jdk1.8
4.2.2 修改 core-site.xml
[admin@node21 hadoop]$ vi core-site.xml
fs.defaultFS hdfs://mycluster hadoop.tmp.dir /opt/module/hadoop-2.7.6/data/ha/tmp ha.zookeeper.quorum node21:2181,node22:2181,node23:2181
4.2.3 修改hdfs-site.xml
[admin@node21 hadoop]$ vi hdfs-site.xml
dfs.replication 2 dfs.nameservices mycluster dfs.ha.namenodes.mycluster nn1,nn2 dfs.namenode.rpc-address.mycluster.nn1 node21:8020 dfs.namenode.rpc-address.mycluster.nn2 node22:8020 dfs.namenode.http-address.mycluster.nn1 node21:50070 dfs.namenode.http-address.mycluster.nn2 node22:50070 dfs.namenode.shared.edits.dir qjournal://node21:8485;node22:8485;node23:8485/mycluster dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files /home/admin/.ssh/id_rsa dfs.journalnode.edits.dir /opt/module/hadoop-2.7.6/data/ha/jn dfs.permissions.enable false dfs.client.failover.proxy.provider.mycluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.automatic-failover.enabled true
4.2.4 修改mapred-site.xml
[admin@node1 hadoop]# mv mapred-site.xml.template mapred-site.xml
[admin@node1 hadoop]# vi mapred-site.xml
mapreduce.framework.name yarn mapreduce.jobhistory.address node21:10020 mapreduce.jobhistory.webapp.address node21:19888 mapreduce.jobhistory.joblist.cache.size 20000 mapreduce.jobhistory.done-dir ${yarn.app.mapreduce.am.staging-dir}/history/done mapreduce.jobhistory.intermediate-done-dir ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate yarn.app.mapreduce.am.staging-dir /tmp/hadoop-yarn/staging
4.2.5 修改 slaves
[admin@node21 hadoop]$ vi slaves
node21
node22
node23
4.2.6 修改yarn-site.xml
[admin@node21 hadoop]$ vi yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle yarn.resourcemanager.ha.enabled true yarn.resourcemanager.cluster-id rmCluster yarn.resourcemanager.ha.rm-ids rm1,rm2 yarn.resourcemanager.hostname.rm1 node22 yarn.resourcemanager.hostname.rm2 node23 yarn.resourcemanager.zk-address node21:2181,node22:2181,node23:2181 yarn.resourcemanager.recovery.enabled true yarn.resourcemanager.store.class org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
4.2.6 拷贝hadoop到其他节点
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:/opt/module/
[admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:/opt/module/
4.2.7 配置Hadoop环境变量
[admin@node21 ~]$ sudo vi /etc/profile
末尾追加
export HADOOP_HOME=/opt/module/hadoop-2.7.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
编译生效 source /etc/profile
5 启动集群
1)在各个JournalNode节点上,输入以下命令启动journalnode服务:(前提zookeeper集群已启动)
[admin@node21 ~]$ hadoop-daemon.sh start journalnode
[admin@node22 ~]$ hadoop-daemon.sh start journalnode
[admin@node23 ~]$ hadoop-daemon.sh start journalnode
启动Journalnde是为了创建/data/ha/jn,此时jn里面是空的
2)在[nn1]上,对namenode进行格式化,并启动:
[admin@node21 ~]$ hdfs namenode -format
格式化namenode,此时jn里面会产生集群ID等信息
另外,/data/ha/tmp也会产生如下信息
启动nn1上namenode
[admin@node21 current]$ hadoop-daemon.sh start namenode
starting namenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-admin-namenode-node21.out
3)在[nn2]上,同步nn1的元数据信息:
[admin@node22 ~]$ hdfs namenode -bootstrapStandby
4)启动[nn2]:
[admin@node22 ~]$ hadoop-daemon.sh start namenode
5)在[nn1]上,启动所有datanode
[admin@node21 ~]$ hadoop-daemons.sh start datanode
6)查看web页面此时显示
7)手动切换状态,在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode
[admin@node21 ~]$ hadoop-daemin.sh start zkfc
[admin@node22 ~]$ hadoop-daemin.sh start zkfc
或者强制手动其中一个节点变为Active
[admin@node21 data]$ hdfs haadmin -transitionToActive nn1 --forcemanual
Web页面查看
8)自动切换状态,需要初始化HA在Zookeeper中状态,先停掉hdfs服务,然后随便找一台zookeeper的安装节点
[admin@node21 current]$ hdfs zkfc -formatZK
查看,此时会产生一个hadoop-ha的目录
[root@node22 ~]# zkCli.sh
启动hdfs服务,查看namenode状态
[admin@node21 ~]$ start-hdfs.sh
9)验证
(1)将Active NameNode进程kill
kill -9 namenode的进程id
(2)将Active NameNode机器断开网络
service network stop
如果测试不成功,则可能是配置错误。检查zkfc守护进程以及NameNode守护进程的日志,以便进一步诊断问题。
10)启动yarn
(1)在node22中执行:
[admin@node22 ~]$ start-yarn.sh
(2)在node23中执行:
[admin@node23 ~]$ yarn-daemon.sh start resourcemanager
(3)查看服务状态
[admin@node22 ~]$ yarn rmadmin -getServiceState rm1
active
[admin@node22 ~]$ yarn rmadmin -getServiceState rm2
standby
4) 验证高可用(略)
6 测试集群
1)查看进程
[admin@node21 ~]$ start-dfs.sh
[admin@node22 ~]$ start-yarn.sh
[admin@node23 ~]$ yarn-daemon.sh start resourcemanager
[admin@node21 ~]$ jps
11298 NodeManager
10868 DataNode
11065 JournalNode
11210 DFSZKFailoverController
1276 QuorumPeerMain
11470 NameNode
11436 Jps
[admin@node22 ~]$ jps
7168 DataNode
7476 ResourceManager
7941 Jps
7271 JournalNode
1080 QuorumPeerMain
7352 DFSZKFailoverController
7594 NodeManager
7099 NameNode
[admin@node23 ~]$ jps
3554 ResourceManager
3204 DataNode
3301 JournalNode
3606 Jps
3384 NodeManager
1097 QuorumPeerMain
2)任务提交
2.1 上传文件到集群
[admin@node21 ~]$ hadoop fs -mkdir -p /user/admin/input
[admin@node21 ~]$ mkdir -p /opt/wcinput/
[admin@node21 ~]$ vi /opt/wcinput/wc.txt
[admin@node21 ~]$ hadoop fs -put /opt/wcinput/wc.txt /user/admin/input
wc.txt 文本内容为
wc.txt
2.2 上传文件后查看文件存放在什么位置
文件存储路径
[admin@node21 subdir0]$ pwd
/opt/module/hadoop-2.7.6/data/ha/tmp/dfs/data/current/BP-1244373306-192.168.100.21-1527653416622/current/finalized/subdir0/subdir0
查看文件内容
[admin@node21 subdir0]$ cat blk_1073741825
hadoop spark storm
hbase hive sqoop
hadoop flink flume
spark hadoop
2.3 下载文件
[admin@node21 opt]$ hadoop fs -get /user/admin/input/wc.txt
2.4 执行wordcount程序
[admin@node21 ~]$ hadoop jar /opt/module/hadoop-2.7.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /user/admin/input /user/admin/output
下载查看
[admin@node21 wcoutput]$ hadoop fs -get /user/admin/output/part-r-00000
[admin@node21 wcoutput]$ ll
total 4
-rw-r--r-- 1 admin admin 64 May 30 02:58 part-r-00000
[admin@node21 wcoutput]$ cat part-r-00000
flink 1
flume 1
hadoop 3
hbase 1
hive 1
spark 2
sqoop 1
storm 1
三 配置集群常见错误
1 自动故障转移错误
1.1 两台namenode之间不能通信,kill掉一台Active的namenode节点,另外一台standby不能切换Active
查看namenode日志 或者zkfc日志,nn1 连接 nn2 8020失败
原因分析:若服务器是最小化安装CentOS时,有可能系统没有fuster程序,那么跳过这个安装步骤直接进行后面的操作时,将有可能出现以下问题:
node21作为主节点时,kill掉node21上的NameNode和ResourceManager进程时,可以实现故障转移,node22将从stanby状态自动变成active状态;但是当node22作为主节点时,若kill掉node22上的进程,node21上的进程状态却还是stanby,并不能实现故障自动转移。原因是我们在 hdfs-site.xml中配置了当集群需要故障自动转移时采用SSH方式进行,而因为缺少fuster程序,将在zkfc的日志文件中发现如下错误
PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令
Unable to fence service by any configured method
java.lang.RuntimeException: Unable to fence NameNode at node22/192.168.100.22:8020
提示未找到fuster程序,导致无法进行fence,所以可以通过如下命令来安装,Psmisc软件包中包含了fuster程序:
//分别在node21、node22、node23上执行
sudo yum install psmisc
重启Hadoop服务验证成功。
2HDFS启动警告信息
Hadoop2.7.6在安装成功后,start-dfs.sh启动后出现警告提示:
WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
在Hadoop2.7以后的版本中,$HADOOP_HOME/lib/native 包下的文件都改为了64位,不存在版本差异化的问题,这里解决方案是在文件hadoop-env.sh中增加如下一行信息
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
再次启动就没有警告提示了。
四 Hadoop集群群启脚本
1启动服务
zookeeper hadoop
2脚本
1 编写启动集群脚本 vi start-cluster.sh
#!/bin/bash
echo "****************** 开始启动集群所有节点服务 ****************"
echo "****************** 正在启动zookeeper *********************"
for i in admin@node21 admin@node22 admin@node23
do
ssh $i '/opt/module/zookeeper-3.4.12/bin/zkServer.sh start'
done
echo "******************** 正在启动HDFS *******************"
ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/start-dfs.sh'
echo "********************* 正在启动YARN ******************"
ssh admin@node22 '/opt/module/hadoop-2.7.6/sbin/start-yarn.sh'
echo "*************** 正在node21上启动JobHistoryServer *********"
ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/mr-jobhistory-daemon.sh start historyserver'
echo "****************** 集群启动成功 *******************"*
2 编写关闭集群脚本 vi stop-cluster.sh
#!/bin/bash
echo "************* 开在关闭集群所有节点服务 *************"
echo "************* 正在node21上关闭JobHistoryServer *************"
ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/mr-jobhistory-daemon.sh stop historyserver'
echo "************* 正在关闭YARN *************"
ssh admin@node22 '/opt/module/hadoop-2.7.6/sbin/stop-yarn.sh'
echo "************* 正在关闭HDFS *************"
ssh admin@node21 '/opt/module/hadoop-2.7.6/sbin/stop-dfs.sh'
echo "************* 正在关闭zookeeper *************"
for i in admin@node21 admin@node22 admin@node23
do
ssh $i '/opt/module/zookeeper-3.4.12/bin/zkServer.sh stop'
done
3 编写查看集群jps进程脚本utils.sh
#!/bin/bash
echo "************* 开始启动JPS **********"
echo "************* node21的jps **********"
ssh admin@node21 'jps'
echo "************* node22的jps **********"
ssh admin@node22 'jps'
echo "************* node23的jps **********"
ssh admin@node23 'jps'
3赋权限给脚本
chmod +x 脚本名称
4其他问题
Linux执行.sh文件,提示No such file or directory的问题的解决方法:
原因:在windows中写好shell脚本测试正常,但是上传到 Linux 上以脚本方式运行命令时提示No such file or directory错误,那么一般是文件格式是dos格式的缘故,改成unix 格式即可。一般有如下几种修改办法。
1)在Windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)方法
用vi打开该sh文件,输入:
:set ff
回车,显示fileformat=dos,重新设置下文件格式:
:set ff=unix
保存退出:
:wq
再执行,就可以了
猜你喜欢
- 3小时前逻辑回归(Logistic Regression)
- 3小时前5.2 基于深度学习和先验状态的实时指纹室内定位
- 3小时前[Exceptions]运行hive sql报错NoViableAltException
- 3小时前vue中PC端使用高德地图 -- 实现搜索定位、地址标记、弹窗显示定位详情
- 3小时前flex布局优化(两端对齐,从左至右)
- 3小时前ImageNet Classification with Deep Convolutional 论文笔记
- 3小时前智能小程序相关名词解释(汇总)
- 3小时前防火墙部署安全区域
- 3小时前打败一切NeRF! 3D Gaussian Splatting 的 简单入门知识
- 10分钟前悉知是什么意思(悉知是什么意思?知悉又是什么意思?)
网友评论
- 搜索
- 最新文章
- 热门文章