Ubuntu Kylin 上如何用 bcache 实现 SSD 缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu Kylin 上如何用 bcache 实现 SSD 缓存相关的知识,希望对你有一定的参考价值。

参考技术A 最近在台式机上装 Ubuntu Kylin 18.04,台式机有个机械硬盘,感觉用起来很慢,就找了块旧的 128G 的 SSD,想提升一下速度。但毕竟 128G 的盘比较小,于是就想能不能那它做高速缓存,给那个大的机械硬盘提速。

简单查了一下网上的资料,有几个不同的方案,其中 bcache 的方案相对比较成熟,操作上也比较简单,于是就开干。

刚开始,手工做了磁盘分区,然后把 /dev/bcache0 作为根目录来挂载,安装完毕后,系统无法正常启动,于是又查了资料,原来 grub2 并不支持以 bcache 的块类型作为根分区。几番尝试无果后,只好换用其它方案。最终用 LVM 的方案调试成功,下面简单记录方法。

以下命令均需使用 root 身份执行。

选择手工的安装方式,指定 /dev/sda1 为 /boot,/dev/kylin/system 为 /,安装完毕后重启。

将 /dev/sda2 作为存储数据的盘,将 /dev/sdb2 作为缓存。

目的是把之前的 pv 移除,让整个 vg 基于 bcache 运行。

把系统盘从 8G 扩为 100G

以上步骤完成后,重启系统。

在Ubuntu20.04安装Kylin4 On Docker并在DataGrip配置JDBC协议连接容器内Hive1.2.1及Kylin4.0.0

在Ubuntu20.04安装Kylin4 On Docker

前言

最近要迁移老的Kylin任务,特意温习下Kylin。2021年我们已经有十几台机器的Kylin4.0独立集群了,2022年当然也没必要再去部署3.0。还是本着方便挂起虚拟机的原则,单节点部署。

Apache Kylin中文官网:https://kylin.apache.org/cn/

由于Kylin对其它组件依赖比较多,尽管Kylin4.0使用Parquet存储替换了HBase,但部署时还是对版本等有要求。自己玩玩,使用最方便的当然还是Docker方式。

Docker方式安装Kylin4.0参考资料

官网文档:https://kylin.apache.org/cn/docs/install/kylin_docker.html

Docker仓库:https://hub.docker.com/r/apachekylin/apache-kylin-standalone

后续主要根据这2个网址操作。

虚拟机准备

官网有写:为了让 Kylin 能够顺畅的构建 Cube,我们为 Yarn NodeManager 配置的内存资源为 6G,加上各服务占用的内存,请保证容器的内存不少于 8G,以免因为内存不足导致出错。

可以看出Kylin哪怕是单节点安装,且运行在Docker这种非常节省资源的环境,对硬件的配置也有底线。

考虑到这个虚拟机后续可以搞搞SuperSet On Docker、Alluxio On Docker等玩法,该虚拟机分配的资源稍阔绰些:

CPU:12C

内存:24G

硬盘:300G

基础网络

轻车熟路,参照:https://lizhiyong.blog.csdn.net/article/details/126236516

静态IP:192.168.88.23

子网掩码:255.255.255.0

网关:192.168.88.2

DNS:8.8.8.8

禁用IPV6。

更换源

不一定每次都指定阿里云。。。自动选个速度最快的即可。

安装必要命令

sudo apt-get install net-tools
sudo apt-get install openssh-server
sudo apt-get install openssh-client
sudo apt install vim

之后可以使用MobaXterm连接:

