本教程提供了一个使用CarbonData的快速介绍。要学习本指南,请从CarbonData网站上下载一个打包的CarbonData版本。另外,也可以按照建立CarbonData的步骤来创建它。
先决条件
CarbonData支持Spark 2.4以下的版本。请从Spark网站下载Spark软件包。
使用以下命令创建一个sample.csv文件。该CSV文件是将数据加载到CarbonData中所需要的。
cd carbondata
cat > sample.csv << EOF
ID,name,city,age
1,David,Shenzhen,31
2,Eason,Shenzhen,27
3,Jarry,Wuhan,35
EOF
融合
与执行引擎的整合
CarbonData可以与Spark、Presto、Flink和Hive执行引擎集成。以下是关于这些执行引擎的安装和配置的指导文件。
Spark
安装和配置CarbonData,使其在本地使用Spark SQL CLI运行
安装和配置CarbonData,使其在本地用Spark Shell运行
安装和配置用于查询执行的CarbonData Thrift服务器
Presto
Hive
与存储引擎的整合
HDFS
S3
Alluxio
安装和配置CarbonData,使其在本地使用Spark SQL CLI运行
这将适用于spark 2.3以上版本。在Spark SQL CLI中,它使用CarbonExtensions在Spark中用CarbonData的解析器、分析器、优化器和物理规划策略规则来定制SparkSession。为了启用CarbonExtensions,我们需要添加以下配置。
key |
value |
spark.sql.extensions |
org.apache.spark.sql.CarbonExtensions |
在Spark目录下运行以下命令,启动Spark SQL CLI。
./bin/spark-sql --conf spark.sql.extensions=org.apache.spark.sql.CarbonExtensions --jars <carbondata assembly jar path>
创建一个表
CREATE TABLE IF NOT EXISTS test_table (
id string,
name string,
city string,
age Int)
STORED AS carbondata;
注意:CarbonExtensions只支持 "STORED AS carbondata "和 "USING carbondata"
加载数据到一个表
LOAD DATA INPATH '/local-path/sample.csv' INTO TABLE test_table;
LOAD DATA INPATH 'hdfs://hdfs-path/sample.csv' INTO TABLE test_table;
insert into table test_table select '1', 'name1', 'city1', 1;
注意:请为上述脚本提供真实的文件路径,即sample.csv如果你遇到 "tablestatus.lock "的问题,请参考《常见问题》。
从一个表查询数据
SELECT * FROM test_table;
SELECT city, avg(age), sum(age)
FROM test_table
GROUP BY city;
安装和配置CarbonData,使其在本地用Spark Shell运行
Apache Spark Shell提供了一个学习API的简单方法,也是一个交互式分析数据的强大工具。请访问Apache Spark文档以了解更多关于Spark shell的细节。
基础知识
选项1:使用CarbonSession(自2.0起被废弃)。
在Spark目录下运行以下命令,启动Spark shell。
./bin/spark-shell --jars <carbondata assembly jar path>
注意:下载CarbonData打包版本的路径或汇编jar将在构建CarbonData后可用,可从./assembly/target/scala-2.1x/apache-carbondata_xxx.jar复制。
在这个Shell中,SparkSession以只读spark的形式出现,Spark context以只读sc的形式出现。
为了创建一个CarbonSession,我们将不得不以下列方式明确配置它。
- 输入以下内容。
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.CarbonSession._
- 创建一个CarbonSession。
val carbon = SparkSession.builder().config(sc.getConf).getOrCreateCarbonSession("<carbon_store_path>")
注意事项
- 默认情况下,元存储位置指向.../carbon.metastore,用户可以向CarbonSession提供自己的元存储位置,如只读
SparkSession.builder().config(sc.getConf).getOrCreateCarbonSession("<carbon_store_path>", "<local metastore path>").
- 数据存储位置可以通过只读<carbon_store_path>来指定,比如只读/carbon/data/store,只读hdfs://localhost:9000/carbon/data/store或只读s3a://carbon/data/store。
选项2:使用SparkSession和CarbonExtensions
在Spark目录下运行以下命令,启动Spark shell。
./bin/spark-shell --conf spark.sql.extensions=org.apache.spark.sql.CarbonExtensions --jars <carbondata assembly jar path>
注意事项
在这个流程中,我们可以使用内置的 SparkSession spark而不是carbon. spark如果需要,我们还可以创建一个新的 SparkSession 而不是内置的 SparkSession 。它需要将“org.apache.spark.sql.CarbonExtensions”添加到spark配置“spark.sql.extensions”中。
SparkSession newSpark = SparkSession
.builder()
.config(sc.getConf)
.enableHiveSupport
.config("spark.sql.extensions","org.apache.spark.sql.CarbonExtensions")
.getOrCreate()
- 数据存储位置可以通过 "spark.sql.warehouse.dir "指定。
执行查询
创建一个表
carbon.sql(
s"""
| CREATE TABLE IF NOT EXISTS test_table(
| id string,
| name string,
| city string,
| age Int)
| STORED AS carbondata
""".stripMargin)
注意:下表中列出了所有支持的语法。
创建表 |
带有CarbonExtensions的SparkSession |
CarbonSession |
存储为carbondata |
是 |
是 |
使用Carbondata |
是 |
是 |
存储于'carbondata'。 |
否 |
是 |
通过'org.apache.carbondata.format'存储。 |
否 |
是 |
我们建议使用CarbonExtensions而不是CarbonSession。
加载数据到一个表
carbon.sql("LOAD DATA INPATH '/path/to/sample.csv' INTO TABLE test_table")
注意:请为上述脚本提供真实的文件路径,即sample.csv。如果你遇到 "tablestatus.lock "的问题,请参考《常见问题》。
从一个表查询数据
carbon.sql("SELECT * FROM test_table").show()
carbon.sql(
s"""
| SELECT city, avg(age), sum(age)
| FROM test_table
| GROUP BY city
""".stripMargin).show()
在独立的Spark集群上安装和配置CarbonData
先决条件
- Hadoop HDFS和Yarn应该被安装和运行。
- Spark应该在所有集群节点上安装和运行。
- CarbonData用户应该有访问HDFS的权限。
程序
1. 构建CarbonData项目,从只读./assembly/target/scala-2.1x/apache-carbondata_xxx.jar中获取汇编jar。
2. 复制./assembly/target/scala-2.1x/apache-carbondata_xxx.jar至$SPARK_HOME/carbonlib文件夹。
注意:如果carbonlib文件夹在$SPARK_HOME路径中不存在,则创建它。
3.在Spark的classpath中添加carbonlib文件夹的路径。(编辑$SPARK_HOME/conf/spark-env.sh文件,修改SPARK_CLASSPATH的值,将$SPARK_HOME/carbonlib/*添加到现有值中)
4.从CarbonData资源库中复制./conf/carbon.properties.template文件到$SPARK_HOME/conf/文件夹,并将文件重命名为carbon.properties。
5.在集群的所有节点上重复步骤2至步骤4。
6.在Spark节点[master]中,在$SPARK_HOME/conf/spark-defaults.conf文件中配置下表中提及的属性。
key |
value |
描述 |
spark.driver.extraJavaOptions |
-Dcarbon.properties.filepath = $SPARK_HOME/conf/carbon.properties |
额外的JVM选项的字符串,以传递给驱动程序。例如,GC设置或其他日志记录。 |
spark.executor.extraJavaOptions |
-Dcarbon.properties.filepath = $SPARK_HOME/conf/carbon.properties |
一串额外的JVM选项,用于传递给执行器。例如,GC设置或其他记录。注意:你可以输入多个用空格分隔的值。 |
7.验证安装。比如说。
./bin/spark-shell
--master spark://HOSTNAME:PORT
--total-executor-cores 2
--executor-memory 2G
注意:
- 属性 "carbon.storelocation "在carbonondata 2.0版本中已被弃用。只有在以前的版本中使用过这个属性的用户在carbon 2.0版本中还可以使用。
- 确保你有CarbonData JARs和文件的权限,驱动和执行器将通过这些文件启动。
在YARN集群的Spark上安装和配置CarbonData
本节提供了在 "Spark on YARN "集群上安装CarbonData的步骤。
先决条件
- Hadoop HDFS和Yarn应该被安装和运行。
- Spark应该在所有的客户机上安装和运行。
- CarbonData用户应该有访问HDFS的权限。
程序
下面的步骤只针对驱动节点。(驱动节点是启动spark上下文的节点。)
1. 构建CarbonData项目,从./assembly/target/scala-2.1x/apache-carbondata_xxx.jar中获取汇编jar并复制到$SPARK_HOME/carbonlib文件夹。
注意:如果在$SPARK_HOME的路径中不存在carbonlib文件夹,则创建它。
2.从CarbonData资源库中复制./conf/carbon.properties.template文件到$SPARK_HOME/conf/文件夹,并将文件重命名为carbon.properties。
3.创建carbonlib文件夹的tar.gz文件,并将其移到carbonlib文件夹内。
cd $SPARK_HOME
tar -zcvf carbondata.tar.gz carbonlib/
mv carbondata.tar.gz carbonlib/
4. 在$SPARK_HOME/conf/spark-defaults.conf文件中配置下表中提到的属性。
属性 |
描述 |
value |
spark.master |
设置这个值是为了在yarn集群模式下运行Spark。 |
设置yarn-client,在yarn集群模式下运行Spark。 |
spark.yarn.dist.files |
以逗号分隔的文件列表,这些文件将被放在每个执行器的工作目录中。 |
$SPARK_HOME/conf/carbon.properties |
spark.yarn.dist.Archives |
以逗号分隔的档案列表,这些档案将被提取到每个执行器的工作目录中。 |
$SPARK_HOME/carbonlib/carbondata.tar.gz |
spark.executor.extraJavaOptions |
一串额外的JVM选项,用于传递给执行者。例如,请注意:你可以输入多个用空格隔开的值。 |
-Dcarbon.properties.filepath = carbon.properties |
spark.executor.extraClassPath |
注意:如果SPARK_CLASSPATH在spark-env.sh中被定义,那么注释它并在下面的参数spark.driver.extraClassPath中添加数值。 |
carbondata.tar.gz/carbonlib/* |
spark.driver.extraClassPath |
额外的classpath条目将被预置到驱动程序的classpath中。注意:如果SPARK_CLASSPATH在spark-env.sh中被定义,那么注释它并在下面的参数spark.driver.extraClassPath中添加该值。 |
$SPARK_HOME/carbonlib/* |
spark.driver.extraJavaOptions |
额外的JVM选项的字符串,以传递给驱动程序。例如,GC设置或其他日志记录。 |
-Dcarbon.properties.filepath = $SPARK_HOME/conf/carbon.properties |
5. 核实安装情况。
./bin/spark-shell
--master yarn-client
--driver-memory 1G
--executor-memory 2G
--executor-cores 2
注意:
- 属性 "carbon.storelocation "在carbonondata 2.0版本中已被弃用。只有在以前的版本中使用过这个属性的用户在carbon 2.0版本中还可以使用。
- 确保你有CarbonData JARs和文件的权限,驱动和执行器将通过这些文件启动。
- 如果使用Spark + Hive 1.1.X,需要在spark-default.conf文件中的参数'spark.sql.hive.metastore.jars'中添加carbondata assembly jar和carbondata-hive jar。
使用CarbonData Thrift服务器进行查询执行
启动CarbonData Thrift服务器。
a. cd $SPARK_HOME
b.运行下面的命令来启动CarbonData thrift服务器。
./bin/spark-submit
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer
$SPARK_HOME/carbonlib/$CARBON_ASSEMBLY_JAR
参数 |
描述 |
例子 |
CARBON_ASSEMBLY_JAR |
在$SPARK_HOME/carbonlib/文件夹中的CarbonData汇编jar名称。 |
apache-carbondata-xx.jar |
c.运行下面的命令,与S3存储一起工作。
./bin/spark-submit //bin/spark-submit
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer class
$SPARK_HOME/carbonlib/$CARBON_ASSEMBLY_JAR <access_key> <secret_key> <endpoint>
参数 |
描述 |
例子 |
CARBON_ASSEMBLY_JAR |
在$SPARK_HOME/carbonlib/文件夹中的CarbonData汇编jar名称。 |
apache-carbondata-xx.jar |
access_key |
S3存储的访问密钥 |
|
secret_key |
S3存储的密匙 |
|
endpoint |
连接到S3存储的端点 |
注意:从Spark 1.6开始,Thrift服务器默认以多会话模式运行。这意味着每个JDBC/ODBC连接都拥有一份自己的SQL配置和临时函数注册表。但缓存表仍然是共享的。如果你喜欢在单会话模式下运行Thrift服务器,并共享所有的SQL配置和临时函数注册表,请将选项spark.sql.hive.thriftServer.singleSession为true。你可以把这个选项添加到spark-defaults.conf中,或者通过--conf把它传递给spark-submit.sh。
./bin/spark-submit
--conf spark.sql.hive.thriftServer.singleSession=true
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer
$SPARK_HOME/carbonlib/$CARBON_ASSEMBLY_JAR
但是在单会话模式下,如果一个用户改变了一个连接的数据库,其他连接的数据库也会被改变。
实例
- 从默认的内存和执行器开始。
./bin/spark-submit
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer
$SPARK_HOME/carbonlib/apache-carbondata-xxx.jar
- 从固定的执行者和资源开始。
./bin/spark-submit
--class org.apache.carbondata.spark.thriftserver.CarbonThriftServer
--num-executors 3
--driver-memory 20G
--executor-memory 250G
--executor-cores 32
$SPARK_HOME/carbonlib/apache-carbondata-xxx.jar
使用Beeline连接到CarbonData Thrift服务器。
cd $SPARK_HOME
./sbin/start-thriftserver.sh
./bin/beeline -u jdbc:hive2://<thriftserver_host>:port
Example
./bin/beeline -u jdbc:hive2://10.10.10.10:10000
在Presto上安装和配置CarbonData
注意:CarbonData表不能被创建,也不能从Presto加载。用户需要创建CarbonData表,并使用Spark或SDK或C++ SDK向其中加载数据。一旦创建了表,就可以从Presto中进行查询。
请参考下面链接的presto指南。
prestodb guide - prestodb
prestosql guide - prestosql
一旦按照上述指南安装了带有carbonData的Presto,你就可以使用协调器上的Presto CLI,使用Presto工作者查询目录中的数据源。
列出可用的模式(数据库)。
show schemas;
选择了CarbonData表所在的模式
use carbonschema;
列出可用的表格
show tables;
从现有的表格中进行查询
select * from carbon_table;
注意:创建表和数据加载应该在执行查询之前完成,因为我们不能从这个界面创建carbon表。