代码改变世界

spark wordcount笔记

2018-02-23 18:09  helloworld小渣渣  阅读(915)  评论(0)    收藏  举报

环境:

  JDK1.8

  scala-2.10.4

  spark-1.6.0

  hadoop-2.7.3

  CentOS-7-x86_64-DVD-1511  3台

    master hostname

      hadoop1

    slave hostname

      hadoop2

      hadoop3

1.使用scala编写spark wordcount项目,先本地测试。

object FilterCountOperator {

def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("MapOperator").setMaster("local")
val sc = new SparkContext(conf)
val textFileRdd = sc.textFile("hdfs://hadoop1:9000/input/log.txt")
/**
* 把每行装换成"企业名,1"
* 2016-09-04 某某企业 1123 北京
* (某某企业,1)
*/
val nameRdd = textFileRdd.map(line => (line.split("\t")(1), 1))
/**
* 企业名汇总
*/
val nameCountRdd = nameRdd.reduceByKey((v1:Int, v2:Int) => v1+v2)
/**
* sortBy x => x._2 , false
* 根据value
* 倒序排序
*/
val sortRdd = nameCountRdd.sortBy((x:(String, Int)) => x._2, false)
/**
* 取出出现次数最多的学校名称
*/
val name = sortRdd.take(1)(0)._1
println(name)
/**
* 过滤文件中出现最多的企业名
*/
val resultRdd = textFileRdd.filter(x => !name.equals(x.split("\t")(1)))
resultRdd.saveAsTextFile("hdfs://hadoop1:9000/output/result")
sc.stop()
 }
}

2.搭建hadoop HA

  a).将hadoop-2.7.3.tar.gz上传至hadoop1节点的指定目录(/software/),安装tar –xvf ./hadoop-2.7.2.tar.gz

  b).修改hadoop-env.sh
    vi /software/hadoop-2.7.3/etc/hadoop/hadoop-env.sh

    修改export JAVA_HOME 语句为 export JAVA_HOME={你自己的JAVA_HOME路径,如果配置了环境变量,可以不用配置}

  c).设置hadoop环境变量,HADOOP_HOME/bin、HADOOP_HOME/sbin都要加到$path中

  d).建立免秘钥登录(可选项,为了后期方便)

    [root@hadoop1 ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

    #私钥 id_dsa

    #公钥 id_dsa.pub 

    #想登陆哪台机器,就把公钥里面的内容copy 给哪台机器的authorized_keys里面保存,登陆自身免密执行如下命令
    [root@hadoop1 .ssh]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

3.搭建spark 集群

  a).将spark-1.6.0-bin-hadoop2.6.tgz上传至hadoop1节点的指定目录(/software/),安装tar –xvf ./spark-1.6.0-bin-hadoop2.6.tgz,mv改名字

  b)./ect/profile 下配置环境变量 ($SPARK_HOME/bin\$SPARK_HOME/sbin都要加到$PATH中)

  c).进入conf下

    1、将slaves.template 修改为 slaves

    2、修改slaves,将从节点的ip或者hostname添加到这个文件中,每一个ip或者hostname占用一行

    3、将spark-env.sh.template 修改为 spark-env.sh

    4、在spark-env.sh配置文件中添加以下环境变量     

      export SPARK_MASTER_IP=hadoop1  #master节点的hostname
      export SPARK_MASTER_PORT=7077  #提交applicatoin的端口

      export SPARK_WORKER_MEMORY=2g #每一个Worker节点管理2G内存
      export SPARK_WORKER_CORES=3    #每一个Worker节点管理3个core

4.安装scala,配置环境变量

  a).将scala-2.10.4.tgz上传至hadoop1节点的指定目录(/software/),安装tar –xvf ./scala-2.10.4.tgz,mv改名字

  b)./ect/profile 下配置环境变量

  c).关闭虚拟机,复制两份

    分别修改虚拟机的ip和hostname(hadoop2、hadoop3),确认互相能够ping通,用ssh登陆,同时修改所有虚拟机的/etc/hosts,确认使用名字可以ping通

    关闭防火墙,防止端口端口访问不同。

5.把项目打成jar包放到spark上运行(移动计算,不移动数据)

  a).导出jar包

  b).在hadoop1节点的SPARK_HOME/sbin下执行start-all.sh脚本 启动spark集群

  c).分别在hadoop1节点执行 hadoop-daemon.sh start namenode; hadoop2、3执行 hadoop-daemon.sh start datanode 启动hadoop

  d).使用浏览器打开http://hadoop1:8080查看spark集群的运行环境、http://hadoop1:50070查看hadoop的运行环境

  e).上传jar包、测试数据的文件到hadoop1节点

    在hdfs中创建input文件夹:hdfs dfs -mkdir /input

    放入测试数据文件:hdfs dfs -put log.txt /input/log.txt

  f).提交application

    spark-submit --master spark://hadoop1:7077 --class FilterCountOperator ../lib/WordCount.jar