zhiyong@zhiyong-docker:~$ hostname
zhiyong-docker
zhiyong@zhiyong-docker:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.23  netmask 255.255.255.0  broadcast 192.168.88.255
        inet6 fe80::20c:29ff:fe35:119b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:35:11:9b  txqueuelen 1000  (以太网)
        RX packets 79777  bytes 115214183 (115.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13454  bytes 1001649 (1.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (本地环回)
        RX packets 3583  bytes 324764 (324.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3583  bytes 324764 (324.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

zhiyong@zhiyong-docker:~$ free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       24007        1063       21506           2        1436       22591
交换:        2047           0        2047

安装Docker

参照之前使用Docker的笔记:lizhiyong.blog.csdn.net/article/details/125055761

zhiyong@zhiyong-docker:~$ docker

Command 'docker' not found, but can be installed with:

sudo apt install docker.io

zhiyong@zhiyong-docker:~$ sudo apt install docker.io
[sudo] zhiyong 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
将会同时安装下列软件:
  bridge-utils containerd git git-man liberror-perl pigz runc ubuntu-fan
建议安装:
  ifupdown aufs-tools btrfs-progs cgroupfs-mount | cgroup-lite debootstrap docker-doc rinse zfs-fuse | zfsutils git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs
  git-mediawiki git-svn
下列【新】软件包将被安装:
  bridge-utils containerd docker.io git git-man liberror-perl pigz runc ubuntu-fan
升级了 0 个软件包,新安装了 9 个软件包,要卸载 0 个软件包,有 303 个软件包未被升级。
需要下载 74.3 MB 的归档。
解压缩后会消耗 372 MB 的额外空间。
您希望继续执行吗? [Y/n] y
获取:1 http://ftp.sjtu.edu.cn/ubuntu focal/universe amd64 pigz amd64 2.4-1 [57.4 kB]
获取:2 http://ftp.sjtu.edu.cn/ubuntu focal/main amd64 bridge-utils amd64 1.6-2ubuntu1 [30.5 kB]
获取:3 http://ftp.sjtu.edu.cn/ubuntu focal-updates/main amd64 runc amd64 1.1.0-0ubuntu1~20.04.1 [3,892 kB]
获取:4 http://ftp.sjtu.edu.cn/ubuntu focal-updates/main amd64 containerd amd64 1.5.9-0ubuntu1~20.04.4 [33.0 MB]
获取:5 http://ftp.sjtu.edu.cn/ubuntu focal-updates/universe amd64 docker.io amd64 20.10.12-0ubuntu2~20.04.1 [31.8 MB]
获取:6 http://ftp.sjtu.edu.cn/ubuntu focal/main amd64 liberror-perl all 0.17029-1 [26.5 kB]
获取:7 http://ftp.sjtu.edu.cn/ubuntu focal-updates/main amd64 git-man all 1:2.25.1-1ubuntu3.5 [886 kB]
获取:8 http://ftp.sjtu.edu.cn/ubuntu focal-updates/main amd64 git amd64 1:2.25.1-1ubuntu3.5 [4,557 kB]
获取:9 http://ftp.sjtu.edu.cn/ubuntu focal-updates/main amd64 ubuntu-fan all 0.12.13ubuntu0.1 [34.4 kB]
已下载 74.3 MB,耗时 12(6,102 kB/s)
正在预设定软件包 ...
正在选中未选择的软件包 pigz。
(正在读取数据库 ... 系统当前共安装有 151688 个文件和目录。)
准备解压 .../0-pigz_2.4-1_amd64.deb  ...
正在解压 pigz (2.4-1) ...
正在选中未选择的软件包 bridge-utils。
准备解压 .../1-bridge-utils_1.6-2ubuntu1_amd64.deb  ...
正在解压 bridge-utils (1.6-2ubuntu1) ...
正在选中未选择的软件包 runc。
准备解压 .../2-runc_1.1.0-0ubuntu1~20.04.1_amd64.deb  ...
正在解压 runc (1.1.0-0ubuntu1~20.04.1) ...
正在选中未选择的软件包 containerd。
准备解压 .../3-containerd_1.5.9-0ubuntu1~20.04.4_amd64.deb  ...
正在解压 containerd (1.5.9-0ubuntu1~20.04.4) ...
正在选中未选择的软件包 docker.io。
准备解压 .../4-docker.io_20.10.12-0ubuntu2~20.04.1_amd64.deb  ...
正在解压 docker.io (20.10.12-0ubuntu2~20.04.1) ...
正在选中未选择的软件包 liberror-perl。
准备解压 .../5-liberror-perl_0.17029-1_all.deb  ...
正在解压 liberror-perl (0.17029-1) ...
正在选中未选择的软件包 git-man。
准备解压 .../6-git-man_1%3a2.25.1-1ubuntu3.5_all.deb  ...
正在解压 git-man (1:2.25.1-1ubuntu3.5) ...
正在选中未选择的软件包 git。
准备解压 .../7-git_1%3a2.25.1-1ubuntu3.5_amd64.deb  ...
正在解压 git (1:2.25.1-1ubuntu3.5) ...
正在选中未选择的软件包 ubuntu-fan。
准备解压 .../8-ubuntu-fan_0.12.13ubuntu0.1_all.deb  ...
正在解压 ubuntu-fan (0.12.13ubuntu0.1) ...
正在设置 runc (1.1.0-0ubuntu1~20.04.1) ...
正在设置 liberror-perl (0.17029-1) ...
正在设置 bridge-utils (1.6-2ubuntu1) ...
正在设置 pigz (2.4-1) ...
正在设置 git-man (1:2.25.1-1ubuntu3.5) ...
正在设置 containerd (1.5.9-0ubuntu1~20.04.4) ...
Created symlink /etc/systemd/system/multi-user.target.wants/containerd.service → /lib/systemd/system/containerd.service.
正在设置 ubuntu-fan (0.12.13ubuntu0.1) ...
Created symlink /etc/systemd/system/multi-user.target.wants/ubuntu-fan.service → /lib/systemd/system/ubuntu-fan.service.
正在设置 docker.io (20.10.12-0ubuntu2~20.04.1) ...
正在添加组"docker" (GID 134)...
完成。
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /lib/systemd/system/docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/docker.socket → /lib/systemd/system/docker.socket.
正在设置 git (1:2.25.1-1ubuntu3.5) ...
正在处理用于 man-db (2.9.1-1) 的触发器 ...
正在处理用于 systemd (245.4-4ubuntu3.15) 的触发器 ...
zhiyong@zhiyong-docker:~$ ps -ef | grep docker
avahi        808       1  0 23:03 ?        00:00:00 avahi-daemon: running [zhiyong-docker.local]
root        7954       1  0 23:21 ?        00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
zhiyong    11004    7409  0 23:22 pts/1    00:00:00 grep --color=auto docker
zhiyong@zhiyong-docker:~$

此时Docker安装成功。接下来就可以准备部署Docker应用。

部署Kylin4.0 On Docker

拉取镜像

官方提供了 Kylin 的 docker 镜像。该镜像中,Kylin 依赖的各个服务均已正确的安装及部署,包括:

  • JDK 1.8
  • Hadoop 2.8.5
  • Hive 1.2.1
  • Spark 2.4.7
  • Kafka 1.1.1
  • MySQL 5.1.73
  • Zookeeper 3.4.6

目前最新的也就是4.0.0。所谓的MDX for Kylin也笔者暂时也用不到。

直接执行命令:

zhiyong@zhiyong-docker:~$ sudo docker pull apachekylin/apache-kylin-standalone:4.0.0

Docker就会慢慢拉取镜像。

如果嫌慢,可以配置阿里云加速:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

笔者以七牛云加速为例。实测还是阿里云镜像加速效果更好,能跑满宽带。

配置镜像加速

zhiyong@zhiyong-docker:~$ sudo su root
root@zhiyong-docker:/home/zhiyong# cd /etc/docker/
root@zhiyong-docker:/etc/docker# ll
总用量 20
drwxr-xr-x   2 root root  4096 97 23:21 ./
drwxr-xr-x 132 root root 12288 97 23:21 ../
-rw-------   1 root root   244 97 23:21 key.json
root@zhiyong-docker:/etc/docker# echo '"registry-mirrors":["https://reg-mirror.qiniu.com/"]' > daemon.json
root@zhiyong-docker:/etc/docker# ll
总用量 24
drwxr-xr-x   2 root root  4096 97 23:35 ./
drwxr-xr-x 132 root root 12288 97 23:21 ../
-rw-r--r--   1 root root    55 97 23:35 daemon.json
-rw-------   1 root root   244 97 23:21 key.json
root@zhiyong-docker:/etc/docker# sudo systemctl daemon-reload
root@zhiyong-docker:/etc/docker# sudo systemctl restart docker
root@zhiyong-docker:/etc/docker# sudo docker info
Client:
 Context:    default
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 20.10.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version:
 runc version:
 init version:
 Security Options:
  apparmor
  seccomp
   Profile: default
 Kernel Version: 5.13.0-30-generic
 Operating System: Ubuntu 20.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 12
 Total Memory: 23.44GiB
 Name: zhiyong-docker
 ID: BT73:D4XX:EQJN:6ZOB:LMF7:K6YE:U3VN:TME3:HIVO:DDRP:BEKK:Y6E6
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:
  https://reg-mirror.qiniu.com/
 Live Restore Enabled: false

root@zhiyong-docker:/etc/docker#

可以看到配置七牛云镜像加速成功。速度能比Docker官方镜像仓库稍微快那么一点点。

查看镜像

下载完成后:

zhiyong@zhiyong-docker:~$ sudo docker pull apachekylin/apache-kylin-standalone:4.0.0
4.0.0: Pulling from apachekylin/apache-kylin-standalone
2d473b07cdd5: Pull complete
420a840dbfa1: Pull complete
53f5b18c707b: Pull complete
4e7bcf530536: Pull complete
0b72a391435e: Pull complete
50b0a292a6cc: Pull complete
961f953b1f61: Pull complete
6b76d63844e3: Pull complete
c42f2ce1e3c3: Pull complete
545e34eecbb3: Pull complete
c69e9d45594b: Pull complete
8e79003dcad2: Pull complete
533f278beae5: Pull complete
71b18763d752: Pull complete
8c5468aecb0f: Pull complete
1044ffbcd7bd: Pull complete
0e91243d45af: Pull complete
4a58d841afb3: Pull complete
2594269b8824: Pull complete
32cede976e49: Pull complete
43a83512c2ff: Pull complete
8aacfe026ff7: Pull complete
2ee975072607: Pull complete
902d2c90f166: Pull complete
60419e46d0e0: Pull complete
d0766e3e2d02: Pull complete
bea555677108: Pull complete
f80dcbba5b8e: Pull complete
382d7a63a75e: Pull complete
a650cbb46a0f: Pull complete
Digest: sha256:a52a723eb84981dd5e8082c368965af32a84972df4047643cc063562b314e97a
Status: Downloaded newer image for apachekylin/apache-kylin-standalone:4.0.0
docker.io/apachekylin/apache-kylin-standalone:4.0.0

执行:

zhiyong@zhiyong-docker:~$ sudo docker images
REPOSITORY                            TAG       IMAGE ID       CREATED         SIZE
apachekylin/apache-kylin-standalone   4.0.0     a8a5fd0c0497   12 months ago   3.41GB

镜像大概3.4个G的样子,不算小。可以看到Kylin4.0的单节点部署镜像拉取成功。

尝试启动容器

根据官方文档,执行:

docker run -d \\
-m 8G \\
-p 7070:7070 \\
-p 8088:8088 \\
-p 50070:50070 \\
-p 8032:8032 \\
-p 8042:8042 \\
-p 2181:2181 \\
apachekylin/apache-kylin-standalone:4.0.0

在容器启动时,会自动启动以下服务:

  • NameNode, DataNode
  • ResourceManager, NodeManager
  • Kylin

并自动运行 $KYLIN_HOME/bin/sample.sh .

容器启动后,我们可以通过 “docker exec -it <container_id> bash” 命令进入容器内。当然,由于我们已经将容器内指定端口映射到本机端口,我们可以直接在本机浏览器中打开各个服务的页面,如:

现在就来启动一下试试效果:

zhiyong@zhiyong-docker:~$ sudo docker run -d \\
> -m 8G \\
> -p 7070:7070 \\
> -p 8088:8088 \\
> -p 50070:50070 \\
> -p 8032:8032 \\
> -p 8042:8042 \\
> -p 2181:2181 \\
> apachekylin/apache-kylin-standalone:4.0.0
2c165b6f19ec9cbb2b548c782bdf62acfe48d0e067b1f52573f3099a2a09d960

镜像比较大,启动比较慢:

zhiyong@zhiyong-docker:~$ free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       24007        1453       17289           2        5263       22171
交换:        2047           0        2047
zhiyong@zhiyong-docker:~$ free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       24007        2037       16703           2        5265       21586
交换:        2047           0        2047
zhiyong@zhiyong-docker:~$ free -m
              总计         已用        空闲      共享    缓冲/缓存    可用
内存:       24007        2949       15779           2        5278       20675
交换:        2047           0        2047
zhiyong@zhiyong-docker:~$ sudo docker ps -a
CONTAINER ID   IMAGE                                       COMMAND                  CREATED              STATUS              PORTS                                                                                                                                                                                                                                                                  NAMES
2c165b6f19ec   apachekylin/apache-kylin-standalone:4.0.0   "/home/admin/entrypo…"   About a minute ago   Up About a minute   0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 0.0.0.0:7070->7070/tcp, :::7070->7070/tcp, 0.0.0.0:8032->8032/tcp, :::8032->8032/tcp, 0.0.0.0:8042->8042/tcp, :::8042->8042/tcp, 0.0.0.0:8088->8088/tcp, :::8088->8088/tcp, 0.0.0.0:50070->50070/tcp, :::50070->50070/tcp   nice_gould
zhiyong@zhiyong-docker:~$

验证运行情况

验证Kylin

使用Ubuntu自带的火狐进入:127.0.0.1:7070/kylin/login

可以看到已经有登录界面。

由于启动镜像时对外暴露了端口,所以宿主机访问虚拟机的IP,也可以访问到容器:

Kylin默认的用户名和密码:

ADMIN
KYLIN

验证HDFS

使用50070端口可以访问到HDFS的web UI,显然HDFS正常。

验证YARN

可以看到通过8088端口访问到了YARN的WebUI,显然YARN正常。

进入容器

现在可以进入容器看看容器内部状况:

zhiyong@zhiyong-docker:~$ sudo docker ps -a
CONTAINER ID   IMAGE                                       COMMAND                  CREATED          STATUS          PORTS                                                                                                                                                                                                                                                                  NAMES
2c165b6f19ec   apachekylin/apache-kylin-standalone:4.0.0   "/home/admin/entrypo…"   17 minutes ago   Up 17 minutes   0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 0.0.0.0:7070->7070/tcp, :::7070->7070/tcp, 0.0.0.0:8032->8032/tcp, :::8032->8032/tcp, 0.0.0.0:8042->8042/tcp, :::8042->8042/tcp, 0.0.0.0:8088->8088/tcp, :::8088->8088/tcp, 0.0.0.0:50070->50070/tcp, :::50070->50070/tcp   nice_gould
zhiyong@zhiyong-docker:~$ sudo docker exec -ti 2c165b6f19ec /bin/bash
[root@2c165b6f19ec admin]# jps
480 JobHistoryServer
420 NodeManager
12932 CoarseGrainedExecutorBackend
12405 ExecutorLauncher
9944 Bootstrap
536 QuorumPeerMain
154 NameNode
331 ResourceManager
14044 Jps
253 DataNode
[root@2c165b6f19ec /]# cd /home/admin/
[root@2c165b6f19ec admin]# ll
total 76
drwxr-xr-x 1 root root  4096 Sep  8  2021 apache-hive-1.2.1-bin
drwxr-xr-x 1 root root  4096 Sep  7 15:55 apache-kylin-4.0.0-bin-spark2
drwxr-xr-x 1 root root  4096 Sep  8  2021 apache-maven-3.6.1
-rwxr--r-- 1 root root  3836 Sep  8  2021 entrypoint.sh
-rw-r--r-- 1 root root     0 Sep  7 15:54 first_run
drwxr-xr-x 1 1001 1001  4096 Sep  7 15:51 hadoop-2.8.5
drwxr-xr-x 8   10  143  4096 Jul 12  2017 jdk1.8.0_141
drwxr-xr-x 6 root root  4096 Jul  7  2018 kafka_2.11-1.1.1
-rw-r--r-- 1 root root 26024 Apr 24  2019 mysql80-community-release-el7-3.noarch.rpm
drwxr-xr-x 1 1000 1000  4096 Sep  8  2020 spark-2.4.7-bin-hadoop2.7
drwxr-xr-x 1 1000 1000  4096 Feb 20  2014 zookeeper-3.4.6
-rw-r--r-- 1 root root  5546 Sep  7 15:55 zookeeper.out
[root@2c165b6f19ec admin]# hive
ls: cannot access /home/admin/spark-2.4.7-bin-hadoop2.7/lib/spark-assembly-*.jar: No such file or directory

Logging initialized using configuration in jar:file:/home/admin/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties
hive> show databases;
OK
default
kylin4
Time taken: 1.011 seconds, Fetched: 2 row(s)
hive> use kylin4;
OK
Time taken: 0.041 seconds
hive> show tables;
OK
kylin_account
kylin_cal_dt
kylin_category_groupings
kylin_country
kylin_sales
Time taken: 0.038 seconds, Fetched: 5 row(s)
hive> exit
    > ;
[root@2c165b6f19ec bin]# cd /home/admin/apache-hive-1.2.1-bin/bin
[root@2c165b6f19ec bin]# ll
total 32
-rwxr-xr-x 1 root root 1031 Apr 29  2015 beeline
drwxr-xr-x 3 root root 4096 Sep  8  2021 ext
-rwxr-xr-x 1 root root 7844 May  7  2015 hive
-rwxr-xr-x 1 root root 1900 Apr 29  2015 hive-config.sh
-rwxr-xr-x 1 root root  885 Apr 29  2015 hiveserver2
-rwxr-xr-x 1 root root  832 Apr 29  2015 metatool
-rwxr-xr-x 1 root root  884 Apr 29  2015 schematool

可以看到已经安装了jps。并且在家目录下放置了安装包。

执行hive命令也可用,且当前镜像已经有一个kylin的库及5个案例Hive表。

目前并没有启动Hive Server2,笔者感觉有必要启动一下,这样之后拿来用JDBC灌数据就异常方便。

尝试启动Hive

[root@2c165b6f19ec ~]# hive --service metastore
ls: cannot access /home/admin/spark-2.4.7-bin-hadoop2.7/lib/spark-assembly-*.jar: No such file or directory
Starting Hive Metastore Server
^C[root@2c165b6f19ec ~]#

然鹅一切都没有想象中那么美好。居然找不到Jar包。

[root@2c165b6f19ec jars]# pwd
/home/admin/spark-2.4.7-bin-hadoop2.7/jars
[root@2c165b6f19ec jars]# ll | grep spark
-rw-r--r-- 1 1000 1000   138464 Sep  8  2020 hive-beeline-1.2.1.spark2.jar
-rw-r--r-- 1 1000 1000    40817 Sep  8  2020 hive-cli-1.2.1.spark2.jar
-rw-r--r-- 1 1000 1000 11498852 Sep  8  2020 hive-exec-1.2.1.spark2.jar
-rw-r--r-- 1 1000 1000   100680 Sep  8  2020 hive-jdbc-1.2.1.spark2.jar
-rw-r--r-- 1 1000 1000  5505200 Sep  8  2020 hive-metastore-1.2.1.spark2.jar
-rw-r--r-- 1 1000 1000 10287757 Sep  8  2020 spark-catalyst_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000 13548861 Sep  8  2020 spark-core_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000   708179 Sep  8  2020 spark-graphx_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000  1815976 Sep  8  2020 spark-hive-thriftserver_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000  1358996 Sep  8  2020 spark-hive_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000   537511 Sep  8  2020 spark-kubernetes_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000    57068 Sep  8  2020 spark-kvstore_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000    75941 Sep  8  2020 spark-launcher_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000   687099 Sep  8  2020 spark-mesos_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000   184063 Sep  8  2020 spark-mllib-local_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000  8031568 Sep  8  2020 spark-mllib_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000  2393989 Sep  8  2020 spark-network-common_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000    70901 Sep  8  2020 spark-network-shuffle_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000   137643 Sep  8  2020 spark-repl_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000    30065 Sep  8  2020 spark-sketch_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000  9921235 Sep  8  2020 spark-sql_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000  2174086 Sep  8  2020 spark-streaming_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000     9287 Sep  8  2020 spark-tags_2.11-2.4.7-tests.jar
-rw-r--r-- 1 1000 1000    15461 Sep  8  2020 spark-tags_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000    49993 Sep  8  2020 spark-unsafe_2.11-2.4.7.jar
-rw-r--r-- 1 1000 1000   674583 Sep  8  2020 spark-yarn_2.11-2.4.7.jar
[root@2c165b6f19ec jars]#

可以看到还是有不少lib的Jar包可以用。

[root@2c165b6f19ec bin]# pwd
/home/admin/apache-hive-1.2.1-bin/bin
[root@2c165b6f19ec bin]# ll
total 32
-rwxr-xr-x 1 root root 1031 Apr 29  2015 beeline
drwxr-xr-x 3 root root 4096 Sep  8  2021 ext
-rwxr-xr-x 1 root root 7844 May  7  2015 hive
-rwxr-xr-x 1 root root 1900 Apr 29  2015 hive-config.sh
-rwxr-xr-x 1 root root  885 Apr 29  2015 hiveserver2
-rwxr-xr-x 1 root root  832 Apr 29  2015 metatool
-rwxr-xr-x 1 root root  884 Apr 29  2015 schematool
[root@2c165b6f19ec bin]# vi hive

显然这一段配置有问题:

    113 # add Spark assembly jar to the classpath
    114 if [[ -n "$SPARK_HOME" ]]
    115 then
    116   sparkAssemblyPath=`ls $SPARK_HOME/lib/spark-assembly-*.jar`
    117   CLASSPATH="$CLASSPATH:$sparkAssemblyPath"

将其修改为:

sparkAssemblyPath=`ls $SPARK_HOME/jars/spark-*.jar`

重新尝试:

[root@2c165b6f19ec bin]# hive --service metastore
Starting Hive Metastore Server
^C[root@2c165b6f19ec bin]# hive --service metastore > /dev/null 2>&1 &
[1] 17198
[root@2c165b6f19ec bin]# netstat -atunlp | grep 9083
tcp        0      0 0.0.0.0:9083            0.0.0.0:*               LISTEN      17198/java
[root@2c165b6f19ec bin]# jps
480 JobHistoryServer
17281 Jps
420 NodeManager
12932 CoarseGrainedExecutorBackend
12405 ExecutorLauncher
9944 Bootstrap
536 QuorumPeerMain
154 NameNode
331 ResourceManager
253 DataNode
17198 RunJar
[root@2c165b6f19ec bin]# hiveserver2 > /dev/null 2>&1 &
[2] 17375
[root@2c165b6f19ec bin]# jps
480 JobHistoryServer
420 NodeManager
12932 CoarseGrainedExecutorBackend
12405 ExecutorLauncher
9944 Bootstrap
536 QuorumPeerMain
154 NameNode
331 ResourceManager
17435 Jps
253 DataNode
17198 RunJar
17375 RunJar
[root@2c165b6f19ec bin]#

可以看到后台启动了2个Jar包。

使用BeeLine连接:

[root@2c165b6f19ec conf]# beeline -u jdbc:hive2://localhost:10000/ -n root
Connecting to jdbc:hive2://localhost:10000/
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.2.1 by Apache Hive
0: jdbc:hive2://localhost:10000/> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| default        |
| kylin4         |
+----------------+--+
2 rows selected (1.716 seconds)
0: jdbc:hive2://localhost:10000/> exit;
Error: Error while compiling statement: FAILED: ParseException line 1:0 cannot recognize input near 'exit' '<EOF>' '<EOF>' (state=42000,code=40000)
0: jdbc:hive2://localhost:10000/> !quit
Closing: 0: jdbc:hive2://localhost:10000/
[root@2c165b6f19ec conf]#

可以看到此时可以正常使用。

重新启动容器

之前启动时没有暴露3306、9083、10000这3个重要端口,现在需要重新启动镜像,以便对Hive进行一些操作。

停止容器

Closing: 0: jdbc:hive2://localhost:10000/
[root@2c165b6f19ec conf]# exit
exit
zhiyong@zhiyong-docker:~$ sudo docker ps -a
[sudo] zhiyong 的密码:
CONTAINER ID   IMAGE                                       COMMAND                  CREATED             STATUS             PORTS                                                                                                                             

以上是关于Ubuntu Kylin 上如何用 bcache 实现 SSD 缓存的主要内容,如果未能解决你的问题,请参考以下文章

mssqlserver 2005 在本机上如何用本机的外网连接数据库引擎 linux下的java程序如何访问mssqlserver数据库

如何用Apache Kylin让Hive表查询提速千百倍

Ubuntu16.04下Kylin的安装与配置

U盘安装Ubuntu kylin版

ubuntu kylin14.04卸载文泉字体后系统字体全变了

linux bcache