分享知识,分享快乐

0%

hadoop decommission 卡住

hadoop decommission一个节点Datanode,几万个block都同步过去了,但是唯独剩下2个block一直停留在哪,导致该节点几个小时也无法 下线。hadoop UI中显示在Under Replicated Blocks里面有2个块始终无法消除.

是一个hadoop的bug,https://issues.apache.org/jira/browse/HDFS-5579

根据blockid 查找文件

1
hdfs fsck -blockId blk_2050561344
阅读全文 »

hdfs 如何实现退役节点快速下线(也就是退役节点上的数据块快速迁移)

参考 https://www.cnblogs.com/jiangxiaoxian/p/9665588.html

进度可在HDFS的50070可视化界面的Decommissioning处查看**

Under replicated blocks : 有备份的blocks

Blocks with no live replicas : 没有存活备份的blocks(存备份的datanode下线了)

Under Replicated Blocks In files under construction : 备份数不够的blocks

可调整集群参数,对退服进行调优,注意,更改参数需要重启服务。需要修改的参数如下:

组件 实例 参数类别 参数名称 默认值 修改值 参数含义 调整场景 是否可以默认值调整
HDFS NameNode balance/退服性能参数 dfs.datanode.balance.bandwidthPerSec 20971520 209715200 【说明】每个DataNode可用于负载均衡的最大带宽量(每秒的字节数)。 balance-性能调优 不建议调整默认值
HDFS DataNode balance/退服性能参数 dfs.datanode.balance.max.concurrent.moves 5 30 允许在DataNode上进行负载均衡的最大线程数。 有必要调整
HDFS NameNode balance/退服性能参数 dfs.namenode.replication.max-streams 10 64 DataNode上复制线程的最大数。 C70默认值已调整为64,有必要继续调整
HDFS NameNode balance/退服性能参数 dfs.namenode.replication.max-streams-hard-limit 20 500 对DataNode上复制线程数的硬限制。 C70默认值已调整为128,有必要继续调整
HDFS NameNode balance/退服性能参数 dfs.namenode.replication.work.multiplier.per.iteration 10 500 高级属性。修改时需谨慎。该参数表示NameNode通过DataNode心跳发送这样一个命令列表时DataNode上并行开始的用于复制的块传输的总量。
HDFS NameNode 运行-性能调优 dfs.namenode.handler.count 64 192 NameNode处理线程数 大集群,性能调优 可以调整/更耗内存
HDFS DataNode 运行-性能调优 dfs.datanode.handler.count 8 24 DataNode处理线程数 大集群,性能调优 可以调整/更耗内存
HDFS NameNode 运行-性能调优 ipc.server.read.threadpool.size 1 10 NameNode处理请求线程池大小 大集群,性能调优 可以调整/更耗内存
阅读全文 »

1.现状

目前网上出现大量的主机输入输出错误,原因是由于主机文件系统损坏。一线人员大部分采用的是umont 和 mount的方式恢复,这种恢复方式不能真正修复已经损坏的文件系统,在后续使用过程中,仍然会再次出现主机端输入输出错误。

2.需要修复的场景

<1>.主机侧发现存在文件系统不可读写的情况,也可以通过查看主机端日志来确认是否有文件系统异常发生: xfs_force_shutdown 、I/O error 
<2>.出现异常停电,供电恢复正常,主机和阵列系统重起之后
<3>.存储介质故障:出现LUN失效、RAID失效、以及IO超时或者出现慢盘,对慢盘进行更换,系统恢复正常之后
<4>.传输介质故障:如光纤、网线等损坏等,数据传输链路断开后又恢复正常之后

3.检查文件系统

注:检查文件系统必须保证将文件系统umount成功。
在根目录下输入“xfs_check /dev/sdd(盘符);echo $?”(注意:在执行 此命令之前,必须将文件系统umount,否则会出现警告信 “xfs_check: /dev/sdd contains a mounted and writable filesystem ”)敲回车键,查看命令执行返回值:0表示正常,其他为不正常,说明文件系统 损坏,需要修复。

4.修复过程

