
# Spark常用命令介绍
Spark命令详细的使用方法参考官方网站的描述：<https://spark.apache.org/docs/latest/quick-start.html>。
#### 常用命令
Shell命令执行方法：
1. 进入Spark客户端目录。
2. 初始化环境变量。 
   **source /opt/client/bigdata_env**
   
   
3. 如果当前集群已启用Kerberos认证，执行以下命令认证当前用户。如果当前集群未启用Kerberos认证，则无需执行此命令。当前用户为[准备Spark应用开发用户](https://support.huaweicloud.com/devg-mrs/mrs_06_0154.html)时增加的开发用户。
   
   **kinit** ***MRS*** ***集群用户***
   例如：
   - 开发用户为"机机"用户时请执行：**kinit -kt user.keytab sparkuser**
   
   - 开发用户为"人机"用户时请执行**：kinit sparkuser**
   
   
   
   
4. 执行Spark shell命令。
Spark常用的命令如下所示：
- ***spark-shell***
  提供了一个简单的调试工具，支持Scala语言。
  在shell控制台执行： ***spark-shell*** 即可进入Scala交互式界面，从HDFS中获取数据，再操作RDD进行计算，输出并打印结果。
  示例：一行代码可以实现统计一个文件中所有单词出现的频次。
  ***scala\> sc.textFile("hdfs://hacluster/tmp/wordcount_data.txt").flatMap(line=\> line.split(" ")).map(w =\> (w,1)).reduceByKey(_+_).collect()***
  
- ***spark-submit***
  用于提交Spark应用到MRS集群中运行，并返回运行结果。需要指定class、master、jar包以及入参。
  示例：执行jar包中的GroupByTest例子，入参为4个，指定集群运行模式是yarn-client。
  ***spark-submit --class org.apache.spark.examples.GroupByTest --master yarn --deploy-mode client ${SPARK_HOME}/examples/jars/spark-examples_2.11-2.3.2-mrs-2.0.jar 6 3000 3000 3***
  
- ***spark-sql***
  启动一个Spark应用，执行Spark SQL。可以指定local(--master local)或是集群模式(--master yarn)。
  启动示例：
  ***spark-sql*** ***--master yarn***
  SQL示例：
  - ***SELECT key FROM src GROUP BY key;***
  
  - ***EXPLAIN EXTENDED SHOW TABLES;***
   
- ***spark-beeline***
  调用Spark的JDBCServer执行Spark SQL，可以实现对海量数据高效的计算和统计分析。JDBCServer包含一个长时运行的Spark任务，在spark-beeline中执行的语句都会交给该任务执行。
  启动示例：
  cd $SPARK_HOME/bin
  ***spark-beeline***
  SQL示例：
  1. ***CREATE TABLE info(id int, name string, company string);***
  
  2. ***INSERT INTO TABLE info values(001,'jack','huawei');***
  
  3. ***SELECT \* FROM info;***
   
- ***beeline***
  调用Spark的JDBCServer执行Spark SQL，可以实现对海量数据高效的计算和统计分析。JDBCServer包含一个长时运行的Spark任务，在beeline中执行的语句都会交给该任务执行。
  开启Kerberos认证的安全集群启动示例：
  cd $SPARK_HOME/bin
  ./beeline -u 'jdbc:hive2://ha-cluster/default;user.principal=spark/hadoop.COM;saslQop=auth-conf;auth=KERBEROS;principal=spark/hadoop.COM;'
  ![](https://support.huaweicloud.com/devg-mrs/public_sys-resources/note_3.0-zh-cn.png)
  spark/hadoop.COM字符串在本集群上使用**klist -kt /opt/Bigdata/MRS_XXX/1_20_SparkResource/etc/spark.keytab**命令展示后的principal字符串获取，可粘贴到beeline命令中直接使用。
  未开启Kerberos认证的普通集群启动示例：
  cd $SPARK_HOME/bin
  beeline
  SQL示例：
  1. ***CREATE TABLE info(id int, name string, company string);***
  
  2. ***INSERT INTO TABLE info values(001,'jack','huawei');***
  
  3. ***SELECT \* FROM info;***
  
  
  推荐使用 spark-beeline，因为spark-beeline是在beeline的基础上面做的封装，用户可直接运行spark-beeline。
  
- ***run-example***
  用来运行或者调试Spark开源社区中自带的样例代码。
  示例：执行SparkPi
  ***run-example --master yarn --deploy-mode client SparkPi 100***
  
 
