Spark SQL和Spark Thrift Server安装部署

1. Spark部署

下载spark-2.2.0-bin-hadoop2.7.tgz

解压

$ tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz

配置环境变量

$ vim ~/.bashrc

添加如下内容:

exportSPARK_HOME=/home/cloud/cloud/spark-2.2.0-bin-hadoop2.7

exportPATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

1.1 启动Spark集群

$ $SPARK_HOME/sbin/start-all.sh

2. 配置Spark SQL CLI

2.1 创建spark-env.sh

$ cp $SPARK_HOME/conf/spark-env.sh.template$SPARK_HOME/conf/spark-env.sh

$ vim $SPARK_HOME/conf/spark-env.sh

添加如下内容

export JAVA_HOME=/home/cloud/cloud/jdk8

export HADOOP_CONF_DIR=/home/cloud/cloud/hadoop-2.8.0

exportHIVE_CONF_DIR=/home/cloud/cloud/apache-hive-2.1.1-bin

export SCALA_HOME=/home/cloud/cloud/scala-2.12.3

export SPARK_WORK_MEMORY=1g

export MASTER=spark://master:7077

#export SPARK_MASTER_IP=master

#export SPARK_MASTER_PORT=7077

2.2 创建并配置hive-site.xml

在运行Spark SQLCLI中需要使用到HiveMetastore,故需要在Spark中添加其uris。具体方法是在$SPARK_HOME/conf目录下创建hive-site.xml文件,然后在该配置文件中,添加hive.metastore.uris属性,具体如下:

说明:hive.metastore.uris指定了连接的Hive数据源。

$ vim $SPARK_HOME/conf/hive-site.xml

添加如下内容:

<configuration>

  <property>

   <name>hive.metastore.uris</name>

   <value>thrift://master:9083</value>

   <description>Thrift URI for the remote metastore. Used bymetastore client to connect to remote metastore.</description>

 </property>

</configuration>

2.3 复制hdfs-site.xml

$ cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml$SPARK_HOME/conf

2.4 创建slaves

$ cp $SPARK_HOME/slaves.template$SPARK_HOME/slaves

添加如下内容:

master

slave1

slave2

2.5 复制hive-hbase-handler-2.1.1.jar到$SPARK_HOME/jars/

$ cp $HIVE_HOME/lib/hive-hbase-handler-2.1.1.jar$SPARK_HOME/jars/

2.6 创建lib目录并拷贝相关jar包

$ mkdir $SPARK_HOME/lib

$ cp $HBASE_HOME/lib/guava-12.0.1.jar$SPARK_HOME/lib/

$ cp $HBASE_HOME/lib/hbase-common-1.2.6-tests.jar$SPARK_HOME/lib/

$ cp $HBASE_HOME/lib/hbase-client-1.2.6.jar$SPARK_HOME/lib/

$ cp $HBASE_HOME/lib/hbase-protocol-1.2.6.jar$SPARK_HOME/lib/

$ cp$HBASE_HOME/lib/htrace-core-3.1.0-incubating.jar $SPARK_HOME/lib/

$ cp $HBASE_HOME/lib/hbase-common-1.2.6.jar$SPARK_HOME/lib/

$ cp $HBASE_HOME/lib/hbase-server-1.2.6.jar$SPARK_HOME/lib/

$ cp$HIVE_HOME/lib/mysql-connector-java-5.1.41-bin.jar $SPARK_HOME/lib/

其中mysql-connector-java-5.1.41-bin.jar来自于https://dev.mysql.com/downloads/connector/j/下载的mysql-connector-java-5.1.41.tar.gz

$ cp $HIVE_HOME/lib/metrics-core-2.2.0.jar$SPARK_HOME/lib

2.7 修改spark-env.sh

$ vim $SPARK_HOME/conf/spark-env.sh

