tonglin0325的个人主页

Spark学习笔记——在远程机器中运行WordCount

1.通过realy机器登录relay-shell

1
2
ssh XXX@XXX

2.登录了跳板机之后,连接可以用的机器

1
2
XXXX.bj

3.在本地的idea生成好程序的jar包(word-count_2.11-1.0.jar)之后,把jar包需要put到远程机器的hdfs文件系统中的文件通过scp命令从开发机传到远程的机器中

1
2
scp 开发机用户名@开发机ip地址:/home/XXXXX/文件 .    #最后一个.表示cd的根目录下

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
object WordCount {
def main(args: Array[String]) {
// val inputFile = "file:///home/mi/coding/coding/Scala/word-count/input/README.txt"
// val inputFile = "file://README.txt"
val inputFile = "/user/XXXX/lintong/README.txt"
val conf = new SparkConf().setAppName("WordCount").setMaster("yarn-client")
val sc = new SparkContext(conf)
val textFile = sc.textFile(inputFile)
val wordCount = textFile.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey((a, b) => a + b)
// wordCount.foreach(println)
// wordCount.saveAsTextFile("file:///home/mi/coding/coding/Scala/word-count/output/READMEOUT.txt")
wordCount.saveAsTextFile("/user/XXXX/lintong/READMEOUT.txt")
}
}

 

4.通过put命令将远程机器中的txt文件,传到远程机器的hdfs文件系统

1
2
hadoop fs -put /homeXXX/文件名 ./lintong    #.注意.的目录地址是用户的根目录

5.这时可以使用下面命令查看文件

1
2
hadoop fs -ls ./lintong

6.接下来写shell脚本,来运行spark-submit命令写完shell脚本只要运行shell脚本就行,shell脚本的目录和jar包的目录保持一致

yarn-client 调试模式

yarn-cluster 生产模式

1
2
3
4
5
6
7
spark-submit --cluster XXXXX \
--master yarn-client \
--num-executors 3 \
--class "包名.类名" \
--queue XXXXX \
word-count_2.11-1.0.jar

7.最后在hdfs文件系统中查看生成的文件,注意

1
2
wordCount.saveAsTextFile("/user/XXXX/lintong/READMEOUT.txt")

 会是一个READMEOUT.txt目录,这个目录下面有part文件

1
2
hadoop fs -ls ./lintong/READMEOUT.txt

 输出

1
2
3
lintong/READMEOUT.txt/_SUCCESS
lintong/READMEOUT.txt/part-00000

 

使用spark-submit部署应用

一般是在shell脚本中写好,然后运行shell脚本就行了

spark-submit的详细参数参考 spark-submit使用及说明

 

在spark任务中认证

1
2
3
4
5
6
7
8
import org.apache.hadoop.security.UserGroupInformation
import org.apache.hadoop.conf.Configuration
System.setProperty("java.security.krb5.conf", "/etc/krb5.conf")
val configuration = new Configuration()
configuration.set("hadoop.security.authentication", "Kerberos")
UserGroupInformation.setConfiguration(configuration)
UserGroupInformation.loginUserFromKeytab("xxx@XXXX", "xxx.keytab")