乐趣区

关于开源:Presto-on-Alluxio-By-Alluxio-SDS-单节点搭建

总体架构

急性子,想间接实操的,先绕过这个章节,间接看后边的实操步骤。把环境运行起来再看原理。Presto 的架构如下图所示,client 的申请,会递交给 Coordinator 进行解决,而元数据信息由 HiveMetaStore(HMS) 进行治理。那么表或分区的 location 信息,也在 HMS 中寄存,因而,如果想把表或分区的数据放到其它存储系统里,则不得不批改 HMS 的信息,这减少了 HMS 的保护老本,而且 HMS 是全局共享服务,它批改了,其它计算框架就没有方法放弃拜访原来的门路了。

Alluxio Structure Data Service(SDS) 提供了一个位于 Presto 和底层 HMS 之间的服务,Presto 的 hive-hadoop2 connector 插件能够把 Alluxio master 当做 metadata 服务,而 Alluxio master 中的 SDS 模块会与底层 HMS 通信,获取底层的 metadata,并且做一些解决,返回给 Presto 加工后的后果。Presto 拿到的地位信息,如果是 alluxio 地址,则 Presto 将会从 Alluxio 读取数据,这样实现了不批改 HMS 也能够让 Presto 的拜访转换到 Alluxio 的目标。

搭建过程

本文用以下软件环境进行搭建。因为 hive、presto、alluxio 都是以 hadoop 兼容文件系统 API 进行文件系统拜访,因而底层存储,能够是本地,也能够是 hdfs。本文重点并不是存储系统,因而应用 file sheme,以本地存储为底层存储。如果想应用 hdfs 进行搭建,能够参考“可选项”章节。

配置环境变量

export HADOOP_HOME=/softwares/hadoop-2.8.5
export JAVA_HOME=/usr/java/jdk1.8.0_291-amd64/
export HIVE_CONF_DIR=/softwares/apache-hive-2.3.5-bin/conf
export HIVE_AUX_JARS_PATH=/softwares/apache-hive-2.3.5-bin/lib
export HIVE_HOME=/softwares/apache-hive-2.3.5-bin

搭建过程

搭建 mysql

# 应用主机网络,或导出端口
docker run --net=host  -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
# 创立 hive 用户,明码为 hive
create database metastore;
grant all on metastore.* to [email protected]'%'  identified by 'hive';
grant all on metastore.* to [email protected]'localhost'  identified by 'hive';
flush privileges;

装置 Hive 和 mysql connector

wget https://archive.apache.org/dist/hive/hive-2.3.5/apache-hive-2.3.5-bin.tar.gz
tar -xzvf apache-hive-2.3.5-bin.tar.gz
mv apache-hive-2.3.5-bin /softwares/
mv mysql-connector-java-5.1.38.jar /softwares/apache-hive-2.3.5-bin/lib

以下是相干的配置文件设置。
conf/hive-env.sh

1 export METASTORE_PORT=9083

hive-site.xml

<configuration>
<property>
       <name>javax.jdo.option.ConnectionURL</name>
       <value>jdbc:mysql://127.0.0.1:3306/metastore?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
       <description>JDBC connection string used by Hive Metastore</description>
   </property>
   <property>
       <name>javax.jdo.option.ConnectionDriverName</name>
       <value>com.mysql.jdbc.Driver</value>
        <description>JDBC Driver class</description>
   </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
        <description>Metastore database user name</description>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>hive</value>
        <description>Metastore database password</description>
    </property>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://127.0.0.1:9084</value>
        <description>Thrift server hostname and port</description>
    </property>
 </configuration>

启动 MetaStore

1 bin/schematool -dbType mysql -initSchema hive hive
2 bin/hive --service metastore -p 9083

hive 创立 schema 和 table
/root/testdb/person/person.csv 文件

1 mary 18 1000
2 john 19 1001
3 jack 16 1002
4 luna 17 1003
1 create schema test;
2 create external table test.person(name string, age int, id int) row format delimited fields terminated by '' location'file:///root/testdb/person';

搭建 Presto

装置高版本 JAVA1

# download jdk rpm package
yum localinstall jdk-8u291-linux-x64.rpm
alternatives --config java

装置 Presto

