cdh上使用spark-thriftserver操作carbondata

来源:互联网 发布:山东广电网络集团上市 编辑:程序博客网 时间:2024/06/06 05:53

carbondata 是一种新型的适用于分布式计算的列式文件格式,本次使用spark-thrift方式来操作carbondata,简略介绍如何启动spark-carbondata-thriftserver。

版本

  • cdh 5.10.3
  • spark 2.1.0
  • carbondata 1.2.0

下载

  • spark https://archive.apache.org/dist/spark/spark-2.1.0/spark-2.1.0-bin-hadoop2.6.tgz
  • carbondata https://dist.apache.org/repos/dist/release/carbondata/1.2.0/apache-carbondata-1.2.0-source-release.zip

carbondata 编译

编译环境为: jdk-1.8.0_151,maven-3.5.2(低版本的没试过,但是官方说最低:jdk7,maven3.3)

unzip apache-carbondata-1.2.0-source-release.zip
cd carbondata-parent-1.2.0
mvn -DskipTests -Pspark-2.1 -Dspark.version=2.1.0 clean package

编译成功后,会在carbondata-parent-1.2.0/assembly/target/scala-2.11/目录下出现carbondata_2.11-1.2.0-shade-hadoop2.2.0.jar(编译版本不同,jar包名称可能不一样)

启动步骤

NOTE:
1.下面的命令中,hdfs的/carbondata目录如果启动用户没有创建权限,需要用hdfs用户去创建并用chmod 命令给与用户权限读写权限。
2.启动节点不要与hiveServer2服务同节点以防止端口冲突(我目前还没找到更改该thriftserver端口的方式)。

tar -zxvf spark-2.1.0-bin-hadoop2.6.tgz
cd spark-2.1.0-bin-hadoop2.6
cp /etc/hive/conf/hive-site.xml conf #可以读取到hive的表
cp conf/spark-env.sh.template conf/spark-env.sh
vi conf/spark-env.sh
添加:
export HADOOP_CONF_DIR=/etc/hadoop/conf
export YARN_CONF_DIR=/etc/hadoop/conf.cloudera.yarn/

mkdir carbondata_lib
#将carbondata_2.11-1.2.0-shade-hadoop2.2.0.jar拷贝到 carbondata_lib目录下,如果需要设置carbondata参数,需要将carbondata-parent-1.2.0/conf目录下的carbon.properties.template文件重命名为carbon.properties并拷贝到spark-2.1.0-bin-hadoop2.6/conf目录下即可
cd bin
#启动命令为:
./spark-submit \
–master yarn \
–deploy-mode client \
–conf spark.sql.hive.thriftServer.singleSession=true \
–class org.apache.carbondata.spark.thriftserver.CarbonThriftServer \
../carbondata_lib/carbondata_2.11-1.2.0-shade-hadoop2.2.0.jar \
hdfs://[namenodeIP]:8020/carbondata

thriftServer使用

beeline -u jdbc:hive2://[启动节点ip]:10000 -n 用户名称

后记

个人认为这种方式去操作carbondata是最好的方式,用jdbc的方式毕竟是最方便的。
spark-sql和spark-shell都可以去操作,同一个版本不同的操作方式有可能出现支持的operation不同的情况。
如果资源很多的情况下,可以先调节spark的参数启动好container,让sql任务可以尽快的使用到资源,如果多个应用程序同时使用一个yarn资源,可以采用spark的动态分配,需要使用到资源时才开始请求资源,建立container。

如有问题请指正,谢谢。