算法工程师打死都要记住的20条常用shell命令
原文同步发表于:算法混子博客
微信公众号文章:算法全栈之路
1. 使用 hadoop 命令查看 dfs上的文件,"\t"分隔
hadoop fs -text hdfs/user/app/data.20210701/* | awk -F '\t' '{ print $1 "\t" $2 }' | less -10
2. 查看 hdfs 上文件的大小,2种方法
(2.1) -du 查看大小 -h (human,以人可以看懂的方式展现)
hadoop fs -du -h /hdfs/user/app/data.20210701
(2.2)有的hadoop 不支持 -h 参数,使用以下的方式,单位MB
hadoop fs -du /hdfs/user/app/data.20210701 | awk -F' ' '{printf "%.2fMB\t\t%s\n", $1/1024/1024,$2}'
3. shell命令中间添加 if 判断语法
hadoop fs -text /hdfs/user/app/data.20210701/* | awk -F'\t' '{if($14 != "-") print $14}' | less -10
4. 统计Hadoop 文件中共有多少列
hadoop fs -text /hdfs/user/app/data.20210701/* | awk -F "\t" '{print NF}' | less -10
5.统计hadoop上文件行数
hadoop fs -text /hdfs/user/app/data.20210701/* | wc -l
以上命令使用 cat sample.txt | 同理可以使用。
6. kill掉集群中的 spark 任务
yarn application -kill application_xxxx
7. kill掉集群中的 MR 任务
hadoop job -kill application_xxxx
8. 查找文件中含有某个字符串的行
cat sample.txt | grep "str_non" | less -10
cat sample.txt | grep -C 5 "str_non" | less -10 # 上下5行
9. 遍历文件中各列,以及隔行,进行判断自定义处理方式
cat sample.txt | awk -F "\t"
'{
cnt=0; for(i=1; i<=num; i++)
{if($i!=0){cnt=1; break}};
if(cnt==1)printf("%s\n",$0)
}'
num=15
10. Linux文件编码转换
#(10.1). 通过
iconv -l
#命令查看,其支持的编码格式还不少,之间可以互相转换
#(10.2). 转换gbk编码文件为utf-8编码文件
#简洁命令:
iconv -f gbk -t utf-8 index.html > aautf8.html
#其中-f指的是原始文件编码,-t是输出编码 index.html 是原始文件 aautf8.html是输出结果文件
#(10.3. 转换gbk编码文件为utf-8编码文件详细命令:
iconv -c --verbose -f gbk -t utf-8 index.html -o index_utf8.html
#-c 指的是从输出中忽略无效的字符, --verbose指的是打印进度信息 -o是输出文件****
11. spark-shell 统计多列覆盖率,该方法非常好用
val df=spark.read.textFile("/hdfs/user/app/data.20210701/*").map(e=>(e.split("\t")(4),e.split("\t")(5))).toDF("appname","flag").cache();
val re=df.agg(
(sum(when($"appname"===("-"),0).otherwise(1))/count("*")).as("appnamec"),
(sum(when($"flag"===("-"),0).otherwise(1))/count("*")).as("flagC")
).show()
12. hadoop 跨集群复制文件
hadoop distcp -su source_ugi -du target_ugi source_path target_path
13. 内网跳板机文件复制命令
scp -r root@ip:/home/workspace/file.txt pwd
14. 批量杀死Linux上含有某个参数的命令
ps -ef |grep "param" | awk '{print $2}'| xargs kill -9
15. 查看当前目录下各个文件大小,同目录
du -h --max-depth=0 *
16. 修改linux上某个目录的权限
chown -R work /home/workspace
17. 查看CPU 相关参数,c++程序员关注线程绑定
# 查看物理CPU个数
cat /proc/cpuinfo|grep "physical id"|sort -u|wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo|grep "cpu cores"|uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo|grep "processor"|wc -l
# 查看CPU的名称型号
cat /proc/cpuinfo|grep "name"|cut -f2 -d:|uniq
# Linux查看某个进程运行在哪个逻辑CPU上
ps -eo pid,args,psr | grep nginx
18. Java环境下jar命令可以解压zip文件,神器!!
# jar 命令解压zip
jar -xvf appinf.zip .
19. python 可以读取parquet文件
# 方法1 , pd接口读取
import pandas as pd
pdata=pd.read_parquet('/hdfs/user/app/data.20210701.parquet', engine='fastparquet')
# 方法2 ,使用fastparquet
from fastparquet import ParquetFile
pf =
ParquetFile('/hdfs/user/app/data.20210701.parquet')
df = pf.to_pandas()
print(df[0:2])
20.取得时间的若干脚本
num=1
[ $# -ge 1 ] && num=$1
day=`date -d "${num} days ago" +'%Y%m%d'`
beforeDay=`date -d "${day} -1 days" +%Y%m%d`
到这里,算法工程师常用shell命令详解就介绍完了,觉得有用就点赞和分享吧~
欢迎扫码关注作者的公众号: 算法全栈之路