wget https://repo1.maven.org/maven2/com/facebook/presto/presto-server/0.252/presto-server-0.252.tar.gz
tar -xzvf presto-server-0.252.tar.gz
mv presto-server-0.252 /softwares/
mkdir -p /softwares/presto-server-0.252/etc/catalog
# 以下这些配置文件,都须要创立和配置
tree /softwares/presto-server-0.252/etc                  
 ├── catalog
 │   ├── hive.properties
 │   └── jmx.properties
 ├── config.properties
 ├── jvm.config
 ├── log.properties
 └── node.properties

筹备配置文件

node.properties

node.environment=production
node.id=node01
node.data-dir=/softwares/presto-server-0.252/var/presto/data

config.properties

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=2GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://localhost:8080

jvm.config

 -server
 -Xmx4G
 -XX:+UseConcMarkSweepGC
 -XX:+ExplicitGCInvokesConcurrent
 -XX:+CMSClassUnloadingEnabled
 -XX:+AggressiveOpts
 -XX:+HeapDumpOnOutOfMemoryError
 -XX:OnOutOfMemoryError=kill -9 %p
 -XX:ReservedCodeCacheSize=150M

log.properties

com.facebook.presto=INF0

hive.properties

1 connector.name=hive-hadoop2
2 hive.metastore.uri=thrift://localhost:9083

运行 Presto Server

bin/launcher start

运行 presto cli

wget https://repo1.maven.org/maven2/com/facebook/presto/presto-cli/0.252/presto-cli-0.252-executable.jar
chmod +x presto-cli-0.252-executable.jar
mv presto-cli-0.252-executable.jar /softwares/presto-server-0.252/
./presto-cli-0.252-executable.jar --catalog hive --schema test
show schemas from hive;
show tables from hive.test;
select * from hive.test.person;
select count(*) from person;

搭建 Alluxio

装置 Alluxio[略]

  • alluxio-site.properties

    alluxio.master.hostname=localhost

    运行 Alluxio[略]

  • bin/alluxio-start.sh master
  • bin/alluxio table attachdb hive thrift://localhost:9083 test

    ## 重配 Presto 应用 Alluxio SDS

批改 catalog 配置

  • etc/catalog/hive.properties
# connector 还是 hive-hadoop2 是因为 presto 的 hive-hadoop2 插件曾经反对了拜访 Alluxio 的性能
connector.name=hive-hadoop2
hive.metastore=alluxio
hive.metastore.alluxio.master.address=localhost:19998

重启 Presto Server

bin/launcher stop
bin/launcher start

运行 presto cli

./presto-cli-0.252-executable.jar --catalog hive --schema test
show schemas from hive;
show tables from hive.test;
select * from hive.test.person;
select count(*) from person;

察看运行完 sql,对应的 person.csv 文件曾经齐全被加载到 Alluxio 中了。

可选项

搭建 hdfs(如果须要,能够搭建 hdfs)
如果心愿数据放到 hdfs,则能够搭建 hdfs

create schema test_hdfs;
create external table test_hdfs.person(name string, age int, id int) row format delimited fields terminated by '' location'hdfs://localhost:9000/root/testdb/person'; 
./presto-cli-0.252-executable.jar --catalog hive --schema test_hdfs
show schemas from hive;
select * from hive.test_hdfs.person;

总 结

利用 Alluxio SDS,底层的 HMS 中的分区表的 location 无需批改,也就是 HMS 没有任何扭转,其它计算引擎齐全没有变动。而 Presto 通过 Alluxio SDS 提供的元数据服务,能够进行一些定制化的革新,比方某些分区或表不经 Alluxio 拜访,能够返回 原始的 location 信息。

展 望

Alluxio SDS 在 Presto 和 HMS 之间,搭建了一个 Catalog 代理服务,基于此,Alluxio 了解了数据的格局,因而能够做一些数据格式转换,比方 csv 转 parquet,小文件合并。如果还有其它的需要和好想法,也能够进行革新和开发。此外,能够依据本文,实现一个 All-in-one 的 docker image,让更多的公司能够体验到 Alluxio SDS 性能,将会有更多的开发者一起共建这个意义重大的个性。

参 考

https://docs.alluxio.io/os/us…
https://www.alluxio.io/blog/s…

想要获取更多乏味有料的【流动信息】【技术文章】【大咖观点】,请关注 [[Alluxio 智库]](https://page.ma.scrmtech.com/…):

退出移动版