我需要让 hbase 跑在 arm 上
而且想用 docker
所以我写了下面的 Dockerfile
FROM python:3.10-buster RUN . /etc/os-release && cat > /etc/apt/sources.list <<EOF deb http://mirrors.tuna.tsinghua.edu.cn/debian/ ${VERSION_CODENAME} main contrib non-free deb http://mirrors.tuna.tsinghua.edu.cn/debian/ ${VERSION_CODENAME}-updates main contrib non-free deb http://mirrors.tuna.tsinghua.edu.cn/debian/ ${VERSION_CODENAME}-backports main contrib non-free deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-freeEOFRUN apt-get updateRUN apt-get install -y vimRUN apt-get install -y openjdk-11-jdkRUN apt-get install -y wgetWORKDIR /rootRUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-src.tar.gzRUN tar xvf /root/hbase-2.4.17-src.tar.gz
我先跑在 x86 上,看看 ok 不 ok ,所以上面的 java home 是 amd64 的
但是不行
╰─➤ docker run --rm -it ponponon/hbase-arm bash root@97bc49430241:~# cd /root/hbase-2.4.17root@97bc49430241:~/hbase-2.4.17# root@97bc49430241:~/hbase-2.4.17# root@97bc49430241:~/hbase-2.4.17# HBASE_HOME=/root/hbase-2.4.17 JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar bash bin/hbase-daemon.sh start master running master, logging to /root/hbase-2.4.17/logs/hbase--master-97bc49430241.out/root/hbase-2.4.17/bin/hbase-daemon.sh: line 92: kill: (29) - No such processCaused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.master.HMaster
在我的虚拟机上,直接 JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 bash bin/hbase-daemon.sh start master 就行了!
我的虚拟机是 ubuntu18.04,可以直接
sudo apt install openjdk-8-jdk
,所以有 jdk8,但是用的 debian10 已经没有 debian8 了,我就用 jdk11 了
https://hbase.apache.org/book.html#java
不知道是不是因为 jdk11 引起的
应该不是 jdk 的问题,因为我换成 ubuntu20 的镜像之后,安装 jdk8 之后也是不行
FROM ubuntu:focalRUN . /etc/os-release && cat > /etc/apt/sources.list <<EOFdeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiversedeb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverseEOFRUN apt-get updateRUN apt-get install -y vimRUN apt-get install -y openjdk-8-jdkRUN apt-get install -y wgetWORKDIR /rootRUN wget -P /root https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/2.4.17/hbase-2.4.17-src.tar.gzRUN tar xvf /root/hbase-2.4.17-src.tar.gzRUN echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64" | tee -a /etc/profile >/dev/null
注意,这是 arm 版本
docker run --rm -it ponponon/hbase-arm-focal bash
root@d36c7ca4a53d:~/hbase-2.4.17# JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64 bash bin/hbase-daemon.sh start masterrunning master, logging to /root/hbase-2.4.17/bin/../logs/hbase--master-d36c7ca4a53d.out/root/hbase-2.4.17/bin/hbase-daemon.sh: line 92: kill: (267) - No such process
不是用 harisekhon/hbase 是因为在 apple arm mac 上会报错 TTransportException: TTransportException(type=4, message='TSocket read 0 bytes')
version: "3"services: hbase: container_name: hbase image: harisekhon/hbase:2.1 restart: always ports: - "2181:2181" - "8080:8080" - "8085:8085" - "9090:9090" - "9095:9095" - "16000:16000" - "16010:16010" - "16201:16201" - "16020:16020" - "16030:16030" - "16301:16301"
启动容器
─➤ docker-compose up -d [+] Building 0.0s (0/0) [+] Running 1/0 ⠿ Container hbase [+] Running 1/2.1s ⠿ Container hbase [+] Running 1/2.2s ⠿ Container hbase [+] Running 2/2.3s ✔ Container hbase Started0.3s ! hbase The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested 0.0s
使用下面的 python 脚本连接
import happybase# 定义HBase连接信息host = '192.168.38.191' # HBase主机名或IP地址host = '127.0.0.1' # HBase主机名或IP地址port = 9090 # HBase端口,默认为9090# 建立HBase连接connection = happybase.Connection(host=host, port=port)# 获取所有表名table_names = connection.tables()# 删除所有表print('删除所有表')for table_name in table_names: connection.delete_table(table_name, disable=True)table_name = 'my_table' # 表名column_families = { 'cf1': dict(), # 第一个列族 'cf2': dict() # 第二个列族}# 建立HBase连接connection = happybase.Connection(host=host, port=port)# 创建表print('创建表')connection.create_table(table_name, column_families)# 获取表对象table = connection.table(table_name)# 插入数据print('插入数据')row_key = 'row1'data = { 'cf1:column1': 'value1', 'cf1:column2': 'value2', 'cf2:column3': 'value3'}table.put(row_key, data)# 获取数据row = table.row(row_key)print(row)# 扫描数据print('读取数据')scan_result = table.scan(row_start=row_key, row_stop=row_key)for key, value in scan_result: print(key, value)# 删除数据table.delete(row_key)# 关闭连接connection.close()
会报错
─➤ python -u "/Users/ponponon/Desktop/code/me/ideaboom/5.py"Traceback (most recent call last): File "/Users/ponponon/Desktop/code/me/ideaboom/5.py", line 14, in <module> table_names = connection.tables() File "/Users/ponponon/.local/share/virtualenvs/ideaboom-B0dr_aXc/lib/python3.10/site-packages/happybase/connection.py", line 242, in tables names = self.client.getTableNames() File "/Users/ponponon/.local/share/virtualenvs/ideaboom-B0dr_aXc/lib/python3.10/site-packages/thriftpy2/thrift.py", line 219, in _req return self._recv(_api) File "/Users/ponponon/.local/share/virtualenvs/ideaboom-B0dr_aXc/lib/python3.10/site-packages/thriftpy2/thrift.py", line 231, in _recv fname, mtype, rseqid = self._iprot.read_message_begin() File "thriftpy2/protocol/cybin/cybin.pyx", line 463, in cybin.TCyBinaryProtocol.read_message_begin File "thriftpy2/protocol/cybin/cybin.pyx", line 68, in cybin.read_i32 File "thriftpy2/transport/buffered/cybuffered.pyx", line 65, in thriftpy2.transport.buffered.cybuffered.TCyBufferedTransport.c_read File "thriftpy2/transport/buffered/cybuffered.pyx", line 69, in thriftpy2.transport.buffered.cybuffered.TCyBufferedTransport.read_trans File "thriftpy2/transport/cybase.pyx", line 61, in thriftpy2.transport.cybase.TCyBuffer.read_trans File "/Users/ponponon/.local/share/virtualenvs/ideaboom-B0dr_aXc/lib/python3.10/site-packages/thriftpy2/transport/socket.py", line 131, in read raise TTransportException(type=TTransportException.END_OF_FILE,thriftpy2.transport.base.TTransportException: TTransportException(type=4, message='TSocket read 0 bytes')
解决了,可看: 借助 Docker 在 Arm 设备上运行 Hbase
你直接使用hbase的基础镜像不就行了
docker run -d -h 127.0.0.1 -p 2181:2181 -p 8080:8080 -p 8085:8085 -p 9090:9090 -p 9000:9000 -p 9095:9095 -p 16000:16000 -p 16010:16010 -p 16201:16201 -p 16301:16301 -p 16020:16020 --name hbase harisekhon/hbase
如果想自己改造就
Dockerfile
FROM harisekhon/hbasexxxxxxx.......
问题内容: 我目前正在尝试从管道中将groovy脚本作为节点之一运行,但是遇到了以下错误: 另外,我尝试以Groovy的方式安装插件,但由于某种原因,它将无法安装。每当我刷新工具页面时,安装程序就会消失。我安装groovy错误吗?请帮忙! 编辑:相关数据 而且ideainspect.groovy文件是shebang的可执行文件,这可能是问题所在。 问题答案: 您的jenkins用户在使用它时会
问题内容: 我的脚本无法执行并抛出 。为什么这样? Dockerfile: docker-entrypoint.sh: 作品 Dockerfile: 问题答案: 该图像不包含您尝试用shebang调用的图像。您应该将其更改为脚本,或者将其删除。
问题内容: 我正在尝试确定elasticsearch实例是否正在运行,但它似乎不是: 和 和 UPD 我的elasticsearch.log: 问题答案: 当启动失败时,Elasticsearch服务初始化脚本不会在控制台或日志文件上显示任何错误信息,而是荒谬地显示。 您必须使用与初始化脚本相同的用户和参数来手动运行elaticsearch,以检查出了什么问题。错误消息将打印在控制台上。 在安装了
我在进行容器化部署过程中,配置完镜像后发现无法重启docker,一直在重启中,具体如下图所示。 尝试以下三种解决方案,都无法解决问题: 1、通过ps -ef | grep docker 并通过 kill -9 杀死相关进程。 2、重启服务器。 3、通过百度搜索相关资料。
但是只有使用运行它才允许用户通过终端与容器化进程交互。所以我想知道,“分配一个伪tty”是什么意思,因为即使在没有的情况下运行,进程写入的内容也会传递到终端(进程将有一个管道作为stdout,而不是tty)? 我读到这个答案说,您可以运行来获得“终端支持”,例如文本着色等。我已经做了以下实验: 并运行此映像,不使用。因为我是从终端运行它(总是从某个终端运行,不是吗?)我能看到一个红色的“你好世界”
我使用以以下命令开头mysql映像 当docker在后台运行时,另一个应用程序连接到端口3306大约需要一分钟的时间。 之后,我用停止这个容器,然后用启动它。在第二种情况下,使用start命令,应用程序可以连接到端口3306,仅在5秒后。 现在我用从停止的容器中获取快照,并用运行它,但是在这种情况下,应用程序可以在一分钟后连接到mysql2! 所以, 是否有任何方法在运行容器后采取快照,可以在10