java中的编码转换
对照分析java中的编码转换,以utf8和gbk为例
对照分析java中的编码转换,以utf8和gbk为例
本文安装配置环境为多个ubuntu20.04 集群,安装包皆来自apache官网,分别为kafka2.4.1 + zookeeper3.6.3 + jdk1.8,在文章末尾附上自用的zookeeper、kafka群起脚本
注: 本文不包含jdk安装,详情见我的上一篇jdk1.8+hadoop3.2+scala2.12+spark3.1.2配置记录
Zookeeper3.6.3安装配置(已完成解压,目录为/home/hadoop/Zookeeper)
复制配置文件并重命名
1 | cp ~/Zookeeper/conf/zoo_sample.cfg ~/Zookeeper/conf/zoo.cfg |
新建Data文件夹,存放运行数据
1 | mkdir ~/Zookeeper/zkData |
修改配置文件内容
1 | # The number of milliseconds of each tick |
运行:
1 | /home/hadoop/Zookeeper/bin/zkServer.sh start |
不同服务器中应修改对应的myid内容,文件路径为Zookeeper/zkData/myid
将该文件中的数值改成对应服务器序号即可,如我的hadoop101中保持1,hadoop102修改成2,以此类推。
注: 也可参考jdk1.8+hadoop3.2+scala2.12+spark3.1.2配置记录中将bin文件夹注入到.bashrc中作为环境变量使用
Kafka2.4.1安装配置(已完成解压,目录为/home/hadoop/Kafka)
修改Kafka/config/server.properties文件
1 | ############################# Server Basics ############################# |
注: 在每个服务器中该文件中的broker.id值应不同
修改kafka中的zookeeper配置,文件路径:Kafka/config/zookeeper.properties,修改其中dataDir为响应路径即可,其他属性按需修改
1 | dataDir=/home/hadoop/Zookeeper |
运行:
1 | /home/hadoop/Kafka/bin/kafka-server-start.sh -daemon /home/hadoop/Kafka/config/server.properties |
当然在安装过程中也遇到不少问题,一下列出代表性问题,并给出解决方案:
1、使用群启脚本启动kafka时日志报错:
1 | nohup: failed to run command 'java': No such file or directory |
解决方案
修改Kafka/bin/kafka-run-class.sh中内容,在该文件头部添加需要使用的JAVA_HOME绝对路径即可(网传在群起脚本中添加的source /etc/profile无果可采取这种办法):
1 | export JAVA_HOME="/home/hadoop/JDK" |
2、启动后kafka闪退,日志报错zookeeper连接2181超时
解决方案
该错误有以下几点可能:
3、zookeeper本地启动无问题,但群起Zookeeper脚本会导致日志报错JAVA_HOME找不到
解决方案
和问题1一样,添加JAVA_HOME的绝对路径,文件路径为Zookeeper/bin/zkEnv.sh
1 | JAVA_HOME="/home/hadoop/JDK" |
4、群起脚本跑完后发现只有一台机器成功运行zookeeper
重点关注上文提及的唯一编号的属性值(zookeeper:myid;kafka:broker.id)是否在每台机器上作出修改,再考虑配置错误
Zookeeper
1 | #! /bin/bash |
Kafka
1 | #! /bin/bash |
记录下我在ubuntu20.04-用户hadoop环境下搭建jdk+hadoop+scala+spark环境的过程(不安装到root相关目录下)
简单粗暴
1 | # tensorflow 内存不够的情况 适用于tensorflow 2.x |
问题1:
第一次启动集群前需要将master进行hdfs格式化
1 | hdfs namenode -format |
注:若以后想要再次格式化需关闭所有namenode、datanode,并删除hadoop目录下data、logs文件夹
问题2:
启动报错“Attempting to operate on hdfs namenode as root”
可在/etc/profile.d中添加一个sh脚本注入环境变量,脚本内容如下
1 | export HDFS_NAMENODE_USER=root |
问题3:
jps命令查询后发现datanode、namenode、nodemanager都正常启动了,唯独不见resourcemanager
启动集群时,不应直接调用./start-all.sh,应当在master上调用./start-dfs.sh,在准备部署resourcemanager的服务器上调用./start-yarn.sh
问题4:
localhost: mv: 无法获取“XXX”状态信息
要么是xml文件配置存在错误,要么是防火墙存在问题
centos7关闭开启防火墙命令如下:
1 | #关闭防火墙: |
问题5:
secondnamenode可视化查看网页打不开
同上
问题6:
启动nodemanagers时报出警告“localhost: Warning: Permanently added ‘localhost’ (ECDSA) to the list of known hosts.”
删除hadoop/etc/hadoop/workers文件中的localhost一行即可
解码被base64编码过的字段信息,在base64编码解码工具中正常解码,但在python下的模块base64、binascii中的b64decode、a2b_base64等方法中出现解码报错
报错信息如下
1 | --------------------------------------------------------------------------- |
python中的base64是4个4个的读取的,所以待解码的字段应当为4的倍数,不足添‘=’
1 | # 对待解码的字段a进行判断,若为4的倍数则不变,反之缺多少补多少 |
1 | import torch |
1 | train_loader = torch.utils.data.DataLoader( |
1 | class LeNet(nn.Module): |
1 | model = LeNet() |
1 | model = LeNet().to(device) |
for epoch in range(1, EPOCH + 1):
train(DEIVCE, model, train_loader, optimizer, epoch)
test(DEIVCE, model, train_loader)
今日小技巧GET
Python 控制台输出时刷新当前行内容
为了跑代码时不至于对了白屏发呆,提高用户(自己)体验,经过几次尝试,正确代码如下:
import time
for i in range(100):
time.sleep(0.1)
print("\rReading image {}/{}".format(1+i,100),end='')