Spark教程——(3)编写spark-shell测试Demo

本文详细介绍了如何使用HDFS进行文件操作及利用Spark进行数据处理的过程。首先,在HDFS上创建目录并上传文件,随后通过Spark-shell环境用Scala编写程序对数据进行分割、映射、归约等操作,并将结果保存回HDFS。最后,展示了如何从HDFS下载处理后的数据到本地系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建一个文件aa.txt,随便写点内容:

hello world!
aa aa
d
d 
dg
g

登录HDFS文件系统:

[root@node1 ~]# su hdfs

在HDFS文件系统中创建文件目录保存要上传的数据:

bash-4.2$ hdfs dfs -mkdir -p /user/cf

然后将CentOS文件系统上的aa.txt文件上传到HDFS文件系统中:

bash-4.2$ hdfs dfs -put /home/cf/aa.txt /user/cf

执行以下命令,进入spark-shell环境:

bash-4.2$ spark-shell

在spark-shell环境中用scala编写spark程序,按空格分割数据

scala> sc.textFile("/user/cf/aa.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/user/cf/out")

执行后得到结果文件:

bash-4.2$ hadoop fs -ls /user/cf/out
Found 3 items
-rw-r--r--   3 hdfs supergroup          0 2019-04-28 21:30 /user/cf/out/_SUCCESS
-rw-r--r--   3 hdfs supergroup         23 2019-04-28 21:30 /user/cf/out/part-00000
-rw-r--r--   3 hdfs supergroup         24 2019-04-28 21:30 /user/cf/out/part-00001

需要更改CentOS系统中文件目录的访问权限,以便将文件从HDFS文件系统中下载到CentOS文件系统:

[root@node1 ~]# chmod 777 /home/cf

下载结果文件:

bash-4.2$ hadoop fs -get /user/cf/out/_SUCCESS /home/cf
bash-4.2$ hadoop fs -get /user/cf/out/part-00000 /home/cf
bash-4.2$ hadoop fs -get /user/cf/out/part-00001 /home/cf

查看结果文件:

[root@node1 ~]# cat /home/cf/_SUCCESS
[root@node1 ~]# cat /home/cf/part-00000
(d,2)
(aa,2)
(hello,1)
[root@node1 ~]# cat /home/cf/part-00001
(world!,1)
(dg,1)
(g,1)

 

参考:https://blog.youkuaiyun.com/csdnliuxin123524/article/details/80630174

转载于:https://www.cnblogs.com/ratels/p/10789465.html

<think>好的,我现在需要帮助用户了解如何使用Spark SQL从MySQL读取数据,并在spark-shell或工程中实现。首先,我需要回顾用户提供的引用内容,确保回答准确。 用户提到了几个引用,其中引用[3]、[4]、[5]都涉及从MySQL加载数据的具体方法。引用[4]提到了启动spark-shell时指定MySQL驱动jar包,而引用[3]提到了使用JDBC读取数据创建DataFrame。此外,用户可能需要代码示例和步骤指导。 首先,我应该分步骤说明如何在spark-shell和代码工程中实现。对于spark-shell,需要启动时添加驱动,然后用spark.read.format("jdbc")或者直接使用spark.read.jdbc方法。要确保参数如URL、表名、用户和密码正确。可能还需要分区设置,比如指定numPartitions、partitionColumn等参数来提高读取效率,如引用[1]提到的分区设置。 在工程中,用户可能需要用spark-submit提交任务,这时候需要添加驱动jar包的路径,如引用[5]中的示例。同时,代码中配置JDBC连接参数,类似spark-shell中的方式。 然后,用户可能遇到的问题,比如驱动未正确加载,或者连接参数错误。需要提醒常见的注意事项,如驱动类名是否正确,网络权限是否开放,以及分区参数的合理设置。 最后,生成相关问题,帮助用户深入理解,比如性能优化、数据写入、参数调优等。确保问题覆盖用户可能的后续疑问。 现在需要将步骤整理清楚,代码示例要正确,并标注参数说明。同时,引用相关的引用内容,如引用[3]和[4]中的启动方式和驱动配置,引用[1]中的分区设置。确保回答结构清晰,步骤明确,用户能逐步操作。</think>### 如何通过Spark SQL从MySQL读取数据 以下是Spark SQL从MySQL读取数据的详细步骤,分为`spark-shell交互模式`和`Spark工程代码实现`两种场景: --- #### 一、spark-shell交互模式 1. **启动spark-shell时指定MySQL驱动** 需通过`--jars`参数加载MySQL JDBC驱动jar包,路径根据实际位置调整: ```bash spark-shell --master local[*] \ --jars /path/to/mysql-connector-java-x.x.xx.jar ``` 2. **读取MySQL数据为DataFrame** 在spark-shell中使用`spark.read.format("jdbc")`方法: ```scala val df = spark.read.format("jdbc") .option("url", "jdbc:mysql://host:3306/database") .option("dbtable", "table_name") .option("user", "username") .option("password", "password") .load() df.show() // 展示前20行数据 ``` **关键参数说明**: - `url`: MySQL连接地址,格式为`jdbc:mysql://主机:端口/数据库名` - `dbtable`: 表名或SQL查询(需用括号别名,如`(SELECT * FROM t) AS tmp`) - `partitionColumn`/`numPartitions`/`lowerBound`/`upperBound`: 并行读取配置(大数据量时提升性能)[^1] --- #### 二、Spark工程代码实现(Scala示例) 1. **添加Maven依赖** 在`pom.xml`中引入MySQL驱动: ```xml <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> ``` 2. **代码中配置JDBC连接** ```scala import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("MySQL Read Demo") .config("spark.driver.extraClassPath", "/path/to/mysql-connector-java-x.x.xx.jar") .getOrCreate() val df = spark.read .format("jdbc") .option("url", "jdbc:mysql://host:3306/database") .option("dbtable", "table_name") .option("user", "username") .option("password", "password") .option("fetchsize", "1000") // 批量读取优化 .load() df.write.parquet("hdfs://path/output") // 写入HDFS或其他存储 ``` 3. **提交任务时指定驱动** 若未打包驱动,需通过`--jars`参数传递: ```bash spark-submit --class com.example.Main \ --master yarn \ --jars /path/to/mysql-connector-java-x.x.xx.jar \ your-application.jar ``` --- #### 三、注意事项 1. **驱动兼容性** 确保MySQL驱动版本与服务器端MySQL版本匹配,8.x驱动需使用`com.mysql.cj.jdbc.Driver`类名。 2. **网络权限** 检查防火墙是否开放MySQL端口(默认3306),确保Spark集群能访问数据库服务器。 3. **性能调优** 通过`numPartitions`控制并行度,例如设置`numPartitions=10`将启动10个并发连接读取数据[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值