AI智能
改变未来

一些日常用到的命令shell,sqoop


shell中的一些命令:

:<<EOF这个命令相当于idea中的/ /,中间的内容相当于被注释掉EOF也可以换成别的字符,只要上下保持一致EOF

文件标识符(fd)
linux中一切都是文件
要对打开的文件进行追踪的话就要对文件进行标识(都是数字0-9)
比如:
‘0’代表标准输入,在前台输入
‘1’代表正确输出,打印在控制台
‘2’代表错误输出,打印到控制台
其他的数字自定义用来进行文件的重定向等功能

1>$2 或者2>$1
这两个命令的理解如下:
在shell中
‘0’代表标准输入,在前台输入
‘1’代表正确输出,打印在控制台
‘2’代表错误输出,打印到控制台
‘>’代表重定向(覆盖)
\’>>\’代表重定向(追加)
执行shell命令打印到控制台的正确内容就是‘1’输出
执行shell命令打印到控制台的报错信息就是‘2’输出
echo 1>a.txt 2>b.txt 的意思是将正确内容覆盖到a.txt 将错误内容覆盖到b.txt
1>&2 正确返回值传递给2输出通道 &2表示2输出通道
如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.
& 是一个描述符,如果1或2前不加&,会被当成一个普通文件。

exit :退出程序
约定0正确
约定大于0的错误,一般用1

删除文件内容:

true >文件名

注意>与文件名之间不可有空格
或者 vim进入编辑器后 :0,&d

command < file
是命令的输入源从file中读取
command > file
是命令的结果输出到文件之中
command >> file
>是覆盖,>>是追加到文件末尾

mkfifo命令
mkfifo [options] file…
有名管道+无名管道=管道
有名管道(FIFO文件):就是 有文件名的管道, 可以用于任意两个进程间的通信
无名管道(pipe文件):就是没有文件名的管道, 只能用于父子进程之间的通信
mkfifo命令创建一个FIFO特殊文件,是一个命名管道(可以用来做进程之间通信的桥梁)

exec
不改变pid的情况下启动欣的进程来执行任务

查询文件大于100M的文件

ll  /home/tangjiawei | awk \'{if($5>104857600)print$9}\'|sed \'/^$/d\'或者ls -lh /home/tangjiawei | awk \'$5 ~ /M|G|T/{print$9}\'|sed \'/^$/d\'

xargs

  • -p 当每次执行一个分隔符(默认的xargs分隔符是空格)的时候询问一次用户。
  • -n num num为个数,表示命令在执行的时候一行用的分隔符的个数,默认是用所有的。
  • -t 表示先打印,然后再执行。
  • -i 一行一行赋值给 {},默认是单行。
  • -r 当xargs的输入为空的时候则停止xargs,不用再去执行了。
  • -L num 从标准输入一次读取 num 行送给 command 命令。
  • -l 同 -L。
  • -d delim delim分隔符,这里修改的是xargs的分隔符。

sqoop命令

注意:oracle在sqoop使用时要分大小写(表名和字段名)

sqoop的命令行只能有一个,不能叠加

–hive-delims-replacement “ ” :可以将mysql中取到的\\n, \\r, and \\01等特殊字符替换为自定义的字符,此处用了空格
–hive-drop-import-delims :可以将mysql中取到的\\n, \\r, and \\01等特殊字符丢弃

–map-column-hive TMSTAMP=String :将sqoop中的java文件转换为hive表中类型 字段名=类型
–map-column-java MEMO=String :将mysql等数据源中的某个字段转换成java文件,在sqoop中 字段名=类型
如果只给-java的话,那么转换到hive中就会是-Java中设置的类型数据
如果只给-hive的话,那么hive中类型改变,可能因为类型不同导致这一列全为null

–table和–query不能一起使用

–as-parquetfile和–target-dir 不能一起使用(当路径中有‘.’的时候)

–hive-import –hive-database test –hive-table abc -split-by id\\
hive的这几个命令与–as-parquetfile 一起用的时候中间不能有‘\\’
–target-dir /user/hive/warehouse/test.db/abc –as-parquetfile
–warehouse-dir 导入的是源表中的一个文件夹,并不是part-0000-0000

如果不指定–hive-import的话就会导入到hdfs上
指定–hive-import也会先导入到hdfs上,然后load到hive表中

#查看所有数据库
bin/sqoop list-databases –connect jdbc:mysql://192.168.100.201:3306 –username ops –password ops_123

#查看所有表 这个的查询表必须指定到数据库
bin/sqoop list-tables –connect jdbc:mysql://192.168.100.201:3306/ops –username ops –password ops_123

#查看表属性
bin/sqoop eval –connect jdbc:mysql://192.168.100.201:3306/ops –username ops –password ops_123
–query “Select COLUMN_NAME, DATA_TYPE From INFORMATION_SCHEMA.COLUMNS Where TABLE_NAME = ‘company’”

eval 就是用来执行sql语句的

-----------------------------------------------| column_name          | data_type            |-----------------------------------------------| id                   | int                  || project_name         | varchar              || data_classification  | varchar              || hive_desc            | varchar              || hive_name            | varchar              || id                   | int                  || bank_name            | varchar              || data_classification  | varchar              || project_name         | varchar              || hive_name            | varchar              |-----------------------------------------------

会将所有表名字是company的字段全部查询出来,不分数据库

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 一些日常用到的命令shell,sqoop