mysql 创建用户的时候提示密码太简单
1 | mysql> CREATE USER 'hardoop'@'%' IDENTIFIED BY '123456'; |
1 | mysql> SHOW VARIABLES LIKE 'validate_password%'; |
1 | mysql> SET GLOBAL validate_password.length = 6; |
mysql 创建用户的时候提示密码太简单
1 | mysql> CREATE USER 'hardoop'@'%' IDENTIFIED BY '123456'; |
1 | mysql> SHOW VARIABLES LIKE 'validate_password%'; |
1 | mysql> SET GLOBAL validate_password.length = 6; |
macbook 安装hadoop hive
1 | brew install hardoop |
hadoop安装的是3.3.4
echo “127.0.0.1 wanghongxing” >> /etc/hosts
目录是 /usr/local/Cellar/hadoop/3.3.4/
进入 /usr/local/Cellar/hadoop/3.3.4/目录,
1 | cd /usr/local/Cellar/hadoop/3.3.4/ |
进入libexec目录,修改etc下的配置文件
设置 Hadoop 的临时目录和文件系统,localhost:9000 表示本地主机。如果使用远程主机,要用相应的 IP 地址来代替,填写远程主机的域名,则需要到 /etc/hosts 文件中做 DNS 映射。在 core-site.xml 文件里作如下配置:
1 | <configuration> |
hdfs-site.xml 的配置修改如下,注意 name 和 data 的路径都要替换成本地的路径:
1 | <configuration> |
由于根目录下 etc/hadoop 中没有 mapred-site.xml 文件,所以需要创建该文件。但是目录中提供了 mapred-site.xml.template 模版文件。我们将其重命名为 mapred-site.xml,然后将 yarn 设置成数据处理框架:
1 | <configuration> |
配置数据的处理框架 yarn:
1 | <configuration> |
1 | $ hdfs namenode -format |
1 | $ sbin/start-all.sh |
访问Hadoop的默认端口号为9870(老版本的是 50070 ). 使用以下网址,以获取浏览器Hadoop服务。
1 | http://localhost:9870/ |
访问集群中的所有应用程序的默认端口号为8088。使用以下URL访问该服务。
1 | http://localhost:8088/ |
关闭
1 |
|
至此,hadoop看着么有问题。
1 | #Setting PATH for Hive |
1 | create database hivestore; |
1 | cd $HIVE_HOME/conf |
1 | <configuration> |
在https://dev.mysql.com/downloads/connector/j/
mysql-connector,下载选platform independent的操作系统。解压以后,把jar文件复制到/usr/local/Cellar/hive/3.1.3/libexec/lib目录下面。
在/usr/local/Cellar/hive/3.1.2/libexec/(即$HIVE_HOME)文件夹内新建iotmp文件夹
在/usr/local/Cellar/hive/3.1.2/libexec/bin目录下
1 | schematool -initSchema -dbType mysql |
查看初始化信息
1 | schematool -dbType mysql -info |
1 | wanghongxing:~ whx$ hive |
折腾了半天,重新看hadoop,启动总是出问题,因为自己是arm芯片的macbook,决定用docker的方式折腾。
从 https://github.com/big-data-europe/docker-hadoop clone 了他的代码库
看他头打包镜像的脚本,执行make build就可以打包。
1 | DOCKER_NETWORK = docker-hadoop_default |
另外Dockerfile是从debian 来做,安装arm64版jdk比较麻烦,因为改成openjdk11,同时把jdk相应的安装去掉了,顺便把hardoop升级到3.2.3
1 | FROM openjdk:11 |
这个弄好后hadoop没有问题,但是加上 hive后总是有问题。
拿出intel芯片的macbook,这样搞。
云端机房有几台 ECS 做开发服务器,有 RDS 、MQ、ES、MongoDB、Nacos ,大家用spring cloud微服务做开发,为了保证大家顺利开发,需要在保证安全的情况下让大家可以随时连接云端组件。
1、买云服务商的vpn网关:花点钱的事情;
2、自己在ECS中安装vpn,每个开发人员接入vpn后开发。
下面主要讲第二种方案。
云端vpc的网段是10.0.0.0/24
服务器一:安装ES、MongoDb、Doris等组件;IP:10.0.0.11
服务器二:安装nacos、redis、docker服务;IP:10.0.0.10
服务器三:docker服务;IP:10.0.0.12
1、在服务器一上安装openvpn,接入客户端的ip段规划为10.8.0.0/24,让所有vpn接入的客户端可以直接访问服务器二、三;
2、服务器一、二、三上可以直接连通所有vpn接入的客户端;
3、vpn接入的客户端可以连通服务器二、三上的docker容器中的服务;
1是 openvpn的基本功能;
2需要在openvpn 服务端给vpn客户端推送路由信息;
3需要服务器二三上需要被访问的docker容器接入直接的docker network,然后在openvpn服务端给vpn客户端推送到每个docker network的路由。
在服务器二、服务器三分别创建单独的docker network:
服务器二: docker network create --subnet=10.10.0.0/24 cem-network
。
服务器三:docker network create --subnet=10.12.0.0/24 cem-network
。
然后这两个服务器中需要被vpn客户端访问的容器都需要创建在cem-network中。
先启动防火墙,需要防火墙做转发(也可以用iptables,这个最近这些年很少用了)
1 | sudo systemctl enable firewalld |
安装openvpn软件
1 | yum -y install epel-release |
需改/etc/openvpn/server.conf配置文件,大致需要修改如下几点:
然后在openvpn配制中增加到10.10.0.0/24的路由。
1 | client-to-client |
1 | openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth |
然后修改防火墙配置
1 |
|
把 下面这几个文件复制下载到客户端电脑
1 | /etc/openvpn/ca.crt |
然后编辑生成 whx.ovpn
1 | client |
mac用户下载 Tunnelblick ,windows用户下载.
然后倒入whx.ovpn
其服务器二三设置访问vpn客户端的路由
1 | ip route add 10.8.0.0/24 via 10.0.0.11 dev eth0 |
在服务器二设置访问服务器三容器的路由
1 | ip route add 10.12.0.0/24 via 10.0.0.12 dev eth0 |
在服务器三设置访问服务器二容器的路由
1 | ip route add 10.10.0.0/24 via 10.0.0.10 dev eth0 |
在服务器一设置访问服务器二三容器的路由
1 | ip route add 10.12.0.0/24 via 10.0.0.12 dev eth0 |
ip route add 172.18.0.0/24 via 10.0.0.10 dev eth0
1 | firewall-cmd --zone=public --add-port=80/tcp --permanent |
docker network create –subnet=10.10.0.0/24 cem-network
linux中手动添加路由的方法:
ip route add 10.10.0.0/24 via 10.0.0.10 dev eth0
macos中手动添加路由的方法:
1 | sudo route -n add -net 10.10.0.0/24 10.0.0.10 |
为了让spring cloud微服务注册到nacos的时候使用特定ip段,需要在bootstrap中设置 preferred-networks ,比如内网用户设置为:
1 | spring: |
比如cem容器中设置为:
1 | spring: |
安装doris
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64
cd /data/application
1 | wget https://mirrors.tuna.tsinghua.edu.cn/apache/doris/1.1/1.1.5-rc02/apache-doris-fe-1.1.5-bin.tar.gz |
fe
1 | cd apache-doris-fe-1.1.5-bin |
看看是不是启动成功
1 | curl http://127.0.0.1:8030/api/bootstrap |
1 | cd /data/application/apache-doris-be-1.1.5-bin-x86_64 |
吧be加入fe
1 |
|
设置密码
1 | SET PASSWORD FOR 'root' = PASSWORD('7Kf8o_Wqid8HVJ6h'); |
1 | 10000,2017-10-01,北京,20,0,2017-10-01 06:00:00,20,10,10 |
maven单独编译包
mvn package -pl guyuai-module-cem/guyuai-module-cem-biz -am -Dmaven.test.skip=true
因为笔记本是用以前的时间仓恢复回来的,所以brew啥的都是x64架构的,需要重新安装brew。
x86_64 和 ARM64 版本的 homebrew 的安装目录是不一样的
x86_64 安装目录:/usr/local/homebrew
ARM64 安装目录:/opt/homebrew
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
这是后电脑上有了两套brew,
为了方便在x64和arm64之间来回切换就参照 Mac M1 安装 Homebrew 最佳实践 做了
文件 ~/.brew_arm
1 | eval "$(/opt/homebrew/bin/brew shellenv)" |
文件 ~/.brew_intel
1 | eval "$(/usr/local/homebrew/bin/brew shellenv)" |
将下面代码加入到 .zshrc
1 | # homebrew |
切换命令:
1 | brew_intel # 切换到 x86_64 |
切换到arm64 安装了新的redis brew install redis
,版本是7.x .
然后再 idea 中调试运行spring boot程序就会卡在中间,打开调试信息看 貌似 redisson 一直不停地连接、close,估计是arm 版本的redis有问题。
先停止redis brew services stop redis
,然后卸载 brew uninstall redis
.
切换到 x64环境 brew_intel, 然后重新安装
1 | $ brew install redis |
然后idea中调试就正常了。
安装 Node 的部分写的很简单,因为按这个步骤,一般不会出问题。而当你用 nvm 尝试去安装 v14 及以下的 Node 版本时,大概率会报错,而我们在工作中恰恰又可能依赖 v14 及以下的 lts 版本。那么为什么会报错呢?究其原因还是因为低版本的 node 并不是基于 arm64 架构的,所以不适配 M1 芯片。在这里教大家两个方法,就能成功安装上低版本 Node。
arm 芯片,用 nvm 安装老版本的node 会提示安装不上,或者提示某个依赖的组件不支持arm64。这时候就需要安装 x64 版本的node。
具体办法就是通过 Rosetta2 来启动终端,这样通过 Rosetta2 转译到 x86 架构中执行安装,也一样可以安装成功。
然后重新打开 itern,在命令行下重新nvm install 12.20.12
就可以了。
弄完以后就不用把 iterm 运行在 Rosetta下。
在终端中,输入:
1 | arch -x86_64 zsh |
通过这个命令可以让 shell 运行在Rosetta2下。
之后你可以通过 nvm install 12.20.12
来安装低版本 Node。
在此之后,您可以不用在 Rosetta2 中就可以使用安装的可执行文件,也就是说,您可以将 Node v15与其他节点版本互换使用。
项目中要用到 ElasticSearch,以前都是使用单机版,既然是正式使用,就需要学习一下集群啥的,也要把安全性考虑进去。
刚入手的MacBook Pro M2 16寸( M2 ARM64) ,其实对容器以及虚拟机的兼容性还是有点不确定,所以这次会同时在旧的 MacBook Pro 2015 15寸( Intel I7) 同时安装测试。
参考:搜了一下,往上大多都是同样的方式安装,我基本参考 简书上“卖菇凉的小火柴丶”的文章 docker-compose安装elasticsearch8.5.0集群
准备好环境文件 .env ,这个env文件会在后面几个测试方案中一直使用。
1 | # elastic账号的密码 (至少六个字符),别用纯数字,否则死给你看 |
然后准备 docker-compose.yaml
1 | version: '3' |
然后启动 docker-compose up -d
稍等十几秒后在查看 curl -u elastic:iampassword http://localhost:9200
(浏览器里也可以直接查看,不过这样显得牛逼)
1 | { |
再过十几秒后网页打开 http://localhost:5601 看就可以看到登录页面。
装逼的样子就是这样
1 | $ curl -v http://localhost:5601 |
这样单机本的就好了。
新建一个 cluster 目录,把 .env 文件复制进去 ,
创建新的docker-compose.yaml文件,内容如下:
1 | version: '3' |
启动 docker-compose up -d
一分钟后查看 , kibana正在启动
1 | $ docker-compose ps -a |
再过一会还是不见kibana启动好,却发现es-client-01退出,查看日志没有任何错误提示。
1 | $ docker-compose ps |
然后执行想着执行docker-compose up -d
把es-client-01起来,结果是
1 | $ docker-compose ps |
这是后02 node又退出了,而且还是没有任何出错提示。感觉是这个集群只有两个能起来。
这时候直接访问es 和 kibana 都正常。
这时候用 ElasticSearch Head 查看es集群,发现一切正常,集群健康值green。
在2015款MacBook 上执行,这台电脑启动比较慢,应该是cpu 、内存、硬盘速度都不够快。
第一次完提示03不健康,估计是kibana检查重试的次数到了后自己退出了。
1 | $ docker-compose up -d |
这时候就手动启动 docker-compose up -d
1 | $ docker-compose up -d |
但是这时候kibana怎么也启动不起来,检查日志发现
es-cluster-02 | {“type”: “server”, “timestamp”: “2023-02-18T06:11:25,259Z”, “level”: “WARN”, “component”: “o.e.c.r.a.DiskThresholdMonitor”, “cluster.name”: “docker-cluster”, “node.name”: “es-cluster-02”, “message”: “high disk watermark [90%] exceeded on [pdT2lWRmQEi04k5GYvrWuA][es-cluster-01][/usr/share/elasticsearch/data/nodes/0] free: 88.6gb[9.2%], shards will be relocated away from this node; currently relocating away shards totalling [0] bytes; the node is expected to continue to exceed the high disk watermark when these relocations are complete”, “cluster.uuid”: “xaadt2vISeWTK4hk8RDJeA”, “node.id”: “7rYuhhyeS86iyKOtUChBKw” }
大致意思是我硬盘空间快满了,shards将不会分配给这个node,搜了一下解决办法就是
1 | curl -XPUT "http://localhost:9200/_cluster/settings" \ |
执行完以后看到 kibana 日志就迅速滚动起来。后面再看看 kibana 启动时候都干了啥,为啥这么慢。
这时候 cpu 占用比较高,风扇哗啦啦响。
过了好久发现es-cluster-01 退出了,依然是没有任何错误提示,kibana自己提示 unhealthy 了。
1 | $ docker-compose ps |
唉~看来es集群没问题,但是启动kibana的时候会较多的事情。再次重新启动,这时候一切正常了。
下面研究为啥cluster只启动两个的问题。这时候访问任何一个 node ,感觉都是健康的。
这世道乱了,忙乱了好久,最后看了下docker分配的cpu只有1个,内存只有2.8G😲,好吧,增加内存,这世界就安静了。
新建一个 cluster-ssl 目录,把 .env 文件复制进去 ,
新建 docker-compose.yml,主要增加了 xpack 的配置
1 | version: '3' |
setup.sh
1 | if [ x${ELASTIC_PASSWORD} == x ]; then |
然后启动顺利
1 | chmod +x ./Miniforge3-MacOSX-arm64.sh |
默认安装2.8版本的tensorflow,也可以指定版本。最好默认
1 | conda install -c apple tensorflow-deps |
在这里看tensorflow入门,在这里就可以看文档:
告诉我可以用 google colab玩,就安装一下。
安装jupyter
1 | conda install jupyter notebook |
支持google的 colab
1 | pip install jupyter_http_over_ws |
然后再右上角的connect种连接本地的jupyter。就可以在网页上运行python。
看看url地址貌似运行的github上的代码,我就把http://github.com/tensorflow/docs-i10n 这个代码仓库
clone了,然后就可以用 https://colab.research.google.com/github/wanghongxing/docs-l10n/blob/master/site/zh-cn/tutorials/keras/text_classification.ipynb?hl=zh-cn#scrollTo=6-tTFS04dChr 这个地址来学习tensorflow的文本分类例子。这时候是自己的代码仓库,感觉很厉害的样子。
执行之前别忘了安装 matplotlib,pip install matplotlib
有很多旧的dvd,都是早年给小孩的刻的DVD碟片。时间久了,碟片机都扔了,光驱也快淘汰了。当下最方便的还是用手机看,决定弄一份出来存到硬盘上,然后转换成方便手机观看的格式。
手机支持观看的格式,基本都是h264或者h265编码的mp4文件。找了很多工具,都是收费或者免费只能导出一半,这个钱还是不愿意花,自己用弄 ffmpeg。
本方案需要有dvd光驱或者dvd writer,如果老旧光盘读取有问题,就需要dvd player,那就应该走video capture方案,这个后面有时间买个dvd player后再弄(ps:吐槽一下,买的那些个绿色的dvd rewriter盘片,基本都读不出来,只有清华紫光的有保障)。
1 | brew install ffmpeg |
把碟片查到硬盘,其实就是把dvd碟片中的VIDEO_TS目录下内容复制到硬盘上,因为我有好多碟片,就一张一张复制,每张都改成碟片刻录的日期。
其中有一张碟片的VTS_01_4.VOB复制不出来了。
看网上说需要用ddrescue来挽救。
GNU ddrescue是一个用于磁盘、CD-ROM与其他数字存储媒体的资料恢复工具。其将原始存储区块从一个设备或文件复制到另一个,同时以智能方式处理读取错误,透过从部分读取的区块中截取尚称良好的扇区来最小化资料损失。 GNU ddrescue是用C++编程语言编写的,并以开源软件的形式提供,最初于2004年发布。
1 | brew install ddrescue |
Locate the drive using diskutil list
.
1 | /dev/disk3 (external, physical): |
Unmount the disk
1 | diskutil unmount /dev/disk3 |
Start a rescue operation of the disk into an image. Make sure the location of Rescue.dmg
is replaced with your desired location.
1 | sudo /usr/local/bin/ddrescue -v -n -c 4096 /dev/disk3 Rescue.dmg Rescue.log |
注:因为死了,就强制kill &把光驱电源线,重新插入后发现disk3 变成了disk2。不知道什么鬼
上面个直接就死给我看了
1 | sudo /usr/local/bin/ddrescue -c 4096 -d -r 3 -v /dev/disk2 Rescue.dmg Rescue.log |
提示我 ddrescue: Direct disc access not available.
。
查了半天,说macos不支持direct access,可以通过raw方式;
再查raw方式,发现macos的raw格式disk是通过/dev/rdisk*来的。
1 | sudo /usr/local/bin/ddrescue -r1 -b2048 /dev/rdisk2 Rescue.dmg Rescue.log |
经过一晚上折腾,放弃了,太慢了,12个小时才恢复10多M的坏块。
先从网上找几个使用例子
How to convert DVD to mp4 with ffmpeg Ko Takagi Posted on 2021年4月17日 Updated on 2022年8月8日
1 | ffmpeg -i VTS_01_1.VOB -b:v 1500k -r 30 -vcodec h264 \ |
就是单个转换和多个拼接一起转换;这兄弟指定了视频、音频码率。
试一下:
1 | ffmpeg -i VTS_01_1.VOB -b:v 1500k -r 30 -vcodec h264 \ |
期间有提示错误
1 |
|
我估计应该是文件应该一起来转换。
不过看文件大小,vob文件977M ,生成的mp4文件 194M。
其中bitrate=1628.7kbits/s
应该指码率是1628k。
再试一下4个一起
1 | ffmpeg -i "concat:VTS_01_1.VOB|VTS_01_2.VOB|VTS_01_3.VOB|VTS_01_4.VOB" \ |
我想试试不限制码率,只指定编码方式
1 | ffmpeg -i "concat:VTS_01_1.VOB|VTS_01_2.VOB|VTS_01_3.VOB|VTS_01_4.VOB" \ |
H265编码比较费 CPU,反正慢的要死。期间看到
1 | frame=85892 fps= 48 q=34.4 size= 231936kB time=00:57:15.47 bitrate= 553.1kbits/s speed=1.93x |
貌似码率是553k,最终文件大小265M还是比较喜人。
but:播放的时候quick time player不识别。
查询说Quicktime Player和iOS不再支持hev1 tag的mp4/mov。
回看输出Stream #0:0: Video: hevc (hev1 / 0x31766568)
,这儿应该指输出hev1.
二者大致有如下不同:
‘hvc1’ stores all parameter sets inside the MP4 container below the sample description boxes.
‘hev1’ stores all parameter sets in band (inside the HEVC stream).
我决定试试,只转一个vob,免得太慢。
1 | ffmpeg -i "concat:VTS_01_1.VOB" \ |
压缩率完美。
1 | ffmpeg -i "concat:VTS_01_1.VOB|VTS_01_2.VOB|VTS_01_3.VOB|VTS_01_4.VOB" \ |
闲着没事就试试,弄完了再试试别的
1 | ffmpeg -codecs |grep EV |grep H.26 |
EV 就是过滤视频编码。
开始测试h264有那么多参数,试着少点参数转h264试试看
1 | ffmpeg -i "concat:VTS_01_1.VOB|VTS_01_2.VOB|VTS_01_3.VOB|VTS_01_4.VOB" \ |
h264码率大概在1412k,播放效果不错。
因为碟片多,让我一个一个的复制显然不是程序猿的作风,弄脚本~
1 | ##这个是查找所有的VOB文件然后转换成h265编码的mp4文件 |
电脑是2015年的macbook pro 15寸 ,CPU 2.5 GHz 四核Intel Core i7 ,显卡AMD Radeon R9 M370X 2 GB。貌似可以试试GPU性能。
1 | ffmpeg -i VTS_02_1.VOB -c:v h264_videotoolbox whx-h264-gpu.mp4 |
速度贼啦啦快,但是效果惨不忍睹,基本上可到的都是马赛克。
换成1M码率,试试看:
1 | ffmpeg -i VTS_02_1.VOB -c:v h264_videotoolbox -b:v 1000k whx-h264-gpu-1m.mp4 |
速度贼快,效果还好
1 | ffmpeg -i VTS_02_1.VOB -c:v h264_videotoolbox -b:v 500k whx-h264-gpu-500k.mp4 |
换成500k码率,速度更快,效果又不行了。
换成1500k码率:
1 | ffmpeg -i VTS_01_1.VOB -c:v h264_videotoolbox -b:v 1500k whx-h264-gpu-1500k.mp4 |
速度挺快,效果很好。
1 | ffmpeg -i VTS_01_1.VOB -c:v h265_videotoolbox -vtag hvc1 whx-x265-gpu.mp4 |
1 | ffmpeg -i VTS_02_1.VOB -c:v hevc_videotoolbox -b:v 1000k -vtag hvc1 whx-x265-gpu.mp4 |
这样h265的gpu编码就失败了。
应该是这个显卡太老了不支持h265的硬解码。
优点:速度贼快
缺点:文件太大
虽然硬盘占用大,但是速度快,决定公用gpu
1 | find ./ -name '*.VOB' -exec bash -c 'ffmpeg -i $0 -c:v h264_videotoolbox -b:v 1500k ${0/VOB/mp4}' {} \; |
摄像机里还有大量拍的视频,都是MPEG2编码的,为了用方便用手机,就复制到硬盘上,然后转换成h265。
1 |
|
摄像机里面复制出来的 MPG 文件都是数字名称没法看出来具体年月,,但是复制出来的在电脑上的创建日期是保留的,修改一下脚本,把年月日记录在转换后的文件名上。
1 | #!/bin/sh |
修改视频码率,设置缩放后的视频大小和码率
1 | ffmpeg -i 浩之宝视频2024-1-9.mp4 -r 15 -b 350k -vcodec libx265 -vtag hvc1 浩之宝视频2024-1-9-350.mp4 |