【大数据面试】【框架】Linux命令、Shell工具、常见Shell脚本(群起脚本、数仓导入)...

本文详细介绍了Linux的高级命令,如ps、df、iotop等,用于查看进程、磁盘空间和I/O状态。同时讲解了Shell脚本的编写,包括集群启动、数据仓库与MySQL的导入导出以及数仓内部的导入操作,展示了如何利用awk、sed、cut和sort等工具处理文本文件。此外,还给出了具体的Shell脚本示例。

一、Linux

1、常用高级命令

ps -ef:查看进程详情,ps -ef|grep dae可以搜索指定进程,-e表示环境变量

ps -au:以用户为主的详细格式,显示进程平均占用资源,不包括cmd列

df -h:文件系统的磁盘空间占用情况,表示大文件,-i表示innode索引命名的小文件

iotop:进行输入输出的进程信息,类似iostate表示IO和CPU变化

xargs:将标准输入转为命令行参数,如echo "one two three" | xargs mkdir

tail:文件最后10行,如tail -n +20 notes.log是从20到最后

uptime:查看系统的平均负载,即特定时间间隔内运行队列中的平均进程数(最近1分钟、5分钟、15分钟系统的负载)。

netstat:显示不同端口的进程信息

2、查看磁盘使用情况、查看进程、查看端口号

df -h

top 或 ps

netstat

二、Shell

1、Shell的常用工具(只需要记住名称)

awk(停止flume进程时使用),显示匹配的文件:awk '/101/'    file

sed:使用正则表达式打印文件信息,如sed -n '/^#/!p' /etc/vsftpd/vsftpd.conf

cut:查看指定分割的文字 who|cut -b 3,如:遍历文件夹、读取文件的某几行、截取相应的内容

sort:将文本文件内容加以排序,如sort seq,可以去除重复行-u

2、用Shell写过哪些脚本

(1)集群启动、分发脚本

#!/bin/bash
#涉及到启动停止分支
case $1 in
"start"){
    #涉及到多台服务器
    for i in hadoop102 hadoop103 hadoop104
    do
         ssh $i "每个集群内需要执行的命令"
    done
};;
"stop"){

};;
#表示case块的结束
esac

(2)数仓与MySQL的导入导出sqoop

主要用到sqoop脚本,涉及到

sqoop --连接mysql hadoop102:3306 root qaz123

           --hdfs    路径,存在要删除

          --query   条件过滤,如"select id, name from 表 创建时间 操作时间的过滤" and 命令

     全量:where 1=1

     增量:创建时间

     新增和变化:创建时间或操作时间

    -- 空值处理

    -- 一致性问题

(3)数仓内部的导入

如ODS-->DWD,标准的五步

#!/bin/bash
#2:定义变量,项目名及hive绝对目录
hive=/opt/module/hive/bin/hive
APP=gmall
#3:获取时间
#参数非空
if [-n "$1"]; then
    do_date=$1
else 
    #格式化显示
    do_date=`date -d "-1 day" + %F`