添加如下内容:

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/guava-12.0.1.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/hbase-client-1.2.6.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/hbase-common-1.2.6.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/hbase-common-1.2.6-tests.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/hbase-protocol-1.2.6.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/hbase-server-1.2.6.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/htrace-core-3.1.0-incubating.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/mysql-connector-java-5.1.41-bin.jar

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/ metrics-core-2.2.0.jar

2.8 启动Hive Metastore

在使用Spark SQLCLI之前需要启动HiveMetastore(如果数据存放在HDFS文件系统,还需要启动Hadoop的HDFS),使用如下命令可以使Hive Metastore启动后运行在后台,可以通过jobs查询:

$ nohup hive --service metastore >metastore.log 2>&1 &

2.9 启动Spark SQL CLI

$ $SPARK_HOME/bin/spark-sql --masterspark://master:7077 --executor-memory 1g

在集群监控页面http://master:8080/可以看到启动了SparkSQL应用程序:

3. 配置Spark Thrift Server

3.1 创建或修改hive-site.xml配置文件

若在Spark SQLCLI中已创建hive-site.xml,则添加新内容即可。

$ vim $SPARK_HOME/conf/hive-site.xml

添加如下内容:

<!--Thrift JDBC/ODBC server-->

   <property>

       <name>hive.server2.thrift.min.worker.threads</name>

       <value>5</value>

   </property>

   <property>

       <name>hive.server2.thrift.max.worker.threads</name>

       <value>500</value>

   </property>

   <property>

       <name>hive.server2.thrift.port</name>

       <value>10001</value>

   </property>

   <property>

       <name>hive.server2.thrift.bind.host</name>

       <value>master</value>

   </property>

说明:hive.server2.thrift.bind.host指定要启动thrift server的主机,hive.server2.thrift.port指定要打开的端口号。使用端口10001是为了避免与Hive自己的hive.server2.thrift.port—10000产生冲突。

3.2 启动Spark Thrift Server

$ $SPARK_HOME/sbin/start-thriftserver.sh --masterspark://master:7077 --executor-memory 1g

启动后使用$ jps可以看到SparkSubmit进程,如图

3.3 远程客户端使用Spark beeline访问hive

我的远程客户端为ubuntu,将spark解压到远程客户端即可使用beeline

客户端使用Sparkbeeline访问hive详见:第十、9.2节启动

4. 启动和退出spark-shell

启动命令如下

$ spark-shell

退出命令如下:

$ :quit

4.1 上传一个文件到HDFS,对该文件进行WordCount

上传文件至HDFS根目录

$ hdfs dfs -put$HADOOP_HOME/etc/hadoop/core-site.xml /

启动scala,输入如下命令对文件core-site.xml进行词频统计

scala> valrdd=sc.textFile("hdfs://master:9000/core-site.xml")

scala> rdd.cache()

scala> valwordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)

scala> wordcount.take(10)

scala> valwordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))

scala> >wordsort.take(10)

执行结果如下图:

以上命令的一行实现如下:

scala>sc.textFile("hdfs://master:9000/core-site.xml").flatMap(_.split("")).map(x=>(x,1)).reduceByKey(_+_).map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1)).take(10)

执行过程如下图

5. spark-submit的使用

5.1 工具语法及参数

从Spark1.0.0开始,Spark提供了一个易用的应用程序部署工具bin/spark-submit,可以完成Spark应用程序在local、Standalone、YARN、Mesos上的快捷部署。该工具语法及参数说明如下:

Usage: spark-submit [options] <app jar |python file> [app options]

Options:

  --masterMASTER_URL          spark://host:port,mesos://host:port, yarn, or local.

 --deploy-mode DEPLOY_MODE  driver运行之处,client运行在本机,cluster运行在集群

  --classCLASS_NAME            应用程序包的要运行的class

  --nameNAME                  应用程序名称

  --jarsJARS                     用逗号隔开的driver本地jar包列表以及executor类路径

 --py-files PY_FILES              用逗号隔开的放置在Python应用程序

