Hadoop~HDFS操作命令与启停脚本

一、一键启停脚本

1.一键启动

  • $HADOOP_HOME/sbin/start-dfs.sh:一键启动HDFS集群
  • 执行原理:
    • 在执行此脚本的机器上,启动SecondaryNameNode
    • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,启动NameNode
    • 读取workers内容,确认DataNode所在机器,启动全部DataNode

2.一键停止

  • $HADOOP_HOME/sbin/stop-dfs.sh:一键关闭HDFS集群
  • 执行原理:
    • 在执行此脚本的机器上,关闭SecondaryNameNode
    • 读取core-site.xml内容(fs.defaultFS项),确认NameNode所在机器,关闭NameNode
    • 读取workers内容,确认DataNode所在机器,关闭全部NameNode

二、单进程启停

1.hadoop-daemon.sh

  • $HADOOP_HOME/sbin/hadoop-daemon.sh:此脚本可以单独控制所在机器的进程的启停
  • 用法:

hadoop-daemon.sh (start|status|stop) (namenode|secondarynamenode|datanode)

2.hdfs

  • $HADOOP_HOME/bin/hdfs:此程序也可以用以单独控制所在机器的进程的启停
  • 用法:

hdfs --daemon (start|status|stop) (namenode|secondarynamenode|datanode)

三、操作命令

1.创建文件夹

  • hadoop fs -mkdir [-p] <path> ...
  • hdfs dfs -mkdir [-p] <path> ...
    • path 为待创建的目录
    • -p选项的行为与Linux mkdir -p一致,它会沿着路径创建父目录。
hdfs dfs -mkdir -p /FeiLink/hadoop

hadoop fs -mkdir -p /EuropeanSheik/hadoop

2.查看指定目录下内容

  • hadoop fs -ls [-h] [-R] [<path> ...]
  • hdfs dfs -ls [-h] [-R] [<path> ...]
    • path 指定目录路径
    • -h 人性化显示文件size
    • -R 递归查看指定目录及其子目录
hdfs dfs -ls /FeiLink

hdfs dfs -ls /EuropeanSheik

3.上传文件到HDFS指定目录下

  • hadoop fs -put [-f] [-p] <localsrc> ... <dst>
  • hdfs dfs -put [-f] [-p] <localsrc> ... <dst>\
    • -f 覆盖目标文件(已存在下)
    • -p 保留访问和修改时间,所有权和权限。
    • localsrc 本地文件系统(客户端所在机器)
    • dst 目标文件系统(HDFS)
hdfs dfs -put /etc/profile /FeiLink/hadoop

hadoop fs -put /etc/profile /EuropeanSheik/hadoop

4.查看HDFS文件内容

  • hadoop fs -cat <src> ...
  • hdfs dfs -cat <src> ...

读取大文件可以使用管道符配合more

  • hadoop fs -cat <src> | more
  • hdfs dfs -cat <src> | more
hdfs dfs -cat /FeiLink/hadoop/profile | more

5.下载HDFS文件

  • hadoop fs -get [-f] [-p] <src> ... <localdst>
  • hdfs dfs -get [-f] [-p] <src> ... <localdst>
  • 下载文件到本地文件系统指定目录,localdst必须是目录
    • -f 覆盖目标文件(已存在下)
    • -p 保留访问和修改时间,所有权和权限。
hdfs dfs -get /FeiLink/hadoop/profile /home/hadoop

6.拷贝HDFS文件

  • hadoop fs -cp [-f] <src> ... <dst>
  • hdfs dfs -cp [-f] <src> ... <dst>
    • -f 覆盖目标文件(已存在下)
hdfs dfs -cp /FeiLink/hadoop/profile /FeiLink/hadoop/profile_bac

7.追加数据到HDFS文件中

  • hadoop fs -appendToFile <localsrc> ... <dst>
  • hdfs dfs -appendToFile <localsrc> ... <dst>
  • 将所有给定本地文件的内容追加到给定dst文件。
  • dst如果文件不存在,将创建该文件。
  • 如果<localSrc>为-,则输入为从标准输入中读取。

[hadoop@node1 ~]$ echo 1 >> 1.txt
[hadoop@node1 ~]$ echo 2 >> 2.txt
[hadoop@node1 ~]$ echo 3 >> 3.txt
[hadoop@node1 ~]$ hdfs dfs -put 1.txt /
[hadoop@node1 ~]$ hdfs dfs -cat /1.txt
1
[hadoop@node1 ~]$ hadoop fs -appendToFile 2.txt 3.txt /1.txt
[hadoop@node1 ~]$ hdfs dfs -cat /1.txt
1
2
3
[hadoop@node1 ~]$

