Skip to content
司马顿的博客
司马顿的博客

司马顿的博客

Drill 1.20配置Hive3存储插件

Posted on 2022年4月4日 By 司马顿

Apache Drill当前版本是1.20,在配置它的Hive存储插件时,一开始我走了不少弯路,没搞成功。后来发现是schema不兼容的问题,当前版本的Drill必须使用Hive3作为存储插件。

所以换了台Hive3的机器重新配置。环境如下:

$ java -version
java version "1.8.0_321"

$ hadoop version
Hadoop 3.3.2

$ hive --version
Hive 3.1.2

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 5.7.37-0ubuntu0.18.04.1 |
+-------------------------+
1 row in set (0.00 sec)

如上,Java用的Oracle Java 1.8;Hadoop和Hive都是版本3;mysql版本是5.7,作为Hive的metastore存储服务。操作系统就是ubuntu 18.04 Linux,是一个KVM虚拟机,配置并不高,2核2G的配置。

上述几个服务都事先安装好。我的Hadoop是安装在本机的伪分布式模式,Hive是安装在本机的Local模式(也就是使用Mysql作为共享metastore服务)。它们默认都安装在/opt这个系统目录下。

接着下载Drill,下载完后解压开,将目录移动到/opt/drill下即可。

用户家目录的.bash_profile文件,包含如下内容:

export JAVA_HOME=/opt/jdk/jdk1.8.0_321

export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

export HIVE_HOME=/opt/hive
export PATH=$HIVE_HOME/bin:$PATH

export DRILL_HOME=/opt/drill
export PATH=$DRILL_HOME/bin:$PATH

这些内容也没什么特别的,指定Java、Hadoop、Hive、Drill的安装路径的环境变量。

因为使用了Mysql作为Hive的metastore服务,不管Hive还是Drill都需要通过JDBC访问Mysql,所以JDBC的驱动器程序,要放置在相关的classpath目录下。执行如下操作:

$ cp mysql-connector-java-8.0.27.jar /opt/hive/lib
$ cp mysql-connector-java-8.0.27.jar /opt/drill/jars/3rdparty/

上述Mysql的连接器程序,在Mysql的官网下载。

因为Hive使用Mysql来存储metadata,这里要稍微配置下。创建或编辑/opt/hive/conf/hive-site.xml,输入如下内容:

<configuration>
        <property>
                <name>javax.jdo.option.ConnectionURL</name>
                <value>jdbc:mysql://localhost/spark?createDatabaseIfNotExist=true</value>
                <description>metadata is stored in a MySQL server</description>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionDriverName</name>
                <value>com.mysql.jdbc.Driver</value>
                <description>MySQL JDBC driver class</description>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionUserName</name>
                <value>spark</value>
                <description>user name for connecting to mysql server</description>
        </property>
        <property>
                <name>javax.jdo.option.ConnectionPassword</name>
                <value>spark123</value>
                <description>password for connecting to mysql server</description>
        </property>

</configuration>

这里的意思是,使用Mysql JDBC来管理metastore存储服务,存储路径是Mysql数据库里名为spark的库。Mysql用户名是spark,密码是spark123。当然,在Mysql刚安装好后,这几个属性要事先配置好。

配置完上述后,运行如下命令来初始化metastore服务:

$ schematool -dbType mysql -initSchema

这里要注意下是否成功,不成功的话检查是啥原因。比如没有拷贝JDBC驱动,或者Mysql权限不对。

为了验证Hive使用Mysql作为metastore是否成功,可以运行hive命令进入交互式shell,创建一个表,比如hivemysql。然后登陆mysql,运行如下查询,看这个表是否存在:

mysql> select TBL_NAME,TBL_TYPE from TBLS;
+-----------+---------------+
| TBL_NAME  | TBL_TYPE      |
+-----------+---------------+
| hivemysql | MANAGED_TABLE |
+-----------+---------------+
1 row in set (0.01 sec)

如上,就说明Mysql管理了Hive的元数据存储服务。

接着,在Linux命令行里 ,打开drill-embedded,即在本机运行一个嵌入式实例:

$ drill-embedded
Apache Drill 1.20.0
"Think different, think Drill."
apache drill> 

进入交互式shell后,暂时不需要执行什么操作。因为这个实例,也打开了一个web端口:8047。我们需要通过web UI来配置存储插件。

打开浏览器,输入:http://ip:8047/storage

可以看到页面左侧是已经激活的存储服务,右侧是默认配置了、但未激活的存储服务。在右侧找到hive存储插件,点击update来更新它的属性。

