分享知识,分享快乐

0%

问题: 存在文件大小为0,处于打开状态的文件,程序读取这些文件会报错

1
2
3
4
[root@cdh85-29 ~]# hadoop fs -du -h  hdfs://ns1/flume/BankCardAuthReqDTO/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE_bak
0 1.1 G hdfs://ns1/flume/BankCardAuthReqDTO/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE_bak/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE-1.1594769101120.log.gz
0 1.1 G hdfs://ns1/flume/BankCardAuthReqDTO/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE_bak/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE-1.1594856701472.log.gz
0 1.1 G hdfs://ns1/flume/BankCardAuthReqDTO/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE_bak/CREDIT-PRODUCT-RESULT-LOG-MEMBER-RESPONSE-1.1594941000485.log.gz

cloudera论坛也有类型的错误 :

1
Cannot obtain block length for LocatedBlock

https://community.cloudera.com/t5/Support-Questions/Cannot-obtain-block-length-for-LocatedBlock/td-p/117517

但是这个方法并没有解决我的问题。 hdfs debug recoverLease -path 这样也关闭不了文件 ,纠删码策略下 不知道什么bug 这些文件关闭不了。

我的解决方法:

获取hdfs没有正常关闭的文件并删除:

1
hadoop fsck /flume/ -files -openforwrite | grep "OPENFORWRITE"  >tmp.txt

tmp.txt 内容如下:

阅读全文 »

xargs可以将输入内容(通常通过命令行管道传递),转成后续命令的参数,通常用途有:

  1. 命令组合:尤其是一些命令不支持管道输入,比如ls
  2. 避免参数过长:xargs可以通过-nx来将参数分组,避免参数过长。

使用语法如下

1
2
Usage: xargs [OPTION]... COMMAND INITIAL-ARGS...
Run COMMAND with arguments INITIAL-ARGS and more arguments read from input.

入门例子

首先,创建测试文件

1
touch a.js b.js c.js

接着,运行如下命令:

1
ls *.js | xargs ls -al

输出如下:

阅读全文 »

重启dn导致集群不能写入数据,几百个任务都失败了, 经过一个通宵的折腾,记录一下这次重大事故。

报错日志

1
2
DataStreamer Exception
20-11-2020 09:48:59 CST mysql2sqoop-1-RD202006060009 INFO - org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /user/yarn/.staging/job_1605809645188_1956/job.jar could only be written to 0 of the 1 minReplication nodes. There are 66 datanode(s) running and no node(s) are excluded in this operation.

报错的日志各种误导,走了很多弯路,只说一下,最终解决了这个问题的方法:

网上有人出现这个问题是格式化解决,它们日志是There are 0 datanode(s) running and no node(s) are excluded in this operation.我的hdfs集群是正常的所有节点都在,只是不能写入数据。

我用的分层策略是One_SSD,查看了DFS Storage Types,发现disk的空间不够。

image-20201120151830207

解决步骤

ssd磁盘的机器和普通磁盘的机器分2个角色组

普通组不加[SSD]

阅读全文 »

python时间strftime格式化去除前导0

解决方案:

linux (加一个“-”符号)

1
datetime.date(2020, 11, 9).strftime("%-m月%-d日")

windows (加一个“#”符号)

1
datetime.date(2020, 11, 9).strftime("%#m月%#d日")
阅读全文 »

破解PyCharm 2018.3.2

亲测可以用

破解教程:https://www.jianshu.com/p/76a30aeb8f9d

1、key

1
K71U8DBPNE-eyJsaWNlbnNlSWQiOiJLNzFVOERCUE5FIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiR08iLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAxOS0wNS0wNCJ9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDE5LTA1LTA0In0seyJjb2RlIjoiUEMiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifSx7ImNvZGUiOiJSU1UiLCJwYWlkVXBUbyI6IjIwMTktMDUtMDQifV0sImhhc2giOiI4OTA4Mjg5LzAiLCJncmFjZVBlcmlvZERheXMiOjAsImF1dG9Qcm9sb25nYXRlZCI6ZmFsc2UsImlzQXV0b1Byb2xvbmdhdGVkIjpmYWxzZX0=-Owt3/+LdCpedvF0eQ8635yYt0+ZLtCfIHOKzSrx5hBtbKGYRPFDrdgQAK6lJjexl2emLBcUq729K1+ukY9Js0nx1NH09l9Rw4c7k9wUksLl6RWx7Hcdcma1AHolfSp79NynSMZzQQLFohNyjD+dXfXM5GYd2OTHya0zYjTNMmAJuuRsapJMP9F1z7UTpMpLMxS/JaCWdyX6qIs+funJdPF7bjzYAQBvtbz+6SANBgN36gG1B2xHhccTn6WE8vagwwSNuM70egpahcTktoHxI7uS1JGN9gKAr6nbp+8DbFz3a2wd+XoF3nSJb/d2f/6zJR8yJF8AOyb30kwg3zf5cWw==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

2、破解补丁下载

链接:https://pan.baidu.com/s/1EvUvweSG58kFToJXB8ugPw
提取码:vnkq

阅读全文 »

hive数据导出,并指定分隔符,元素包含引号等

语法格式

1
beeline -n username -p password -u jdbc:hive2://host:10000 --verbose=true  --showHeader=false --outputformat=tsv2  --color=true  -e "select * from ${database}.${tablename}" > ${tableName}.csv

通过 outputformat 指定输出格式

–outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] == 指定输出格式