8.HDFS移动数据

  • hadoop fs -mv <src> ... <dst>
  • hdfs dfs -mv <src> ... <dst>
  • 移动文件到指定文件夹下
  • 可以使用该命令移动数据,重命名文件的名称
hdfs dfs -mv /FeiLink/hadoop/profile_bac /FeiLink/hadoop/profile_bac_bac

9.HDFS数据删除

  • hadoop fs -rm -r [-skipTrash] URI [URI ...]
  • hdfs dfs -rm -r [-skipTrash] URI [URI ...]
  • 删除指定路径的文件或文件夹
    • -skipTrash 跳过回收站,直接删除
hdfs dfs -rm -r /FeiLink/hadoop/profile_bac
### 一键动和Hadoop 和 Hive 的脚本 #### Hadoop 的一键脚本Hadoop 安装目录的 `sbin` 文件夹下,存在多个用于管理服务状态的脚本。如果希望一次性HDFS 和 YARN,则可以直接使用 `start-all.sh` 脚本[^1]。 ```bash # HDFS 和 YARN ./start-all.sh ``` 同样地,可以通过 `stop-all.sh` 止所有 Hadoop 组件: ```bash # HDFS 和 YARN ./stop-all.sh ``` 如果不希望通过单个脚本来控制整个集群的状态,还可以单独运行以下命令来分别动或HDFS 和 YARN: - **HDFS**: 使用 `start-dfs.sh`。 - **动 YARN**: 使用 `start-yarn.sh`。 - **HDFS**: 使用 `stop-dfs.sh`。 - **止 YARN**: 使用 `stop-yarn.sh`。 #### Hive 的一键脚本 对于 Hive 来说,其本身并不提供类似于 Hadoop 的一键脚本,但可以通过手动编写 shell 脚本来实现这一功能。以下是两个简单的示例脚本,分别用于动和止 Hive Metastore 及 CLI。 ##### 动 Hive (Metastore 和 CLI) 创建名为 `start-hive.sh` 的脚本文件并添加如下内容: ```bash #!/bin/bash # 动 Hive Metastore 并将其日志重定向至指定位置 nohup hive --service metastore >> /path/to/logs/metastore.log 2>&1 & echo "Hive Metastore 已经成功动" # 或者可以选择进入 Hive Shell 进行交互式查询 hive ``` 注意:这里的路径 `/path/to/logs/` 需要替换为你实际的日志存储地址[^2]。 ##### 止 Hive (仅限于 Metastore) 由于没有官方提供的 stop 脚本,因此需要通过查找进程 ID (PID) 手工终止相应服务。下面是一个简单的方法用来杀死正在运行中的 Hive Metastore 实例: ```bash #!/bin/bash METASTORE_PID=$(ps aux | grep 'org.apache.hadoop.hive.metastore.HiveMetaStore' | grep -v grep | awk '{print $2}') if [ ! -z "$METASTORE_PID" ]; then kill -9 $METASTORE_PID echo "已强制结束 Hive Metastore ($METASTORE_PID)" else echo "未找到任何正在运行的 Hive Metastore" fi ``` 保存以上代码片段为 `stop-hive-metastore.sh` 即可执行关闭操作。 #### 结合两者的一键方案 为了方便起见,可以进一步封装成一个综合性的脚本,统一处理 Hadoop 和 Hive 的止逻辑。这里给出一个基础版本作为参考: ```bash #!/bin/bash case "$1" in start) ./start-all.sh # Start Hadoop services. nohup hive --service metastore >> /path/to/logs/metastore.log 2>&1 & sleep 5 # Wait a few seconds to ensure the service is up before proceeding. beeline -u jdbc:hive2://localhost:10000/default -n username -p password <<< "!connect;" || true ;; stop) ./stop-all.sh # Stop all Hadoop daemons gracefully first. METASTORE_PID=$(pgrep -f org\.apache\.hadop\.hive\.metastore\.HiveMetaStore) if [[ $? -eq 0 ]];then kill -SIGTERM ${METASTORE_PID} while pgrep -qxf "${METASTORE_PID}"; do :; done; fi ;; esac exit 0 ``` 此脚本接受参数 `start` 或 `stop` 控制整体环境的服务状态转换过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值