PYTHONPATH上的.zip, .egg, .py文件列表

  --filesFILES                    用逗号隔开的要放置在每个executor工作目录的文件列表

  --properties-fileFILE           设置应用程序属性的文件放置位置,默认是conf/spark-defaults.conf

 --driver-memory MEM         driver内存大小,默认512M

 --driver-java-options          driver的java选项

 --driver-library-path           driver的库路径Extralibrary path entries to pass to the driver

 --driver-class-path            driver的类路径,用--jars 添加的jar包会自动包含在类路径里

 --executor-memory MEM      executor内存大小,默认1G

 

 Sparkstandalone with cluster deploy mode only:

 --driver-cores NUM          driver使用内核数,默认为1

 --supervise                   如果设置了该参数,driver失败是会重启

 

 Sparkstandalone and Mesos only:

 --total-executor-cores NUM   executor使用的总核数

 

 YARN-only:

 --executor-cores NUM         每个executor使用的内核数,默认为1

  --queueQUEUE_NAME        提交应用程序给哪个YARN的队列,默认是default队列

  --num-executorsNUM        启动的executor数量,默认是2个

 --archives ARCHIVES          被每个executor提取到工作目录的档案列表,用逗号隔开

5.2 实例

该脚本为Spark自带例子,在该例子中个计算了圆周率π的值,以下为执行脚本:

spark-submit --master spark://master:7077 --classorg.apache.spark.examples.SparkPi --executor-memory 512m $SPARK_HOME/examples/jars/spark-examples_2.11-2.1.1.jar200

参数说明(详细可以参考上面的参数说明):

a) --master Master所在地址,可以有Mesos、Spark、YARN和Local四种,在这里为SparkStandalone集群,地址为spark://hadoop1:7077

b) --class应用程序调用的类名,这里为org.apache.spark.examples.SparkPi

c) --executor-memory 每个executor所分配的内存大小,这里为512M

d) 执行jar包 这里是../lib/spark-examples-1.1.0-hadoop2.2.0.jar

e)  分片数目 这里数目为200

执行结果如下图:

6. 遇到的问题及解决办法

6.1 在Spark SQL CLI中执行SQL命令出现大量日志,如下图

解决办法:

$ cd $SPARK_HOME/conf/

$ cp log4j.properties.template log4j.properties

$ vim log4j.properties

log4j.rootCategory=INFO, console中的INFO改为WARN,保存退出即可。

6.2 Spark SQL CLI和Spark Thrift Server全部启动后,使用Spark SQL CLI执行SQL出现如下错误

17/08/14 06:40:03 WARN TaskSchedulerImpl: Initialjob has not accepted any resources; check your cluster UI to ensure thatworkers are registered and have sufficient resources

如图:

使用stop-thriftserver.sh命令或者在http://master:8080/结束掉Spark Thrift Server后再使用Spark SQL CLI执行show databases;没问题,执行SQL查询报错。

推测:集群中有两台计算机内存只有1G。先启动SparkThrift Server:$SPARK_HOME/sbin/start-thriftserver.sh--master spark://master:7077 --executor-memory 1g,已经占据1g内存;再启动SparkSQL CLI:$SPARK_HOME/bin/spark-sql--master spark://master:7077 --executor-memory 1g时,内存不足。但是先启动Spark SQL CLI,再启动Spark Thrift Server却可以。

6.3 在spark-sql中执行sql查询,出错org.apache.hadoop.hive.hbase.HBaseSerDe not found

 

错误原因:缺少hive-hbase-handler-2.1.1.jar

解决办法:

$ cp $HIVE_HOME/lib/hive-hbase-handler-2.1.1.jar$SPARK_HOME/jars/

同理,出现***.***.***notfound一般为jar包缺失或jar包中的.class缺失

6.4 在spark-sql中执行sql查询出现错误

17/09/21 02:08:35 ERROR SparkSQLDriver: Failed in[select * from pilotinfo]

org.apache.hadoop.hbase.client.RetriesExhaustedException:Failed after attempts=36, exceptions:

