在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                                                                                                                                                                                                                                                                  NAMES
2c165b6f19ec   apachekylin/apache-kylin-standalone:4.0.0   "/home/admin/entrypo…"   About an hour ago   Up About an hour   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 stop 2c165b6f19ec
2c165b6f19ec
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 an hour ago   Exited (137) 3 seconds ago             nice_gould

提交容器

zhiyongzhiyong@zhiyong-docker:~$ sudo docker commit 2c165b6f19ec kylin_hive:v1.0.0
sha256:bc0c4e146857ccd55b22c772eae5a04e7cb2d007c325ece2aa4f073f6e605732
zhiyong@zhiyong-docker:~$ sudo docker images
REPOSITORY                            TAG       IMAGE ID       CREATED         SIZE
kylin_hive                            v1.0.0    bc0c4e146857   6 seconds ago   4.48GB
apachekylin/apache-kylin-standalone   4.0.0     a8a5fd0c0497   12 months ago   3.41GB
zhiyong@zhiyong-docker:~$

可以看到容器体积增大了1个G。。。

启动新容器

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 \
> -p 3306:3306 \
> -p 9083:9083 \
> -p 10000:10000 \
> kylin_hive/v1.0.0
Unable to find image 'kylin_hive/v1.0.0:latest' locally
^C
zhiyong@zhiyong-docker:~$ sudo docker images
REPOSITORY                            TAG       IMAGE ID       CREATED         SIZE
kylin_hive                            v1.0.0    bc0c4e146857   4 minutes ago   4.48GB
apachekylin/apache-kylin-standalone   4.0.0     a8a5fd0c0497   12 months ago   3.41GB
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 \
> -p 3306:3306 \
> -p 9083:9083 \
> -p 10000:10000 \
> bc0c4e146857
778198dd36a26bbd8355a498204adc46adc3c301d04f2071d8b0628db2791981
zhiyong@zhiyong-docker:~$ sudo docker ps -a
CONTAINER ID   IMAGE                                       COMMAND                  CREATED          STATUS                       PORTS                                                                                                                                                                                                                                                                                                                                                                                                       NAMES
778198dd36a2   bc0c4e146857                                "/home/admin/entrypo…"   55 seconds ago   Up 54 seconds                0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 0.0.0.0:3306->3306/tcp, :::3306->3306/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:9083->9083/tcp, :::9083->9083/tcp, 0.0.0.0:10000->10000/tcp, :::10000->10000/tcp, 0.0.0.0:50070->50070/tcp, :::50070->50070/tcp   zen_darwin
2c165b6f19ec   apachekylin/apache-kylin-standalone:4.0.0   "/home/admin/entrypo…"   2 hours ago      Exited (137) 9 minutes ago                                                                                                                                                                                                                                                                                                                                                                                                               nice_gould
zhiyong@zhiyong-docker:~$

居然找不到本地镜像。。。醉了,但是用镜像ID可以启动。

进入新容器

再进新容器看看:

zhiyong@zhiyong-docker:~$ sudo docker exec -ti 778198dd36a2 /bin/bash
[root@778198dd36a2 admin]# jps
3600 Bootstrap
642 QuorumPeerMain
6836 Jps
52 NameNode
405 JobHistoryServer
327 NodeManager
6567 CoarseGrainedExecutorBackend
265 ResourceManager
154 DataNode
6044 ExecutorLauncher
[root@778198dd36a2 admin]#

可以看到之前做的修改貌似没有生效。先去检查配置文件:

[root@778198dd36a2 admin]# cd /home/admin/apache-hive-1.2.1-bin/bin
[root@778198dd36a2 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 7836 Sep  7 16:40 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@778198dd36a2 bin]# vi hive

发现配置文件的修改被成功保存:

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

只需要重启Hive的MetaStore和HiveServer2:

