前言:会一些linux的基础,以及java基础。以及是先搭建好java环境,搭建环境是单机版。假定ip:192.168.248.133
步入正轨,我们直接来说说怎么搭建一个基于hadoop的spark环境。目的能够让spark将job提交到hadoop上处理。利用hadoop的分布式框架。
第一步:搭建hadoop的单机环境
1.在/etc/hostname 下修改对应的名字。 比如Master
2.修改etc/hosts 修改成192.168.248.133Master
3.首先在ubuntu上配置ssh免密码。
a.安装ssh : apt-get install ssh openssh-server
b.cd ~/.ssh(如果显示文件不存在。先输入ssh localhost命令)
c.ssh-keygen -t rsa (一直按回车)
d. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys (将生成的公钥添加到ssh中)
e.尝试使用ssh localhost 进入 exit退出
4.下载hadoop2.6.0,并完成相应的配置
a.下载hadoop:wget http://apache.fayea.com/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz
b.解压到安装目录下 tar -zxvf hadoop-2.6.0.tar.gz
c.我是解压到 /home下的目录.然后进入到hadoop的目录下。
cd /opt/hadoop-2.6.0
就能看到hadoop的目录结构了。
5.修改配置文件 进入到hadoop目录下的etc/hadoop目录修改里面的配置文件
b.编辑 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.248.133:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/share/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/share/hadoop/tmp/dfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
d.编辑 slave (有几个节点就添加几个节点,如果是配置单机版,就将里面的节点名改为主节点Master的节点名)
启动hadoop
准备:切换 Hadoop 的模式,不管是从集群切换到伪分布式,还是从伪分布式切换到集群,如果遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。或者可以为集群模式和伪分布式模式设置不同的临时文件夹(未验证)。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 tmp 文件夹,重新执行一次 bin/hdfs namenode -format,再次启动试试。
6.启动hadoop
a.cd /opt/hadoop-2.6.0
b.bin/hdfs namenode -format # 首次运行需要执行初始化,后面不再需要
sbin/start-all.sh
c.通过命令jps可以查看各个节点所启动的进程(我这个是事先搭建好了spark,没有搭建spark的就没有6个进程,没有master和worker进程)
6.节点都启动好了之后,打开她的监控页面 Master:8088
可以看到一个活跃的节点。到此hadoop环境已经搭建完成。需要优化可以在配置文件里添加一些优化信息。比如说日志的配置等等
第二步:搭建spark的单机环境
1.下载spark1.6.0.虽然现在spark2.0已经出来了,但是使用的不是太多。我们还是使用1.6.0的版本
a.wget http://d3kbcqa49mib13.cloudfront.net/spark-1.6.1-bin-hadoop2.6.tgz
我们选择预编译好的spark1.6.1的版本。也可自行编译。
2.同上hadoop。我们将其解压到安装目录下
tar -zxvf spark-1.6.1-bin-hadoop2.6.tgz
改个名字吧,这个文件夹名字有点长。 mv spark-1.6.1-bin-hadoop2.6 spark1.6
3.修改配置文件
a.将spark1.6里面的conf文件夹里面的模板文件全部替换成使用的文件。比如说 mv spark-env.sh.tmp spark-env.sh
在spark-env.sh中添加
export JAVA_HOME=
export HADOOP_HOME=
export SPARK_MASTER_IP=Master
#export SPARK_MASTER_HOSTS=192.168.244.133
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SCALA_HOME=/opt/scala-2.11.8
export SPARK_YARN_USER_ENV="CLASSPATH=/opt/hadoop-2.6.0/etc/hadoop"
export SPARK_DIST_CLASSPATH=$(/opt/hadoop-2.6.0/bin/hadoop classpath)
export SPARK_WORKER_MEMORY=2g
b.修改slave文件。将localhost换成Master
4.安装scala
a.下载scala wget http://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
b.将scala解压到安装目录 tar -zxvf scala-2.11.8.tgz
c.将scala的路径配置到环境变量里。
在/etc/profile中添加
export SCALA_HOME=/opt/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
5.到此spark的单机版搭建完成。启动spark。
a.在spark安装目录下输入sbin/start-all.sh
b.jps输入我们就能看见worker和master节点了。
6.打开她的监控页面 Master:8080就能看见spark的监控页面
到这一步就代表spark已经搭建完成了。现在已经可以在spark上跑代码啦。
第三步:将eclipse作为开发环境
a.将hadoop-eclipse-plugin-2.6.0.jar放到eclipse里面的plugin文件夹目录下。
b. 启动eclipse。在eclipse中的window的preferences的Hadoop Map/Reduce下添加hadoop的路径。
c.创建一个hadoop的location
第四步:创建工程
1.创建一个简单的java工程。
a.在工程里面创建三个目录,分别是conf,lib,yarn
b.将spark目录下的conf下的所有配置文件放入到conf里面,将spark里面的lib下的spark-assembly-1.6.1-hadoop2.6.0.jar放入到lib,将hadoop下的etc下的hadoop里面core-site.xml hdfs-site.xml yarn-site.xml放到yarn文件夹里面。
2.基于spark的standslone模式
a.创建一个stanalone类
直接上代码:
public class stanalone{ private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) { //创建sparkConf SparkConf conf = new SparkConf().setAppName("standaloneTest").setMaster("spark://master:7077"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD rdd= Arrays.asList(1,2.2,5); JavaRDD dis =sc.parallelize(rdd); System.out.println("array num = "+dis.count());//控制台打印出array的个数 4 sc.stop();
到此我们看见我们已经成功的在spark上运行了一个简单的计数。
2.基于spark的yarn模式
a.创建一个stanalone类
直接上代码:
public class stanalone{ private static final Pattern SPACE = Pattern.compile(" "); public static void main(String[] args) { //创建sparkConf SparkConf conf = new SparkConf().setAppName("yarn").setMaster("yarn-client"); //根据官网上面的提示 conf.set("spark.yarn.dist.files","/conf/yarn-site.xml"); conf.set("spark.yarn.jar","/lib/spark-assembly-1.6.1-hadoop2.6.0.jar"); JavaSparkContext sc = new JavaSparkContext(conf); //将工程打包成jar test.jar sc.addJar("test.jar"); JavaRDD rdd= Arrays.asList(1,2.2,5); JavaRDD dis =sc.parallelize(rdd); System.out.println("array num = "+dis.count());//控制台打印出array的个数 4 sc.stop();
到此我们看见我们已经成功的在hadoop上运行了一个简单的计数。
整个过程到此结束。