注:修复时需要暂停主机侧的业务,umount 和 mount 无法修复文件系统 。

  1. 先umount要修复的文件系统的分区
  2. 然后输入 “xfs_repair /dev/sdd(盘符)”执行修复命令。
    xfs_check /dev/sdd; echo $?
    A)如果为0===》成功修复。
    B) 如果不为0===》没有成功:请执行 xfs_repair –L /dev/sdd 命令,再执 行xfs_repair(反复多修复几次)

5.xfs常用命令

阅读全文 »

官网部署文档

https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/cluster-deployment.html

1、基础软件安装(必装项请自行安装)

  • PostgreSQL (8.2.15+) or MySQL (5.7系列) : 两者任选其一即可, 如MySQL则需要JDBC Driver 5.1.47+
  • JDK (1.8+) : 必装,请安装好后在/etc/profile下配置 JAVA_HOME 及 PATH 变量
  • ZooKeeper (3.4.6+) :必装
  • Hadoop (2.6+) or MinIO :选装,如果需要用到资源上传功能,可以选择上传到Hadoop or MinIO上
1
注意:DolphinScheduler本身不依赖Hadoop、Hive、Spark,仅是会调用他们的Client,用于对应任务的提交。

2、下载二进制tar.gz包

  • 请下载最新版本的后端安装包至服务器部署目录,比如创建 /tmp/dolphinscheduler 做为安装部署目录,下载地址: 下载,下载后上传tar包到该目录中,并进行解压
1
2
3
4
5
6
7
# 创建部署目录,部署目录请不要创建在/root、/home等高权限目录 
mkdir -p /tmp/app/dolphinscheduler; #安装文件别放到/tmp/dolphinscheduler , 这是特殊路径 创建文件时会用到的临时路径
cd /tmp/app/dolphinscheduler;
# 解压缩
tar -zxvf apache-dolphinscheduler-incubating-1.3.5-dolphinscheduler-bin.tar.gz -C /opt/dolphinscheduler;

mv apache-dolphinscheduler-incubating-1.3.5-dolphinscheduler-bin dolphinscheduler-bin

3、创建部署用户和hosts映射

  • 所有部署调度的机器上创建部署用户,并且一定要配置sudo免密。假如我们计划在ds1,ds2,ds3,ds4这4台机器上部署调度,首先需要在每台机器上都创建部署用户
阅读全文 »

ClickHouse 部署

1
2
3
sudo yum install yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64

如果您想使用最新的版本,请用testing替代stable(我们只推荐您用于测试环境)。prestable有时也可用。

然后运行命令安装:

1
sudo yum install clickhouse-server clickhouse-client

启动服务

1
2
3
sudo systemctl start clickhouse-server
sudo systemctl stop clickhouse-server
sudo systemctl status clickhouse-server

快速开始

clickhouse-client -m

阅读全文 »

快速试用 DolphinScheduler

1、下载源码 zip 包
  • 请下载最新版本的源码包并进行解压
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建源码存放目录
mkdir -p /opt/soft/dolphinscheduler;
cd /opt/soft/dolphinscheduler;

# 通过wget下载源码包
wget https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/dolphinscheduler/1.3.5/apache-dolphinscheduler-incubating-1.3.5-src.zip

# 通过curl下载源码包
curl -O https://mirrors.tuna.tsinghua.edu.cn/apache/incubator/dolphinscheduler/1.3.5/apache-dolphinscheduler-incubating-1.3.5-src.zip

# 解压缩
unzip apache-dolphinscheduler-incubating-1.3.5-src.zip

mv apache-dolphinscheduler-incubating-1.3.5-src-release dolphinscheduler-src
2、安装并启动服务
1
2
cd dolphinscheduler-src/docker/docker-swarm
docker-compose up -d
3、登录系统

访问前端页面: http://bigdata-3.baofoo.cn:12345/dolphinscheduler

默认的用户是admin,默认的密码是dolphinscheduler123

停止所有容器:

阅读全文 »

Conda常用命令整理

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
33
34
35
36
37
38
39
conda --version #查看conda版本,验证是否安装

conda update conda #更新至最新版本,也会更新其它相关包

conda update --all #更新所有包

conda update package_name #更新指定的包

conda create -n env_name package_name #创建名为env_name的新环境,并在该环境下安装名为package_name 的包,可以指定新环境的版本号,例如:conda create -n python2 python=python2.7 numpy pandas,创建了python2环境,python版本为2.7,同时还安装了numpy pandas包