fi
#4:SQL,会变※
sql=" 
先写一天的脚本2020-03-10
遇到表,在表前面加上{$APP}.表名;
遇到事件,把时间替换为$do_date
"
#5:执行SQL
$hive -e "$sql"
<think>我们正在编写一个用于批量启动Kafka集群的脚本。根据引用[2]和引用[3],我们知道Kafka通常通过运行bin目录下的脚本来启动,比如`kafka-server-start.sh`。在集群环境中,我们需要在每个Broker节点上启动Kafka服务。 目标:编写一个可以在多个节点上批量启动Kafka服务的脚本。 思路: 1. 假设我们已经配置了一个Kafka集群,每个节点上的Kafka安装路径相同(例如/opt/module/kafka)。 2. 我们需要一个节点列表(比如一个文件存储所有Kafka节点的主机名或IP)。 3. 使用SSH连接到每个节点,执行启动命令。 4. 启动命令是:`/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties` 注意:引用[3]中提到,Kafka Connect有独立模式(standalone)和分布式模式,但这里我们启动的是Kafka Broker服务,不是Connect。 步骤: 1. 准备一个节点列表文件,例如kafka_nodes.txt,每行一个节点地址。 2. 编写一个Shell脚本,读取该文件,并循环通过SSH在每个节点上执行启动命令。 注意:我们需要配置SSH免密登录,否则脚本执行过程中需要输入密码。 脚本示例(假设已经配置免密登录): ```bash #!/bin/bash # Kafka安装目录,假设每个节点相同 KAFKA_HOME=/opt/module/kafka # 节点列表文件 NODES_FILE="./kafka_nodes.txt" # 读取节点文件,逐行处理 while read node do echo "Starting Kafka on $node" ssh $node "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties" # 检查上一条命令的退出状态 if [ $? -eq 0 ]; then echo "Kafka started successfully on $node" else echo "Error starting Kafka on $node" fi done < $NODES_FILE ``` 注意事项: 1. 确保每个节点上的Kafka配置已经正确设置,特别是`server.properties`中的`broker.id`、`listeners`、`log.dirs`以及`zookeeper.connect`等。 2. 在启动Kafka之前,确保ZooKeeper集群已经启动,因为Kafka依赖于ZooKeeper。 3. 脚本中使用了`-daemon`参数,表示以后台守护进程方式运行。 4. 节点列表文件应该包含所有Kafka节点的主机名或IP,并且每行一个。 另外,引用[4]中提到副本的分布和Leader的均衡,这需要在配置文件中设置`default.replication.factor`(默认副本数)以及创建Topic时指定副本数,同时Kafka会自动分配Leader并尽量均衡。但启动脚本不涉及这些配置,这些配置在`server.properties`中已经设定。 扩展:我们可以类似地编写停止集群的脚本,使用`kafka-server-stop.sh`。 停止脚本示例: ```bash #!/bin/bash KAFKA_HOME=/opt/module/kafka NODES_FILE="./kafka_nodes.txt" while read node do echo "Stopping Kafka on $node" ssh $node "$KAFKA_HOME/bin/kafka-server-stop.sh" if [ $? -eq 0 ]; then echo "Kafka stopped successfully on $node" else echo "Error stopping Kafka on $node" fi done < $NODES_FILE ``` 注意:停止脚本执行时,Kafka进程可能需要一些时间才能停止,可以适当增加等待或重试逻辑。 最后,记得给脚本执行权限:`chmod +x script_name.sh` 以上脚本假设所有节点使用相同的Kafka安装路径,并且配置文件路径也相同。如果不同,需要调整。 根据引用[2],Kafka的安装路径是`/opt/module/kafka`(通过软链接),所以我们使用这个路径。 问题:如果节点上的Kafka安装路径不同,则需要修改脚本,或者使用一个配置文件来为每个节点指定路径。但通常集群环境会保持路径一致。 因此,我们提供了批量启动和停止Kafka集群的脚本编写方法。</think>### Kafka集群批量启动脚本编写指南 以下是编写Kafka集群批量启动脚本的详细步骤和示例代码: #### 核心思路 1. **SSH远程执行**:通过SSH在各节点执行启动命令 2. **并行处理**:使用后台进程同时启动多个节点 3. **状态检查**:验证服务启动状态 4. **依赖管理**:确保ZooKeeper已启动 #### 脚本示例 ```bash #!/bin/bash # kafka-cluster-start.sh # 配置参数 KAFKA_HOME="/opt/module/kafka" # Kafka安装路径[^2] ZK_NODES="zk1:2181,zk2:2181,zk3:2181" # ZooKeeper集群地址 KAFKA_NODES=("kafka-node1" "kafka-node2" "kafka-node3") # Kafka节点列表 # 函数:检查ZooKeeper状态 check_zookeeper() { echo "检查ZooKeeper状态..." $KAFKA_HOME/bin/zookeeper-shell.sh $ZK_NODES <<< "stat" | grep "Mode" if [ $? -ne 0 ]; then echo "错误:ZooKeeper集群未就绪!" exit 1 fi } # 函数:启动单节点Kafka start_kafka_node() { local node=$1 echo "启动节点: $node" ssh $node "$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties" } # 函数:检查启动状态 check_broker_status() { local node=$1 sleep 5 # 等待进程初始化 ssh $node "jps | grep Kafka | wc -l" } # 主流程 check_zookeeper echo "===== 开始启动Kafka集群 =====" for node in "${KAFKA_NODES[@]}"; do start_kafka_node $node & done wait # 等待所有后台任务完成 echo "===== 验证节点状态 =====" for node in "${KAFKA_NODES[@]}"; do count=$(check_broker_status $node) if [ $count -eq 1 ]; then echo "[成功] $node: Broker已运行" else echo "[失败] $node: Broker未启动" fi done ``` #### 关键配置说明 1. **server.properties配置要点**: ```properties broker.id=1 # 每个节点唯一ID listeners=PLAINTEXT://:9092 log.dirs=/kafka-logs # 日志目录 zookeeper.connect=zk1:2181,zk2:2181,zk3:2181 # ZK集群[^4] num.partitions=3 # 默认分区数 default.replication.factor=3 # 默认副本数[^4] ``` 2. **环境要求**: - 所有节点相同Kafka版本[^2] - 配置SSH免密登录 - 开放9092(Kafka)和2181(ZK)端口 #### 使用说明 1. 保存为`kafka-cluster-start.sh` 2. 添加执行权限: ```bash chmod +x kafka-cluster-start.sh ``` 3. 执行脚本: ```bash ./kafka-cluster-start.sh ``` #### 验证集群状态 ```bash # 检查Topic元数据 $KAFKA_HOME/bin/kafka-topics.sh --bootstrap-server kafka-node1:9092 --describe # 查看Broker列表 $KAFKA_HOME/bin/zookeeper-shell.sh $ZK_NODES <<< "ls /brokers/ids" ``` #### 注意事项 1. **副本配置**:生产环境推荐3副本,金融系统可用5副本[^4] 2. **启动顺序**:先启动ZooKeeper集群 3. **权限控制**:脚本需在具有sudo权限的用户下执行 4. **日志监控**:检查`$KAFKA_HOME/logs/server.log`启动日志 > 提示:停止集群可使用`kafka-server-stop.sh`编写类似脚本,注意Kafka的优雅关闭需等待30秒[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值