我的大数据之路(5) Spark2.0-hadoop2.6.5高可用集群搭建
-
root用户下将下载好的压缩包压解到/user目录下
tar -zxvf spark-2.0.0-bin-hadoop2.6.tgz -C /user
-
在 /user目录下创建软连接(快捷方式)
ln -s spark-2.0.0-bin-hadoop2.6/ spark
-
修改配置文件spark-env.sh,没有就将spark-env.sh.template改名
vi spark-env.sh
export JAVA_HOME=/user/jdk1.8 #export SCALA_HOME=/user/scala export HADOOP_HOME=/user/hadoop-2.6.5 export HADOOP_CONF_DIR=/user/hadoop-2.6.5/etc/hadoop export SPARK_WORKER_MEMRY=500m export SPARK_WORKER_CORES=1 export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Slave1:2181,Slave2:2181 -Dspark.deploy.zookeeper.dir=/user/spark/spark_status" SPARK_LOG_DIR=/user/spark/logs # 更换日记目录,先创建好 # Where log files are stored. (Default: ${SPARK_HOME}/logs) SPARK_PID_DIR=/user/spark/tmp #更换临时文件目录,先创建好 #Where the pid file is stored. (Default: /tmp)
-
复制slaves.template为slaves,添加自己主机hostname
-
将spark更改文件组
chown -R hadoop:hadoop /user/spark-2.0.0-bin-hadoop2.6 chown -R hadoop:hadoop /user/spark
-
切换成hadoop用户,将spark分发到其他节点
scp -r /user/spark-2.0.0-bin-hadoop2.6 [email protected]:/user scp -r /user/spark-2.0.0-bin-hadoop2.6 [email protected]:/user
-
配置环境变量,三台机都配
vi ~/.bashrc ---------------------------------------------------------------- PATH=/user/spark/bin:/user/spark/sbin:$PATH :wq! source ~/.bashrc
-
启动zookeeper集群,进入zookeeper目录,三台都要开
/bin/zkServer.sh start /bin/zkServer.sh status --------------------------------- 此时看到一个leader和两个follower
-
启动HDFS集群,任意一台机即可,建议在master上,前提全部免密登录
start-dfs.sh
-
在启动Spark集群
cd /user/spark
start-all.sh -
查看进程
Master
Slave1
Slave2 -
问题
查看进程发现spark集群只有Master成功启动了Master进程,其他2个节点均没有启动成功,需要手动启动,进入 spark目录sbin/start-master.sh
-
进入web master:8080,Slave1:8080,Slave2:8080可以看到Slave1的status为ACTIVE
-
kill掉Slave1的master进程,验证是否高可用
-
在此打开Slave1:8080,发现已经加载不到
-
而Slave2的status变成了ACTIVE,高可用成功
Master则不变
基本使用
当Master处于ALIVE时,节点哪一个处于ALIVE就使用哪一个,不然虽然可以使用,但是会报一大堆错误。
[[email protected] spark]$ bin/spark-submit \
> --class org.apache.spark.examples.SparkPi \
> --master spark://Master:7077 \ # 不要全部复制,这里注意:节点哪一个处于ALIVE就使用哪一个,只改变这个 spark://Master:7077
> --executor-memory 500m \
> --total-executor-cores 1 \
> /user/spark/examples/jars/spark-examples_2.11-2.0.0.jar \
> 100
结果如下图,Pi的输出在中间
-
开启Spark
[[email protected] spark]$ bin/spark-shell \ > --master spark://Master:7077 \ > --executor-memory 500m \ > --total-executor-cores 1
-
当看到这个说明就成功啦
注意:
如果启动spark shell时没有指定master地址,但是也可以正常启动spark shell和执行spark shell中的程序,其实是启动了spark的local模式,该模式仅在本机启动一个进程,没有与集群建立联系。
Spark Shell中已经默认将SparkContext类初始化为对象sc。用户代码如果需要用到,则直接应用sc即可
Spark Shell中已经默认将SparkSQl类初始化为对象spark。用户代码如果需要用到,则直接应用spark即可
-
由于是集群,所以在Slave1上编写文件上传到HDFS在Master上一样可以使用
vi hello.txt --------------------------------------------- like,cattle like,filesh like,she like,her
-
上传至HDFS,前提配好环境变量
hadoop fs -put hello.txt / hadoop fs -ls /
-
在spark shell中用scala语言编写spark程序
sc.textFile("hello.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/out")
- 突然报了个错,前面吧啦吧啦一大堆,最后来个: Caused by: java.net.UnknownHostException:ns 可能原因是主机映射关系没做好,反正我解决了。由于之前hadoop上的配置文件core-size.xml上的
- 所以spark不认识这个hdfs://ns,解决办法: 重新修改 /etc/hosts 文件,在后面加上
192.168.23.200 ns 像这样
-
重新开启spark-shell
sc.textFile("/hello.txt").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_).saveAsTextFile("/out2")
-
查看hdfs上的文件
hadoop fs -ls /out2 hadoop fs -cat /out2/pa*
-
如图
参考博客 http://www.cnblogs.com/qingyunzong/p/8888080.html#_label1