Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具备的优势;但不一样于MapReduce的是Job中间输出结果能够保存在内存中,从而再也不须要读写HDFS,所以Spark能更好地适用于数据挖掘与机器学习等须要迭代的MapReduce的算法。java
Spark 是一种与 Hadoop 类似的开源集群计算环境,可是二者之间还存在一些不一样之处,这些有用的不一样之处使 Spark 在某些工做负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了可以提供交互式查询外,它还能够优化迭代工做负载。node
Spark 是在 Scala 语言中实现的,它将 Scala 用做其应用程序框架。与 Hadoop 不一样,Spark 和 Scala 可以紧密集成,其中的 Scala 能够像操做本地集合对象同样轻松地操做分布式数据集。web
尽管建立 Spark 是为了支持分布式数据集上的迭代做业,可是实际上它是对 Hadoop 的补充,能够在 Hadoop 文件系统中并行运行。经过名为 Mesos 的第三方集群框架能够支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。算法
192.168.174.141 hd1 master 192.168.174.142 hd2 slave1 192.168.174.143 hd3 slave2
useradd hadoop passwd hadoop New password: Retype new password: 受权 root 权限,在root下面加一条hadoop的hadoop ALL=(ALL) ALL #修改权限 chmod 777 /etc/sudoers vim /etc/sudoers ## Allow root to run any commands anywhere root ALL=(ALL) ALL hadoop ALL=(ALL) ALL #恢复权限 chmod 440 /etc/sudoers
#进入到个人home目录, su - hadoop ssh-keygen -t rsa (连续按四个回车) #执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥) #将公钥拷贝到要免密登陆的机器上 ssh-copy-id hd2 ssh-copy-id hd3
#在h1,h2,h3机器上新建apps目录用于存放hadoop和spark安装包 mkdir -p /home/hadoop/apps/hadoop cd /home/hadoop/apps/hadoop #在hd1机器上 下载hadoop2.7.7(hd2,hd3上等在hd1把hadoop的相关配置改完后scp发送过去) wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz tar -zxvf hadoop-2.7.7.tar.gz #配置环境变量 sudo vim /etc/profile #添加HADOOP_HOME export HADOOP_HOME=/home/hadoop/apps/hadoop/hadoop-2.7.7 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin #刷新环境变量 source /etc/profile #查看hadoop版本 hadoop version #配置Hadoop的JAVA_HOME cd /home/hadoop/apps/hadoop/hadoop-2.7.7/etc/hadoop vim hadoop-env.sh #大概在25行,添加 export JAVA_HOME=/opt/soft/java/jdk1.8.0_73 #修改配置文件 一、修改core-site.xml vim core-site.xml <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hd1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/apps/hadoop/hadoop-2.7.7/tmp</value> </property> </configuration> 二、修改hdfs-site.xml vim hdfs-site.xml <configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>hd1:50090</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/apps/hadoop/hadoop-2.7.7/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/apps/hadoop/hadoop-2.7.7/tmp/dfs/data</value> </property> </configuration> 三、修改mapred-site.xml #目录下没有这个文件,复制一份出来 cp mapred-site.xml.template mapred-site.xml vim mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>hd1:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hd1:19888</value> </property> </configuration> 四、修改yarn-site.xml vim yarn-site.xml <configuration> <!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>hd1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <property> <name>yarn.log.server.url</name> <value>http://hd1:19888/jobhistory/logs</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> </configuration> 五、修改slaves文件内容,该文件指定哪些服务器节点是datanode节点,删除里面的localhost cd /home/hadoop/apps/hadoop/hadoop-2.7.7/etc/hadoop vim slaves hd1 hd2 hd3 #以上全部配置文件已经配好的,在hd1上将配置好的hadoop-2.7.7目录复制到hd2,hd3相同目录 cd /home/hadoop/apps/hadoop scp -r hadoop-2.7.7 hadoop@hd2:/home/hadoop/apps/hadoop/ scp -r hadoop-2.7.7 hadoop@hd3:/home/hadoop/apps/hadoop/ scp /etc/profile root@hd2:/etc/ 并在hd2上执行:source /etc/profile scp /etc/profile root@hd3:/etc/ 并在hd3上执行:source /etc/profile # 格式化集群操做 #格式化namenode和datanode并启动,(在hd1(master)上执行就能够了 不须要在(hd2,hd3)slave上执行) hdfs namenode -format #关闭全部机器防火墙 service iptables stop #启动hadoop集群 #依次执行两个命令 #启动hdfs start-dfs.sh #再启动 start-yarn.sh #直接用一个命令也能够 start_all.sh #验证是否启动成功,缺乏如下任一进程都表示出错 #在hd1,hd2,hd3分别使用jps命令,能够看到 #hd1中显示 56310 NameNode 56423 DataNode 56809 ResourceManager 56921 NodeManager 56634 SecondaryNameNode # hd2中显示 16455 NodeManager 16348 DataNode #hd3显示 13716 DataNode 13823 NodeManager #查看集群web页面 hdfs页面:http://hd1:50070/ 或者http://192.168.174.141:50070/
yarn页面:http://hd1:8088/ 或者http://192.168.174.141:8088/
#中止集群命令:stop_dfs.sh和stop_yarn.sh或者stop_all.sh
以上Hadoop的集群搭建过程已大功告成!shell
依赖环境:Scala Spark是使用Scala编写的,用Scala编写Spark任务能够像操做本地集合对象同样操做分布式数据集RDD 安装Scalla和安装jdk一模一样的操做,我这里给出scala的下载地址:https://downloads.lightbend.com/scala/2.11.7/scala-2.11.7.tgz #安装完scala能够查看版本 scala -version #这里重点介绍Spark的安装,相比于hadoop的安装要简单一些,并且步骤相似,话很少说,开始! #在hd1机器用hadoop用户先建立spark的目录 cd /home/hadoop/apps mkdir spark cd spark #下载spark安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.2.2/spark-2.2.2-bin-hadoop2.7.tgz #解压 tar -zxvf /spark-2.2.2-bin-hadoop2.7.tgz #重命名 mv spark-2.2.2-bin-hadoop2.7 spark-2.2.2 #修改环境变量 vim /etc/profile export SPARK_HOME=/home/hadoop/apps/spark/spark-2.2.2 export PATH=$PATH:$SPARK_HOME/bin #从新加载环境 source /etc/profile #修改配置文件 cd /home/hadoop/apps/spark/spark-2.2.2/conf mv spark-env.sh.template spark-env.sh vim spark-env.sh #这里介绍两个spark的部署模式,一种是standalone模式,一种是spark on yarn模式,任选一种配置便可 #一、standalone模式 export JAVA_HOME=/opt/soft/java/jdk1.8.0_73 #Spark主节点的IP export SPARK_MASTER_IP=hd1 #Spark主节点的端口号 export SPARK_MASTER_PORT=7077 #二、spark on yarn配置 export JAVA_HOME=/opt/soft/java/jdk1.8.0_73 export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop/hadoop-2.7.7/etc/hadoop/ #修改slaves文件 cd /home/hadoop/apps/spark/spark-2.2.2/conf vim slaves hd2 hd3 #复制hd1中的spark到hd2和hd3机器中 cd /home/hadoop/apps/spark scp -r spark-2.2.2/ hadoop@hd2:/home/hadoop/apps/spark scp -r spark-2.2.2/ hadoop@hd3:/home/hadoop/apps/spark #配置环境变量:分别修改hd2,hd3环境变量或者直接将hd1上的/etc/profile文件复制到hd2和hd3上。 vim /etc/profile export SPARK_HOME=/home/hadoop/apps/spark/spark-2.2.2 export PATH=$PATH:$SPARK_HOME/bin source /etc/profile #至此,Spark集群配置完毕,启动Spark集群。 #启动spark集群前要先启动hadoop集群。 #Spark集群启动 cd /home/hadoop/apps/spark/spark-2.2.2/sbin ./start-all.sh #测试Spark集群是否正常启动 #在hd1,hd2,hd3分别执行jps, 在hd1中显示:Master 63124 Jps 56310 NameNode 56423 DataNode 63064 Master 56809 ResourceManager 56921 NodeManager 56634 SecondaryNameNode 在hd二、hd3中显示:Worker 18148 Jps 16455 NodeManager 16348 DataNode 18079 Worker #测试spark-shell和页面 cd /home/hadoop/apps/spark/spark-2.2.2/bin ./spark-shell #访问页面地址: http://hd1:8080/ 或者:http://192.168.174.141:8080/
http://hd1:4040/jobs/ 或者 http://192.168.174.141:4040/jobs/