【CDN+】 一些常用的Linux命令,crontab+VI+Hive(持续更新)
前言
本文主要是记录下工作中可能用到的一些linux指令,当作字典查用
Crontab 基本命令
# 安装
yum -y install vixie-cron crontabs
#查看状态
service crond status
#启动
service crond start
#关闭
service crond stop
#重启
service crond restart
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
-e 编辑 -l 是列表 -r 是删除
ctrl+z 可以不保存退出
进入crontab文件后,默认使用的是VI编辑器,下面是VI编辑器的常用命令(蓝色部分的够用了)
VI编辑器基本命令
| 模式切换的方法 | ||||
| a | 在当前光标位置之后插入内容。 | |||
| A | 在光标所在行的末尾(行尾)插入内容。 | |||
| i | 在当前光标位置之前插入内容。 | |||
| I | 在光标所在行的开头(行首)插入内容。 | |||
| o | 在光标所在行的后面插入一个新行。 | |||
| O | 在光标所在行的前面插入一个新行。 | |||
| 指令行的储存、离开等指令 | ||||
| :w | 保存文件及退出vi编辑器 | |||
| :w /root/XXX | 将当前编辑的文件另存到/root目录下,文件名为XXX。 | |||
| :q | 退出编辑器。 | |||
| :q! | 不保存并退出。 | |||
| :wq或x | 保存并退出。 | |||
| :set nu | 显示行号,设定之后,会在每一行的前缀显示该行的行号 | |||
| :set nonu | 与 set nu 相反,为取消行号! | |||
| 移动光标方法 | ||||
| 光标方向的移动 | 使用键盘中的四个方向键↑、↓、←、→完成相应的光标移动。 | |||
| + 光标移动到非空格符的下一行 | ||||
| - 光标移动到非空格符的上一行 | ||||
| H 光标移动到这个屏幕的最上方那一行的第一个字符 | ||||
| M 光标移动到这个屏幕的中央那一行的第一个字符 | ||||
| L 光标移动到这个屏幕的最下方那一行的第一个字符 | ||||
| n<Enter> n 为数字。光标向下移动 n 行(常用) | ||||
| 翻页移动 | 使用Page Down键或Ctrl+F组合键向下翻动一整页内容。 | |||
| 使用Page Up键或Ctrl+B组合键向上翻动一整页内容。 | ||||
| 使用Page Down键和Page Up键同样适用于vi的输入模式。 | ||||
| 行内快速跳转 | 按Home键或^键、数字0键将光标快速跳转到本行的行首。 | |||
| 按End键或$键将光标快速跳转到本行的行尾。 | ||||
| 行间快速跳转 | 使用按键命令1G或者gg可跳转到文件内容的第1行。 | |||
| 使用按键命令G可跳转到文件的最后一行。 | ||||
| 使用按键命令#G可跳转到文件中的第#行(其中“#”号用具体数字替换)。 | ||||
| 复制 | yy 复制光标所在的那一行。 | |||
| nyy n 为数字。复制光标所在的向下 n 行。 | ||||
| yG 复制光标所在行到最后一行的所有数据。 | ||||
| y1G 复制光标所在行到第一行的所有数据。 | ||||
| y0 复制光标所在的那个字符到该行行首的所有数据。 | ||||
| y$ 复制光标所在的那个字符到该行行尾的所有数据。 | ||||
| 粘贴 | 按p键即可将缓冲区中的内容粘贴到光标位置处之后。 | |||
| 按P键则会粘贴到光标位置处以前。 | ||||
| 删除 | 使用x键或Del按键删除光标处的单个字符。 | |||
| 使用dd删除当前光标所在行。 | ||||
| 使用#dd删除从光标处开始的#行内容。 | ||||
| 使用d^删除当前光标之前到行首的所有字符。 | ||||
| 使用d$删除当前光标处行尾的所有字符。 | ||||
| 查找文件内容 | 在命令模式中,按/键后可以输入指定的字符串,从当前光标处开始向后进行查找(如果按?键则向前查找)完成查找后可以按n、N键在不同的查找结果中进行选择。 | |||
Hive 数据库操作
hive为每一个数据库创建一个目录,这个数据库中的表将会以子目录的形式放在这个数据库目录下
创建数据库
- create database foo;
- create database if not exists foo;
创建数据库时指定位置,这个位置一般是在hdfs上的位置:
- create database foo location '/db/foo';
查看已经创建的数据库:
- show databases ; show databases like 'foo.*';
查看创建数据库的语句:
- show create database foo ;
给数据库添加描述信息:
- create database dbname comment 'dbname描述信息';
# 删除数据库,这种删除,需要将数据库中的表全部删除,才能删除数据库
- drop database dbname;
- drop database if exists dbname;
# 强制删除数据库
- drop database dbname cascade;
- desc database dbname; 输出了 db_name | comment | location | owner_name | owner_type | parameters
使用hive数据库:
- use database名称;
- show tables;
- show tables like 'tb_*';
- show tables 'tb_*';
显示表的分区
- show partitions tb_test;
显示表的详细信息
- desc tb_name;
简单的表创建
- create table tb_test(name string, age int);
典型的表创建:
create [external] table [if not exists] table_name (
col_name data_type [comment '字段描述信息']
col_name data_type [comment '字段描述信息'])
[comment '表的描述信息']
[location '指定表的路径']
[partitioned by (col_name data_type,...)]
[clustered by (col_name,col_name,...)]
[sorted by (col_name [asc|desc],...) into num_buckets buckets]
[row format row_format]
[location location_path]
指定字段分隔符
- create table tb_test(name string,age int) row format delimited fields terminated by ',';
创建外部表
- create external table tb_test(name string,age int)row format delimited fields terminated by ',';
创建带桶的表
create table student(id int,name string,age int)
partitioned by (sex string)
clustered by(id)
sorted by (age) into 2 buckets
row format delimited fields terminated by ',';
- drop table tb_name;
- drop table if exists tb_name;
# 按照sex='male',sex='female'进行分区
- alter table student add partition(sex='male') partition(sex='female');
删除分区
- alter table student drop partition(sex='male');
增加列
- alter table student add columns (rank string);
- alter table student replace columns (height string);
Hive中可以使用-f文件名方式执行指定文件中的一个或者多个查询语句,一般这些查询文件保存为.q和.hql后缀名的文件
- $hive -f /path/to/file/withqueries.hql
shutdown -h now --立即关机
shutdown -h 10:53 --到10:53关机,如果该时间小于当前时间,则到隔天
shutdown -h +10 --10分钟后自动关机
shutdown -r now --立即重启
shutdown -r +30 'The System Will Reboot in 30 Mins' --30分钟后重启并并发送通知给其它在线用户
Hive 基本的DDL
// 查看数据库
show databases; // 使用数据库
use srm; // 显示所有的函数
show functions; // 查看函数用法
describe function substr; // 查看当前数据库下
show tables; // 查看表结构
desc invoice_lines; // 查看某个表的分区情况
show partitions invoice_lines; // 创建表
CREATE TABLE IF NOT EXISTS srm.invoice_lines_temp2(
SOURCE_SYS_KEY string comment '' ,
LEGAL_COMPANY string comment '' ,
VENDOR_NAME string comment '' ,
INVOICE_UNIT_PRICE double comment '' ,
PREPAY_UNAPPLIED double comment '' ,
GR_NON_VALUATED string comment ''
)partitioned by(jobid string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
// LOCATION 用于指定表的数据文件路径
# LOCATION 'hdfs://cdh5/tmp/invoice/'; // 根据某张表,创建一张机构一样的表
create table invoice_lines_temp2 like invoice_lines; // 创建外部表
CREATE EXTERNAL TABLE tinvoice_lines(id STRING, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/data/test/test_table'; // 删除表,如果是外部表,只会删除元数据(表结构),不会删除外部文件中
drop table invoice_lines; // 删除表的某个分区
alter table srm.invoice_lines_temp2 drop partition(jobid='JOBID'); // 删除外部表数据文件以及目录
DFS -rm -r /data/test/test_table; // 更新表
ALTER TABLE invoice_lines RENAME TO invoice_lines2;
ALTER TABLE invoice_lines ADD COLUMNS (new_col2 INT COMMENT '内容'); // 清空表,比delete快很多,在mysql中会连索引记录都清空。delete会记录日志,truncate 不会记录日志?
truncate table invoice_lines; // 删除记录
delete from invoice [where xxx = yyy]
Hive 数据导入
-----------------------------------------有关于数据导入------------------------------------------ // 导入本地文件数据到Hive表
load data local inpath '/apps/data/test1.txt' into table invoice_lines; // 导入HDFS文件数据到Hive表
load data inpath '/hdfs/app/data/test.txt' into table invoice_lines; // 从别的表中查询出相应的数据并导入到Hive表中,注意列数目一定要相同
insert into table invoice_lines select * from invoice_lines_temp2;
// 导入到指定分区表,注意列数目一定要相同
insert into table invoice_lines partition(jobid='') select xx1,xx2,xx3 from invoice_lines_temp2 where jobid='';
// 导入到指定分区表,采用动态分区的方式,注意列数目一定要相同
insert into table invoice_lines partition(jobid) select * from invoice_lines_temp2;
// Hive还支持多表插入,即把FROM 写到前面
FROM invoice insert into table invoice_temp1 select xx,xx2 insert into table invoice_temp2 select xx4,xx6; // 项目上用到的一些写法
INSERT OVERWRITE TABLE srm.invoice_lines_temp2 PARTITION(jobid) SELECT sour_t.* FROM srm.invoice_lines_temp2 sour_t WHERE jobid = '';
INSERT INTO TABLE srm.invoice_lines SELECT * FROM srm.invoice_lines_temp2 WHERE jobid = '';
INSERT OVERWRITE TABLE srm.invoice_lines_temp2 PARTITION(jobid) SELECT * FROM srm.invoice_lines_temp2 WHERE jobid='' AND 1 = 1;
INSERT OVERWRITE TABLE srm.invoice_lines_temp2 PARTITION(jobid)
SELECT temp.* FROM srm.invoice_lines_temp2 temp JOIN
(
SELECT
source_sys_key,
legal_company,
count( DISTINCT concat_ws( '', concat( invoice_line_type ), concat( invoice_head_id ) ) )
FROM
srm.invoice_lines_temp2
WHERE jobid = ''
GROUP BY
source_sys_key,
legal_company
HAVING
count( DISTINCT concat_ws( '', concat( invoice_line_type ), concat( invoice_head_id ) ) ) = 1
) t0 ON (temp.source_sys_key = t0.source_sys_key AND temp.legal_company = t0.legal_company )
where temp.jobid = ''; // 在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中
create table invoice_temp1 AS select xx1,xx2,xx3 from invoice; -----------------------------------------有关于数据导入------------------------------------------ // 删除表中数据,但要保持表的结构定义
dfs -rmr /user/hive/warehouse/srm/invoice_lines; // 创建外部表
CREATE EXTERNAL TABLE tinvoice_lines(id STRING, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/data/test/test_table';
// 导入数据到表中(文件会被移动到仓库目录/data/test/test_table)
load data inpath '/test_tmp_data.txt' INTO TABLE tinvoice_lines; hive -e "load data local inpath '${SOURCE_PATH}/${SourceFileNameNochar}' overwrite into table srm.invoice_lines_temp1 partition(jobid='${JOBID}');"
Sqoop 的导入导出
// 测试数据库连接
sqoop eval --connect jdbc:mysql://192.168.180.11/angel --username root--password root // MySQL导入到Hive
sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password 123456 --table person -m 1 --hive-import // 导出该某Hive表所有数据到MySQL
sqoop export --connect jdbc:mysql://192.168.11.172:16408/ztsrm --username srm --password handhand --table invoice_lines --export-dir /apps/hive/warehouse/srm.db/invoice_lines_temp2/jobid=106 --input-fields-terminated-by ',' --input-null-string "\\\\N" --input-null-non-string "\\\\N" // 导出该某Hive表指定分区数据到MySQL
sqoop export --connect jdbc:mysql://192.168.11.172:16408/ztsrm --username srm --password handhand --table invoice_lines --export-dir /apps/hive/warehouse/srm.db/invoice_lines_temp2 --input-fields-terminated-by ',' --input-null-string "\\\\N" --input-null-non-string "\\\\N"
插入表
INSERT INTO TABLE srm.invoice_lines_temp2 PARTITION (jobid = '') (
source_sys_key,
status,
material_group
)
SELECT
'${GROUP_NAME}' source_sys_key,
(
CASE
WHEN column28 IN ( '', 'P', 'V' ) THEN 'VERIFIED'
ELSE column28
END
) status,
IF(column30 IS NULL, '', regexp_replace ( column30, '"', '' ) ) material_group
FROM
srm.invoice_lines_temp1 WHERE jobid = '';
动态分区表
INSERT OVERWRITE TABLE srm.invoice_lines_temp2 PARTITION(jobid)
SELECT
sour_t.*
FROM
srm.invoice_lines_temp2 sour_t where jobid=''; // 是否启动动态分区,默认false
SET hive.exec.dynamic.partition=true;
// 打开动态分区后,动态分区的模式,有 strict和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict则无此要求
SET hive.exec.dynamic.partition.mode=nonstrict;
Python 脚本创建Hive 表
import pymysql
import codecs def getSingleSQL(table,schema = 'srm',ispartition = False):
# table = 为表名,mysql, hive表名一致
# schema = 为hive中的库名
# ispartition : 是否分区默认为分区 create_head = 'CREATE TABLE IF NOT EXISTS {0}.{1}('.format(schema,table) + '\n'
create_tail = 'ROW FORMAT DELIMITED FIELDS TERMINATED BY \',\' ; \n\n'
connection=pymysql.connect(host='192.168.11.172', port=16408, user='srm', password='handhand', db='srm', charset='utf8')
try:
with connection.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
sql='SHOW FULL FIELDS FROM {0}'.format(table)
cursor.execute(sql)
try:
for row in cursor:
if 'bigint' in row['Type']:
row['Type'] = "bigint"
elif 'int' in row['Type'] or 'tinyint' in row['Type'] or 'smallint' in row['Type'] or 'mediumint' in row['Type'] or 'integer' in row['Type']:
row['Type'] = "int"
elif 'double' in row['Type'] or 'float' in row['Type'] or 'decimal' in row['Type']:
row['Type'] = "double"
else:
row['Type'] = "string"
create_head += row['Field'] + ' '+ row['Type'] +' comment \'' + row['Comment'] + '\' ,\n'
except:
print('程序异常!')
finally:
connection.close()
singleSQL = create_head[:-2] + '\n' + ')'+ create_tail
return singleSQL def getTotalSQL():
connection=pymysql.connect(host='192.168.11.172', port=16408, user='srm', password='handhand', db='srm', charset='utf8')
try:
with connection.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
sql='SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=\'SRM\' AND TABLE_TYPE=\'BASE TABLE\' '
cursor.execute(sql)
try:
for row in cursor:
print(row)
tableName = row['TABLE_NAME']
singleSQL = getSingleSQL(tableName)
f = open('create_hive_table.sql', 'a', encoding='utf-8')
f.write(singleSQL)
except:
print('程序异常了哦!')
finally:
connection.close() getTotalSQL()
【CDN+】 一些常用的Linux命令,crontab+VI+Hive(持续更新)的更多相关文章
- Linux 命令备忘(持续更新中……)
Linux命令 grep 1. 使用grep 筛选内容,多条件筛选用 grep - E "条件1|条件2" (满足条件1或条件2的均展示) 2. grep '条件3'|grep - ...
- 常用linux命令合集(持续更新中)
我的博客:www.while0.com 开发调试 readelf-a 查看elf文件中的内容 hexdump -C 用16进制查看文件 objdump -d 反汇编目标文件 nm 查看目标文件或者可执 ...
- 工作中常用的Linux命令:crontab命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6060252.html (转载请注明出处) crontab是一个用来设置.删除或显示供守护进程cron执行的定时 ...
- 每天一个linux命令(61):vi命令 /企业常用的linux命令清单
vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是一般模式.编辑模式与指令列命令模式. 这三种模式的作用分别是: 一般模式:以 vi 打开一个档案就直接进入一般模式了(这是默认的模式) ...
- 开发过程中常用的Linux命令
做Java开发好几年了,部署JavaWeb到服务器上,一般都选择Linux,Linux作为服务器真是不二之选,高性能,只要熟悉Linux,操作快捷,效率很高. 总结一下工作中常用的Linux命令备忘: ...
- 初学者常用的LINUX命令
测试初学者常用的LINUX命令 一.常用管理命令:1. shutdown -h now 关机命令2. shutdown -r now (reboot) 立即重启命令 3. clear 清屏命令 4. ...
- java web项目在linux部署、启动,查看系统配置常用的linux命令总结
本文为博主原创,未经允许不得转载: 以下为在工作中常用的linux命令进行了总结,主要在项目安装及启动,及编辑部署文件时应用较多1.gz文件是一种压缩文件. 以·tar.gz为扩展名的是一种压缩文件, ...
- 20条最最常用的Linux命令讲解
玩过Linux的人都会知道,Linux中的命令的确是非常多,但是玩过Linux的人也从来不会因为Linux的命令如此之多而烦恼,因为我们只需要掌握我们最常用的命令就可以了.当然你也可以在使用时去找一下 ...
- monkey测试工具与常用的linux命令
Monkey测试工具 说明:monkey是一个安卓自带的命令行工具,可以模拟用户向应用发起一定的伪随机事件.主要用于对app进行稳定性测试与压力测试. 实现:首先需要安装一个ADB工具,安装完之后,需 ...
- 工作中常用的Linux命令:mkdir命令
本文链接:http://www.cnblogs.com/MartinChentf/p/6076075.html (转载请注明出处) 在Linux系统中,mkdir命令用来创建一个目录或一个级联目录. ...
随机推荐
- 尝试Vue3.0
Composition API 纯函数式 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- Java学习day5程序控制流程二
循环结构: 循环语句的四个组成部分:1.初始化部分(init_statement) 2.循环条件部分(test_exp) 3.循环体部分(body_statement) 4.迭代部分(after_st ...
- 循环结构 :while
循环结构 :while 循环四要素: 1.初始化条件 2.循环条件 3.循环体 4.迭代条件 格式: 1.初始化条件 while(2.循环条件){ 3.循环体 4.迭代条件 } public clas ...
- 初识STM8S105K心得!
最近由于公司项目需要STM8S105K这颗芯片,这两天我也捣鼓了下,正好现在开通了博客,以此记录下自己的工作. 开发环境: window10操作系统: IAR for ...
- HDU-2571 命运(搜索,我才不是为了插图呢!哼!)
看到这题其实感觉就是搜索题,广搜的话看讨论区里已经有人内存超限了,所以我选择了深搜,有两种思路,第一种是从起点出发,依次更新每一个格子的最大值,这样dp[n][m]就是最后的结果了,第二种是从起点试探 ...
- 微信JS-SDK选择图片遇到的坑
微信JS-SDK选择图片遇到的坑 有个需求要在微信企业号里面做开发,有个功能是选择图片,使用input标签肯定是不管用了,Android手机上不能多选,所以使用了微信的JS-SDK提供的相关API,这 ...
- 关于html5 video的连续播放
<!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- TypeScript从入门到Vue项目迁移
1. 前言 ES6的普及,大大简化了JavaScript的表达方式 大型项目中,js没有类型检查.表达方式灵活,多人协作代码调试和维护成本高 2. 定义 TypeScript 是 JavaScript ...
- 给当当同学的random data
m**o 00'57"32街**o 00'52"23c**6 00'44"15斗**6 00'57"58n**5 00'32"04s**p 00'51 ...
- python常用函数 W
with…as with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭.线程中锁的自动获取和释放等.当python执行wi ...