{
  "type": "hive",
  "configProps": {
    "hive.metastore.sasl.enabled": "false",
    "fs.default.name": "file:///",
    "datanucleus.schema.autoCreateAll": "true",
    "javax.jdo.option.ConnectionURL": "jdbc:mysql://spark:spark123@localhost:3306/spark",
    "hive.metastore.uris": "",
    "hive.metastore.schema.verification": "false",
    "hive.metastore.warehouse.dir": "/tmp/drill_hive_wh"
  },
  "enabled": true
}

这里只更新一个地方即可,就是”javax.jdo.option.ConnectionURL”,指定为我们自己的Mysql的配置,包括metastore的库名、用户名、密码。

更新完后,返回去,点击”Enable”按钮,就激活这个插件了。已经成功激活的插件,出现在页面左侧。

接着,回到drill shell,查看在hive里创建的数据表:

apache drill> use hive;
+------+----------------------------------+
|  ok  |             summary              |
+------+----------------------------------+
| true | Default schema changed to [hive] |
+------+----------------------------------+
1 row selected (10.746 seconds)

apache drill (hive)> show tables;
+--------------+------------+
| TABLE_SCHEMA | TABLE_NAME |
+--------------+------------+
| hive.default | hivemysql  |
+--------------+------------+
1 row selected (3.691 seconds)

apache drill (hive)> select * from hivemysql;
+----+----------+------------+
| id |   name   |    born    |
+----+----------+------------+
| 1  | john doe | 1999-02-02 |
+----+----------+------------+
1 row selected (2.926 seconds)

我们也可以将一个本地表join到Hive的表进行联合查询,比如:

apache drill (dfs.pyh)> use dfs.pyh;
+------+-------------------------------------+
|  ok  |               summary               |
+------+-------------------------------------+
| true | Default schema changed to [dfs.pyh] |
+------+-------------------------------------+
1 row selected (0.324 seconds)

apache drill (dfs.pyh)> select * from mytest t1 left join hive.hivemysql t2 on t1.id=t2.id;
+----+----------+------------+-----+----------+------------+
| id |   name   |    born    | id0 |  name0   |   born0    |
+----+----------+------------+-----+----------+------------+
| 1  | john doe | 1999-02-02 | 1   | john doe | 1999-02-02 |
+----+----------+------------+-----+----------+------------+
1 row selected (1.233 seconds)

这样就在Drill里成功配置了Hive存储插件。

Print this entry

博客 Apache Drill技术

文章导航

Previous post
Next post

Archives

  • 2022 年 9 月 (2)
  • 2022 年 8 月 (2)
  • 2022 年 7 月 (2)
  • 2022 年 6 月 (1)
  • 2022 年 5 月 (4)
  • 2022 年 4 月 (18)
  • 2022 年 3 月 (13)
  • 2022 年 2 月 (6)
  • 2022 年 1 月 (8)
  • 2021 年 12 月 (14)
  • 2021 年 11 月 (7)
  • 2021 年 10 月 (19)
  • 2021 年 9 月 (25)
  • 2021 年 8 月 (45)
  • 2021 年 7 月 (33)
  • 2021 年 6 月 (10)
  • 2021 年 3 月 (2)
  • 2021 年 2 月 (8)
  • 2021 年 1 月 (8)
  • 2020 年 12 月 (20)
  • 2020 年 11 月 (11)
  • 2020 年 10 月 (14)
  • 2020 年 9 月 (33)
  • 2020 年 8 月 (17)
  • 2020 年 7 月 (21)
  • 2020 年 6 月 (20)
  • 2020 年 5 月 (10)
  • 2020 年 4 月 (17)
  • 2020 年 3 月 (18)
  • 2020 年 2 月 (11)
  • 2020 年 1 月 (7)
  • 2019 年 12 月 (13)
  • 2019 年 11 月 (14)
  • 2019 年 10 月 (8)
  • 2019 年 9 月 (9)
  • 2019 年 8 月 (13)
  • 2019 年 7 月 (12)
  • 2019 年 6 月 (20)
  • 2019 年 5 月 (18)
  • 2019 年 4 月 (18)
  • 2019 年 3 月 (11)
  • 2019 年 2 月 (12)
  • 2019 年 1 月 (15)
  • 2018 年 12 月 (15)
  • 2018 年 11 月 (13)
  • 2018 年 10 月 (13)
  • 2018 年 9 月 (21)
  • 2018 年 8 月 (29)
  • 2018 年 7 月 (23)
  • 2018 年 6 月 (21)
  • 2018 年 5 月 (5)

标签

AI (24) Apache Drill (11) 加拿大 (21) 宇宙与人生 (19) 情感 (281) 技术 (75) 抑郁症 (68) 新冠病毒 (13) 汽车 (30) 生活 (333) 职场 (25) 行业观点 (60) 读书文艺 (48)
©2025 司马顿的博客 | WordPress Theme by SuperbThemes