大数据相关的命令
1、hdfs文件down到本地
hadoop dfs -getmerge hdfs_path/* nas_path/temp
2、远程集群复制 distcp /跨机器复制 scp
1)本来是远程复制的
hadoop distcp 复制的地址1 复制目的地地址2
因为两个集群都是有认证的,彼此不通所以方案一取消
查看要复制的文件大小:
hadoop dfs -du -s -h 要复制的文件
2 )远程复制的行不通,那就hdf get到本地,然后scp到目的集群本地然后再上传。
before_folder 是复制前的文件目录所在地
remote_folder 是复制后的目标目录地址
scp before_folder 目标用户名@目标ip:remote_folder
====接口文件
1、数据文件字段分割符
1)0X1F (不可见字符)
对应的十六进制0x1f, 对应的十进制也就是31;
ASCII码0x1F;记录分割符:0x0A(换行);文件编码:UTF-8;
2)0x7c(|)
竖线”|”,即ASCII码0x7C;文件编码:UTF-8;
3)0x0A
分割符:0x0A(换行);文件编码:UTF-8;
4) 特殊字符 €,
这个在ASCII的字符对应编码中没有,是很特殊的,对应的十六进制的x80
文件编码:GBK;
总结:
(十六进制)0x7c =(十进制)124
(十六进制)0x1f =(十进制)31
(十六进制)0x1a =(十进制)10 --换行符
======实际生产的应用
1、对于数据接入文件的时候,需要有列分割符,也需要有校验文件(校验数据文件的大小、记录数、时间),如果数据文件行数和校验文件中记录的行数一致,那么就校验通过。
1)列分割符需要在建表的时候指定
CREATE EXTERNAL TABLE `ods.poms_10108_program_ex`(
`program_id` string,
`program_name` string )
PARTITIONED BY (
`src_file_day` string,
`src_file_hour` string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '31'
STORED AS INPUTFORMAT
'com.migu.hive.inputformat.MiguInputFormatNew'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'hdfs://ns1/user/hadoop/ods/wangda/poms/poms-10108'
--31就是列分割负,也就是接口文件中的0x1f
2)如果在拿到数据时候,判定数据分割符是否是文件正常分割符的时候,可以用命令直接测试: awk -F ‘分隔符’ ‘{print $1}’ 数据文件
3)VERF_FILE_SPLIT 可以在接口接入的时候指定校验文件分隔符 ,可以让校验文件按照指定的校验分割负进行划分,从而验证数据文件的行数和校验文件的记录数是否一致(为了防止数据文件比多写数据,而校验文件并没有完全生成的异常出现)。