conda activate env_name #切换至env_name环境

conda deactivate #退出环境

conda info -e #显示所有已经创建的环境

conda create --name new_env_name --clone old_env_name #复制old_env_name为new_env_name

conda remove --name env_name –all #删除环境

conda list #查看所有已经安装的包

conda install package_name #在当前环境中安装包

conda install --name env_name package_name #在指定环境中安装包

conda remove -- name env_name package #删除指定环境中的包

conda remove package #删除当前环境中的包

conda create -n tensorflow_env tensorflow

conda activate tensorflow_env #conda 安装tensorflow的CPU版本

conda create -n tensorflow_gpuenv tensorflow-gpu

conda activate tensorflow_gpuenv #conda安装tensorflow的GPU版本

conda env remove -n env_name #采用第10条的方法删除环境失败时,可采用这种方法

Conda常用命令整理

https://blog.csdn.net/menc15/article/details/71477949/

阅读全文 »

spark-python版本依赖与三方模块方案

(1)使用conda创建python虚拟环境、安装第三方库

假设虚拟环境是pyspark_py36,安装位置是:

1
2
/root/miniconda3/envs/pyspark_py36
此处省略1w个字。

安装的第三方库是:

1
2
3
4
5
source activate pyspark_py36

pip install pandas
pip install sklearn
pip install lightgbm

其他省略1w字。

(2)打包整个虚拟环境

进入虚拟环境目录,压缩整个文件夹

1
2
cd /root/miniconda3/envs/
zip -r -9 -q pyspark_py36.zip pyspark_py36/
阅读全文 »

linux基础命令之:vi模式下查找和替换

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
一、查找
查找命令
/pattern<Enter> :向下查找pattern匹配字符串
?pattern<Enter>:向上查找pattern匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
pattern是需要匹配的字符串,例如:
/hello<Enter> #查找hello
/hello<Enter> #查找hello单词(注意前后的空格)
除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
/^hello<Enter> #查找以hello开始的行
/hello$<Enter> #查找以hello结束的行
//^hello<Enter> #查找^hello字符串

二、替换
1.:[range]s/pattern/string/[c,e,g,i]
range 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行至最后一行,也就是整篇文章,也可以 % 代表。 % 是目前编辑的文章,# 是前一次编辑的文章。
pattern 就是要被替换掉的字串,可以用 regexp 来表示。
string 将 pattern 由 string 所取代。
c confirm,每次替换前会询问。
e 不显示 error。
g globe,不询问,整行替换。
i ignore 不分大小写。
I ignore 大小写敏感。

2.基本替换
:s/lantian/sky/ #替换当前行第一个 lantian 为 sky
:s/lantian/sky/g #替换当前行所有 lantian 为 sky
:n,$s/lantian/sky/ #替换第 n 行开始到最后一行中每一行的第一个 lantian 为 sky
:n,$s/lantian/sky/g #替换第 n 行开始到最后一行中每一行所有 lantian 为 sky
#(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/lantian/sky/ #(等同于 :g/lantian/s//sky/) 替换每一行的第一个 lantian 为 sky
:%s/lantian/sky/g #(等同于 :g/lantian/s//sky/g) 替换每一行中所有 lantian 为 sky
可以使用 #或+ 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#lantian/#sky/# 替换当前行第一个 lantian/ 为 sky/
:%s+/oradata/apras/+/user01/apras1+ (
使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

3.删除文本中的^M
问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M,请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。
使用命令:cat filename1 | tr -d “^V^M” > newfile;
使用命令:sed -e “s/^V^M//” filename > outputfilename
需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:
:%s/^V^M//
:%s/^M$//g
如果上述方法无用,则正确的解决办法是:
tr -d “/r” < src >dest
tr -d “/015″ dest
strings A>B

4.其它用法
:s/str1/str2/ #用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g #用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g #用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g #用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g #功能同上

5.g的总结说明
从上述替换命令可以看到:
g 放在命令末尾,表示对指定行的搜索字符串的每次出现进行替换;不加 g,表示只对指定行的搜索字符串的首次出现进行替换;
g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
也就是说命令的开始可以添加影响的行,如果为g表示对所有行;命令的结尾可以使用g来表示是否对每一行的所有字符串都有影响。
阅读全文 »