Thu Sep 21 02:08:35 GMT 2017, null,java.net.SocketTimeoutException: callTimeout=60000, callDuration=68693: row'bigdata,,00000000000000' on table 'hbase:meta' atregion=hbase:meta,,1.1588230740, hostname=slave2,16020,1505956754657, seqNum=0

******

Caused by: java.net.SocketTimeoutException:callTimeout=60000, callDuration=68693: row 'bigdata,,00000000000000' on table'hbase:meta' at region=hbase:meta,,1.1588230740,hostname=slave2,16020,1505956754657, seqNum=0

******

Caused by: java.lang.ClassNotFoundException:com.yammer.metrics.core.Gauge

如图:


错误原因:缺少metrics-core-2.2.0.jar

解决办法:

$ cp $HIVE_HOME/lib/metrics-core-2.2.0.jar$SPARK_HOME/lib

$ vim $SPARK_HOME/conf/spark-env.sh

exportSPARK_CLASSPATH=$SPARK_CLASSPATH:$SPARK_HOME/lib/ metrics-core-2.2.0.jar

 


  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark SQL是一个用于处理结构化数据的模块,它提供了一种基于SQL的编程接口,可以让用户使用SQL语句来查询数据。ThriftServerSpark SQL的一个组件,它提供了一个基于Thrift协议的服务,可以让用户通过网络连接到Spark SQL,并使用SQL语句来查询数据。Beeline是一个用于连接到ThriftServer的命令行工具,它可以让用户通过命令行界面来执行SQL语句。 使用ThriftServer和Beeline可以让用户通过网络连接到Spark SQL,并使用SQL语句来查询数据。首先需要启动ThriftServer,可以使用以下命令: ``` ./sbin/start-thriftserver.sh ``` 启动成功后,可以使用Beeline连接到ThriftServer,可以使用以下命令: ``` ./bin/beeline -u jdbc:hive2://localhost:10000 ``` 连接成功后,就可以使用SQL语句来查询数据了。例如,可以使用以下命令查询表格: ``` SELECT * FROM table_name; ``` 使用ThriftServer和Beeline可以方便地查询Spark SQL中的数据,特别是在需要远程访问数据时非常有用。 ### 回答2: ThriftServer(又称HiveServer2)和Beeline都是Spark SQL中常用的工具,用于连接和操作Spark SQLThriftServer是一个支持Hive/Spark SQL的服务,它允许用户通过多种编程语言(如Java、Python等)来访问和查询数据。ThriftServer通过Thrift协议提供了基于网络的服务,允许远程客户端连接到Spark集群并执行Spark SQL查询。ThriftServer可以通过配置来启用或禁用Kerberos身份验证,以实现安全连接。 Beeline是一个基于命令行的工具,它是Hive和Spark SQL的原生客户端。可以使用Beeline连接到ThriftServer,并通过命令行界面执行Spark SQL查询。Beeline支持多种连接方式,例如通过JDBC连接到ThriftServer、通过Kerberos进行身份验证等。用户可以通过Beeline执行SQL语句、管理数据库、查看查询结果等。 使用ThriftServer和Beeline的步骤如下: 1. 首先,确保Spark集群已经启动,并且ThriftServer已经启动。可以通过spark-sqlspark-sql2启动ThriftServer,默认情况下会监听端口10000。 2. 使用Beeline连接到ThriftServer。可以通过命令beeline -u jdbc:hive2://hostname:port进行连接,其中hostname是ThriftServer所在的主机名或IP地址,port是ThriftServer监听的端口号。此外,还需要提供用户名和密码进行身份验证。 3. 连接成功后,可以在Beeline中执行SQL语句。输入SQL语句后,按下回车键即可执行。查询结果会显示在命令行界面上。还可以使用Beeline提供的命令来管理数据库、查看表、导入导出数据等操作。 ThriftServer和Beeline的使用简单而方便,能够有效地连接和操作Spark SQL。它们为用户提供了一种灵活的方式来查询和管理数据,便于开发人员和数据分析师使用Spark SQL进行数据处理和分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值