–delimiterForDSV="*" ‘&’ 前提(–outputformat=dsv) 指定分隔符

不同格式对应的分隔符如下表:

格式 分隔符
table 表格式
vertical 如下所示
csv ‘,’ 逗号(元素包含引号)
tsv ‘\t’ 制表符(元素包含逗号)
dsv 默认‘|’ 竖线分割,可通过delimiterForDSV指定分隔符
csv2 ‘,’ 逗号(不含引号)
tsv2 ‘\t’ 制表符(不含引号)

说明:

csv格式 == 查询元素有’'单引号

csv2格式没有单引号

tsv,tsv2同上

实例

阅读全文 »

在使用了hexo搭建了博客后,最大的问题便是如何使用一款markdown工具来编辑博客了,我采取的就是Typora,这工具免费简单易用没广告,而且把图片保存到本地还是很方便的,因此大家只要稍微了解点markdown语法就可以上手使用了。

关于图片和图片路径的设置,有以下教程。

事先声明,所有博客文件均保存在 hexo/_posts/文件夹下

首先在 hexo > source目录下建一个文件夹叫images,用来保存博客中的图片。

然后打开Typora的 文件 > 偏好设置,进行如下设置。

image-20200116142728587

这样的话所有的博客中的图片都将会保存到 /source/images/该博客md文件名/图片名称

但是仅仅这样设置还不够,这样设置在typora中倒是能看图片了,但是使用的却是相对于当前md文件的相对路径,可是如果启动hexo,是要用服务器访问的,而服务器显然无法根据这个相对路径正确访问到图片,因此还需要在typora中进行进一步设置。

在typora菜单栏点击 格式->图像->设置图片根目录,将hexo/source作为其根目录即可。

一定要先设置了图片根目录后再插入图片,否则图片路径会不正确喔!

阅读全文 »

hive建表create table xxx as select的问题

create table xxx as select的方式创建的表默认存储格式是text,所以要注意了假如as select的是其他格式的比如RCFile,则可能会导致一行变多行的情况(因为RCFile格式的可能字段包含换行符等),所以必须要加上
create table xxx stored as RCFile as select…
所以使用这种方式建表注意加上指定的存储格式。

测试示例:

1
2
3
4
5
6
drop table if exists decision_model.member_close_reason;
create table decision_model.member_close_reason as
select 'mongodb_member' as intype, *
from mongo_baofoo_log.log_update_member_state
;
select * from decision_model.member_close_reason where intype <> 'mongodb_member';

img

正确的应该加上指定的存储格式。

1
2
3
4
5
6
7
8
9
10
11
drop table if exists decision_model.member_close_reason;
create table decision_model.member_close_reason
row format delimited
fields terminated by '|'
STORED AS RCFile
as
select 'mongodb_member' as intype, *
from mongo_baofoo_log.log_update_member_state
;

select * from decision_model.member_close_reason where intype <> 'mongodb_member';
阅读全文 »

解决spark streaming长时间运行日志不断增长问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
log4j.rootLogger=WARN,stdout,A1

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=WARN
log4j.appender.stdout.encoding=UTF-8
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}] %m %n[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p | %F:%L | %M%n%n

log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.BufferedIO=true
log4j.appender.A1.BufferSize=8192
log4j.appender.A1.File=${spark.yarn.app.container.log.dir}/stderr
log4j.appender.A1.MaxFileSize=10MB
log4j.appender.A1.MaxBackupIndex=9
log4j.appender.A1.encoding=UTF-8
log4j.appender.A1.Append=true
log4j.appender.A1.Threshold=ERROR
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss,SSS}] %m %n[%d{yyyy-MM-dd HH:mm:ss,SSS}] %p | %F:%L | %M%n%n
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/bin/bash

echo "================= spark job:CbDimStreamDriver start!!!========================"

spark-submit \
--master yarn \
--deploy-mode cluster \
--name stream-rm-cb-dim \
--queue bf_yarn_pool.production \
--class com.baofu.rm.streaming.CbDimStreamDriver \
--num-executors 32 \
--driver-memory 3G \
--executor-memory 4G \
--executor-cores 1 \
--conf spark.dynamicAllocation.enabled=false \
--conf spark.executor.extraJavaOptions=-XX:+UseConcMarkSweepGC \
--conf spark.streaming.backpressure.enabled=true \
--conf spark.streaming.kafka.maxRatePerPartition=1000 \
--conf spark.eventLog.enabled=false \
--conf spark.driver.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties \
--conf spark.executor.extraJavaOptions=-Dlog4j.configuration=file:log4j.properties \
--files ./log4j.properties \
/home/bf_app_spark/spark-jobs/streams/fxJob/cbdim/rm-streaming-analysis-pro.jar

rc=$?
if [[ $rc != 0 ]]; then
echo "spark task: $0 failed,please check......"
exit 1
fi

echo "end run spark: `date "+%Y-%m-%d %H:%M:%S"`"
echo "================== spark job:CbDimStreamDriver end!!!===================="
1
nohup sh ./stream_CbDimStreamDriver.sh > /dev/null 2>&1

参考: http://mkuthan.github.io/blog/2016/09/30/spark-streaming-on-yarn/

阅读全文 »