
spark进入txt文件的命令
1、首先启动spark-shell进入Spark-shell模式:(进入spark目录下后 输入命令 bin/spark-shell启动spark-shell模式)
2、加载text文件(spark创建sc,可以加载本地文件和HDFS文件创建RDD)

val textFile = sctextFile("file:///home/hadoop/test1txt") #注意file:后是三个“/”
注意:加载HDFS文件和本地文件都是使用textFile,区别是添加前缀(hdfs://和file://)进行标识。
3、获取RDD文件textFile所有项(文本文件即总共行数)的计数(还有很多其他的RDD *** 作,自行百度)

textFilecount() #统计结果显示 1 行
二、在 spark-shell 中读取 HDFS 系统文件“/home/hadoop/testcsv(也可以是txt文件)”(如果该文件不存在, 请先创建),然后,统计出文件的行数:
方法一:
1、加载text文件(spark创建sc,可以加载本地文件和HDFS文件创建RDD)

val textFile = sctextFile("hdfs:///home/hadoop/testcsv") #注意hdfs:后是三个“/”
注意:加载HDFS文件和本地文件都是使用textFile,区别是添加前缀(hdfs://和file://)进行标识。
2、获取RDD文件textFile所有项的计数

textFilecount() #统计结果显示 1 行
方法二:(Spark shell 默认是读取 HDFS 中的文件,需要先上传文件到 HDFS 中,否则会有“orgapachehadoopmapredInvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop/READMEmd”的错误。)
1、省去方法一中第一步的命令(1)中的“hdfs://”,其他部分相同,命令如下:

三、编写独立应用程序,读取 HDFS 系统文件“/user/hadoop/testtxt”(如果该文件不存在, 请先创建),然后,统计出文件的行数;通过 sbt 工具将整个应用程序编译打包成 JAR 包, 并将生成的 JAR 包通过 spark-submit 提交到 Spark 中运行命令:
1、首先输入:quit 命令退出spark-shell模式:

2、在终端中执行如下命令创建一个文件夹 sparkapp3 作为应用程序根目录:

cd ~ # 进入用户主文件夹
mkdir /sparkapp3 # 创建应用程序根目录
mkdir -p /sparkapp3/src/main/scala # 创建所需的文件夹结构
3、在 /sparkapp3/src/main/scala 下建立一个名为 SimpleAppscala 的文件(vim /sparkapp3/src/main/scala/SimpleAppscala),添加代码如下:

/ SimpleAppscala /
import orgapachesparkSparkContext
import orgapachesparkSparkContext_
import orgapachesparkSparkConf
object SimpleApp {
def main(args: Array[String]) {
val logFile = "hdfs://localhost:9000/home/hadoop/testcsv"
val conf = new SparkConf()setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sctextFile(logFile, 2)
val num = logDatacount()
println("这个文件有 %d 行!"format(num))
}
}
4、该程序依赖 Spark API,因此我们需要通过 sbt 进行编译打包。 /sparkapp3 中新建文件 simplesbt(vim /sparkapp3/simplesbt),添加内容如下,声明该独立应用程序的信息以及与 Spark 的依赖关系:

name := "Simple Project"
version := "10"
scalaVersion := "21210"
libraryDependencies += "orgapachespark" %% "spark-core" % "300-preview2"
1、web开发基础
2、javase课程
3、主流的框架
4、关系型数据库/MySQL/NoSQL
5、 *** 作系统/Linux、云架构
6、Hadoop生态系统
7、Spark生态系统
8、Storm生态系统
9、项目实 *** 阶段
我们在windows开发机上使用spark的local模式读取远程hadoop集群中的hdfs上的数据,这样的目的是方便快速调试,而不用每写一行代码或者一个方法,一个类文件都需要打包成jar上传到linux上,再扔到正式的集群上进行测试,像功能性验证直接使用local模式来快速调测是非常方便的,当然功能测试之后,我们还需要打包成jar仍到集群上进行其他的验证比如jar包的依赖问题,这个在local模式是没法测的,还有集群运行的调优参数,这些都可以在正式仍到集群时验证。
一个样例代码如下:
def main(args: Array[String]): Unit = { //指定local模式
val conf = new SparkConf()setMaster("local[2]")setAppName("read kp data to kafka") val sc= new SparkContext(conf) //支持通配符路径,支持压缩文件读取
val rrd=sctextFile("hdfs://192168104:8020/data/log/{20170227,20170228}/tomcat-log") //提到到集群模式时,去掉uri地址,如果有双namenode,可以自动容灾
//val rrd=sctextFile("/data/log/{20170227,20170228}/tomcat-log")
//统计数量
println(rrdcount()) //停止spark
scstop()
}
如何在spark中遍历数据时获取文件路径:
val path:String="hdfs://192168104:8020/data/userlog/{20170226}/kp"
val text= scnewAPIHadoopFile[LongWritable,Text,TextInputFormat](path)
val linesWithFileNames = textasInstanceOf[NewHadoopRDD[LongWritable, Text]]
mapPartitionsWithInputSplit((inputSplit, iterator) => {
val file = inputSplitasInstanceOf[FileSplit] iteratormap(tup => (filegetPath, tup_2)) // 返回的K=全路径 V=每一行的值
}
)
linesWithFileNamesforeach(println)
如果遍历压缩文件时想要获取文件名,就使用newAPIHadoopFile,此外在本地调试下通过之后,提交到集群运行的时候,一定要把uri去掉,本地加上是想让它远程读取方便调试使用,如果正式运行去掉uri在双namenode的时候可以自动兼容,不去反而成一个隐患了。
最后我们可以通过spark on yarn模式提交任务,一个例子如下:
jars=`echo /home/search/x_spark_job/libs/jar | sed 's/ /,/g'`
bin/spark-submit --class KSearch --master yarn --jars $jars /home/search/x_spark_job/kp-100jar
这里用spark提交有另外一个优势,就是假如我开发的不是YARN应用,就是代码里没有使用SparkContext,而是一个普通的应用,就是读取mysql一个表的数据,写入另外一个mysql,这里跟MR没有关系,但是我依然可以用spark-sumbit提交,这时候是不会提交到YARN上的,但是程序会按普通程序运行,程序依赖的jar包,直接使用--jars传入就行,这一点非常方便,尤其是应用有多个依赖时,比如依赖es,hadoop,hbase,redis,fastjson,我打完包后的程序是瘦身的只有主体jar非常小,依赖的jar我可以不打到主体jar里面,在外部用的时候传入,方便共用并灵活性大大提高。
spark有三种集群部署方式:
1、独立部署模式standalone,spark自身有一套完整的资源管理方式
2、架构于hadoop之上的spark集群
3、架构于mesos之上的spark集群
尝试了下搭建第一种独立部署模式集群,将安装方式记录如下:
环境ubuntu 1204 (两台),部署方式是和hadoop类似,先在一台机器上部署成功后直接将文件打包拷贝到其他机器上,这里假设现在A机器上部署,并且A为master,最后B为slave
A和B均上创建用户spark
sudo useradd spark
以后spark的目录在集群所有机器的/home/spark/spark下(第一个spark是用户名,第二个spark是spark文件目录名)
保证A能无密码登陆到B上的spark用户,在ssh里面设置
这部分是现在master机器(A)上配置
0 首先保证A能无密码方式ssh至localhost和B ,具体方式参见: 点击打开链接
01 在A机器上执行
ssh-keygen -t rsa
cp ~/ssh/id_rsapub ~/ssh/authorized_keys
ssh localhost
那么A可以实现无密码登陆localhost
02 在B机器上执行
以上就是关于spark进入txt文件的命令全部的内容,包括:spark进入txt文件的命令、以道教育大数据课程都讲什么、如何使用Spark的local模式远程读取Hadoop集群数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)