[root@778198dd36a2 ~]# hive --service metastore > /dev/null 2>&1 &
[1] 7181
[root@778198dd36a2 ~]# netstat -atunlp | grep 9083
tcp        0      0 0.0.0.0:9083            0.0.0.0:*               LISTEN      7181/java
[root@778198dd36a2 ~]# jps
3600 Bootstrap
642 QuorumPeerMain
52 NameNode
405 JobHistoryServer
327 NodeManager
6567 CoarseGrainedExecutorBackend
265 ResourceManager
154 DataNode
6044 ExecutorLauncher
7181 RunJar
7263 Jps
[root@778198dd36a2 ~]# hiveserver2 > /dev/null 2>&1 &
[2] 7294
[root@778198dd36a2 ~]# jps
3600 Bootstrap
642 QuorumPeerMain
52 NameNode
405 JobHistoryServer
327 NodeManager
6567 CoarseGrainedExecutorBackend
265 ResourceManager
154 DataNode
7355 Jps
6044 ExecutorLauncher
7181 RunJar
7294 RunJar
[root@778198dd36a2 ~]# 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.571 seconds)
0: jdbc:hive2://localhost:10000> !quit
Closing: 0: jdbc:hive2://localhost:10000
[root@778198dd36a2 ~]#

使用DataGrip连接容器的Hive

在这里插入图片描述

报错内容:

Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{set:hiveconf:hive.server2.thrift.resultset.default.fetch.size=1000, use:database=default}).

显然是驱动包的版本太新了【3.1.2】,容器中还是老古董【1.2.1】,手动下载个老版本的Jar包:

在这里插入图片描述

使用Maven的Jar包是不行的,缺少很多依赖,需要下载hive-jdbc-1.2.1-standalone以及hadoop的Jar包【Hive的Jar包务必版本完全一致;Hadoop的Jar包不必版本完全一致,但是不能缺少】:

在这里插入图片描述

必须先删除高版本Hive的Jar包!!!

必须先删除高版本Hive的Jar包!!!

必须先删除高版本Hive的Jar包!!!

重要的话说三遍!!!

在这里插入图片描述

之后就可以正常使用:

在这里插入图片描述

一步一个坑。。。至此,Kylin On Docker部署完毕,且实现了宿主机走JDBC连接虚拟机容器内的Hive。

使用DataGrip连接容器的Kylin

DataGrip默认是不支持Kylin的!!!需要自行实现相关功能。

参照官网:https://kylin.apache.org/cn/docs/tutorial/jdbc.html

URL格式:

jdbc:kylin://<hostname>:<port>/<kylin_project_name>

例如笔者的虚拟机内的容器就是:

jdbc:kylin://192.168.88.23:7070/learn_kylin

但是笔者的虚拟机容器内是Kylin4.0.0,不是古代的Kylin3,所以Jar包要更换。

Kylin官方下载地址:https://kylin.apache.org/download/

Maven仓库Guava下载地址:https://repo1.maven.org/maven2/com/google/guava/guava/19.0/guava-19.0.jar

找到对应的Spark2的Kylin4安装包,解压后即可找到所需的Jar包【kylin-jdbc和kylin-tool】。正确配置后即可走JDBC用SQL的方式操作Kylin。

笔者将3个Jar包copy到DataGrip的默认路径:

C:\Users\zhiyong\AppData\Roaming\JetBrains\Datagrip2021.3\jdbc-drivers\Kylin\4.0.1

此时测试连接还会报错:

未找到驱动程序类 ‘javax.xml.bind.DatatypeConverter’。。。还需要一个依赖Jar包:

https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar

在这里插入图片描述

之后可以使用自定义的JDBC驱动:

在这里插入图片描述

用户名密码和web UI的Login界面一致:

ADMIN
KYLIN

此时已经能读到Kylin自带的表数据:

在这里插入图片描述

至此基础环境准备完毕,可以愉快地温习Kylin了,好久没用还是手生。

转载请注明出处:https://lizhiyong.blog.csdn.net/article/details/126761470
在这里插入图片描述

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值