Spark集群环境搭建(最少3台)
1、Linux虚拟机网络配置
- ifconfig eth0 192.168.0.100
- 在/etc/hosts文件中配置本地ip(192.168.0.100)到host(spark1)
- 配置静态ip:
vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.100 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=192.168.0.1
- 重启网卡:service network restart
- 关闭防火墙:
service iptables stop chkconfig iptables off vi /etc/selinux/config SELINUX=disabled
自己在win7的控制面板中,关闭windows的防火墙!
2、yum配置
- 修改repo
cd /etc/yum.repos.d/ rm -rf * mv 自己的repo文件移动到/etc/yum.repos.d/目录中:cp /usr/local/CentOS6-Base-163.repo . 修改repo文件,把所有gpgcheck属性修改为0
- 配置yum
yum clean all yum makecache yum install telnet
3、JDK1.7安装
- 安装JDK:rpm -ivh jdk-7u65-linux-i586.rpm
- 配置jdk相关的环境变量
cd vi .bashrc export JAVA_HOME=/usr/java/latest export PATH=$PATH:$JAVA_HOME/bin source .bashrc
- 测试jdk安装是否成功:java-version
- rm-f /etc/udev/rules.d/70-persistent-net.rules
- 同理安装第二台和第三台
4、配置集群ssh免密码登录
-
首先在三台机器上配置对本机的ssh免密码登录生成本机的公钥,过程中不断敲回车即可,ssh-keygen命令默认会将公钥放在/root/.ssh目录下:
ssh-keygen -t rsa
-
将公钥复制为authorized_keys文件,此时使用ssh连接本机就不需要输入密码了
cd /root/.ssh cp id_rsa.pub authorized_keys
- 接着配置三台机器互相之间的ssh免密码登录
使用ssh-copy-id -i spark?命令将本机的公钥拷贝到指定机器的authorized_keys文件中(方便好用)
5、Hadoop2.4.1集群搭建
- 将hadoop-2.4.1.tar.gz上传到CentOS的/usr/local目录下
- 将hadoop包进行解压缩:tar -zxvf hadoop-2.4.1.tar.gz
- 对hadoop目录进行重命名:mv hadoop-2.4.1 hadoop
-
配置hadoop相关环境变量
cd vi .bashrc export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source .bashrc
- 创建data文件夹,后面配置中配置了
cd /usr/local mkdir data
- 修改hadoop配置
1>修改core-site.xml <property> <name>fs.default.name</name> <value>hdfs://spark1:9000</value> </property> 2>修改hdfs-site.xml <property> <name>dfs.name.dir</name> <value>/usr/local/data/namenode</value> </property> <property> <name>dfs.data.dir</name> <value>/usr/local/data/datanode</value> </property> <property> <name>dfs.tmp.dir</name> <value>/usr/local/data/tmp</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> 3>修改mapred-site.xml <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> 4>修改yarn-site.xml <property> <name>yarn.resourcemanager.hostname</name> <value>spark1</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> 5>修改slaves文件 spark1 spark2 spark3
-
使用如上配置在另外两台机器上搭建hadoop,可以使用scp命令将spark1上面的hadoop安装包和.bashrc配置文件都拷贝过去。
cd /usr/local scp -r hadoop root@spark2:/usr/local scp -r hadoop root@spark3:/usr/local
- .bashrc文件同样拷贝过去,要记得对.bashrc文件进行source,以让它生效
- 记得在spark2和spark3的/usr/local目录下创建data目录
- 启动hdfs集群
1、格式化namenode:在spark1上执行以下命令,hdfs namenode -format 2、启动hdfs集群:start-dfs.sh3、验证启动是否成功:jps、50070端口 spark1:namenode、datanode、secondarynamenode spark2:datanode spark3:datanode
- 启动yarn集群
1、启动yarn集群:start-yarn.sh 2、验证启动是否成功:jps、8088端口 spark1:resourcemanager、nodemanager spark2:nodemanager spark3:nodemanager
6、Hive 0.13搭建
- 将apache-hive-0.13.1-bin.tar.gz上传到spark1的/usr/local目录下
- 解压缩hive安装包:tar -zxvf apache-hive-0.13.1-bin.tar.gz
- 重命名hive目录:mv apache-hive-0.13.1-bin hive
- 配置hive相关的环境变量
vi ~/.bashrc export HIVE_HOME=/usr/local/hive export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin source ~/.bashrc
7、安装mysql
- 在spark1上安装mysql
- 使用yum安装mysqlserver
yum install -y mysql-server service mysqld start chkconfig mysqld on
- 使用yum安装mysqlconnector
yum install -y mysql-connector-java
-
将mysql connector拷贝到hive的lib包中
cp /usr/share/java/mysql-connector-java-5.1.17.jar /usr/local/hive/lib
- mysql上创建hive元数据库,并对hive进行授权
create database if not exists hive_metadata; grant all privileges on hive_metadata.* to 'hive'@'%' identified by 'hive'; grant all privileges on hive_metadata.* to 'hive'@'localhost' identified by 'hive'; grant all privileges on hive_metadata.* to 'hive'@'spark1' identified by 'hive'; flush privileges; use hive_metadata;
- 配置hive-site.xml
mv hive-default.xml.template hive-site.xml vi hive-site.xml <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://spark1:3306/hive_metadata?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hive</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> </property>
- 配置hive-env.sh和hive-config.sh
mv hive-env.sh.template hive-env.sh vi /usr/local/hive/bin/hive-config.sh export JAVA_HOME=/usr/java/latest export HIVE_HOME=/usr/local/hive export HADOOP_HOME=/usr/local/hadoop
- 验证hive是否安装成功
直接输入hive命令,可以进入hive命令行
8、ZooKeeper3.4.5集群搭建
- 将zookeeper-3.4.5.tar.gz拷贝到spark1的/usr/local目录下。
- 对zookeeper-3.4.5.tar.gz进行解压缩
tar -zxvf zookeeper-3.4.5.tar.gz
- 对zookeeper目录进行重命名
mv zookeeper-3.4.5 zk
- 配置zookeeper相关的环境变量
vi ~/.bashrc export ZOOKEEPER_HOME=/usr/local/zk export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin source ~/.bashrc
- 配置zoo.cfg
cd zk/conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg 修改:dataDir=/usr/local/zk/data 新增: server.0=spark1:2888:3888 server.1=spark2:2888:3888 server.2=spark3:2888:3888
- 设置zk节点标识
cd zk mkdir data cd data vi myid 0
- 在另外两个节点上按照上述步骤配置ZooKeeper,使用scp将zk和.bashrc拷贝到spark2和spark3上即可;唯一的区别是spark2和spark3的(myid文件中)标识号分别设置为1和2
- 启动ZooKeeper集群
分别在三台机器上执行:zkServer.sh start 检查ZooKeeper状态:zkServer.sh status
9、安装scala 2.11.4
- 将scala-2.11.4.tgz拷贝到spark1的/usr/local目录下
- 对scala-2.11.4.tgz进行解压缩
tar -zxvf scala-2.11.4.tgz
- 对scala目录进行重命名
mv scala-2.11.4 scala
- 配置scala相关的环境变量
vi ~/.bashrc export SCALA_HOME=/usr/local/scala export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin source ~/.bashrc
- 查看scala是否安装成功
scala -version
- 按照上述步骤在spark2和spark3机器上都安装好scala。使用scp将scala和.bashrc拷贝到spark2和spark3上即可
10、kafka_2.9.2-0.8.1集群搭建
-
将kafka_2.9.2-0.8.1.tgz拷贝到spark1的/usr/local目录下
- 对kafka_2.9.2-0.8.1.tgz进行解压缩
tar -zxvf kafka_2.9.2-0.8.1.tgz
- 对kafka目录进行改名
mv kafka_2.9.2-0.8.1 kafka
- 配置kafka
vi /usr/local/kafka/config/server.properties broker.id:依次增长的整数,0、1、2、3、4,集群中Broker的唯一id zookeeper.connect=192.168.0.100:2181,192.168.0.101:2181,192.168.0.102:2181
-
将slf4j-1.7.6.zip上传到/usr/local目录下
yum install unzip unzip slf4j-1.7.6.zip
把slf4j中的slf4j-nop-1.7.6.jar复制到kafka的libs目录下面
mv slf4j-1.7.6/slf4j-nop-1.7.6.jar kafka/libs
-
搭建kafka集群
按照上述步骤在spark2和spark3分别安装kafka。用scp把kafka拷贝到spark2和spark3行即可。 唯一区别的,就是server.properties中的broker.id,要设置为1和2
-
启动kafka集群
1、在三台机器上分别执行以下命令:nohup bin/kafka-server-start.sh config/server.properties & 2、解决kafka Unrecognized VM option 'UseCompressedOops'问题 vi bin/kafka-run-class.sh if [ -z "$KAFKA_JVM_PERFORMANCE_OPTS" ]; then KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true" fi 去掉-XX:+UseCompressedOops即可 3、使用jps检查启动是否成功
-
测试kafka集群
使用基本命令检查kafka是否搭建成功 窗口A bin/kafka-topics.sh --zookeeper 192.168.0.100:2181,192.168.0.101:2181,192.168.0.102:2181 --topic TestTopic --replication-factor 1 --partitions 1 --create bin/kafka-console-producer.sh --broker-list 192.168.0.100:9092,192.168.0.101:9092,192.168.0.102:9092 --topic TestTopic 新克隆一个窗口B bin/kafka-console-consumer.sh --zookeeper 192.168.0.100:2181,192.168.0.101:2181,192.168.0.102:2181 --topic TestTopic --from-beginning 在A窗口输入消息回车,看B窗口是否有信息
11、Spark1.3.0集群搭建
- 将spark-1.3.0-bin-hadoop2.4.tgz上传到/usr/local目录下
- 解压缩spark包
tar zxvf spark-1.3.0-bin-hadoop2.4.tgz
- 更改spark目录名
mv spark-1.3.0-bin-hadoop2.4 spark
- 设置spark环境变量
vi ~/.bashrc export SPARK_HOME=/usr/local/spark export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin:$SCALA_HOME/bin:$SPARK_HOME/bin export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib source ~/.bashrc
- 修改spark-env.sh文件
cd /usr/local/spark/conf cp spark-env.sh.template spark-env.sh vi spark-env.sh export JAVA_HOME=/usr/java/latest export SCALA_HOME=/usr/local/scala export SPARK_MASTER_IP=192.168.0.100 export SPARK_WORKER_MEMORY=1g export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
-
修改slaves文件
mv slaves.template slaves
vi slaves
spark2 spark3
-
安装spark集群
在另外两个节点进行一模一样的配置,使用scp将spark和.bashrc拷贝到spark2和spark3即可
-
启动spark集群
1、在spark目录下的sbin目录 2、执行./start-all.sh 3、使用jsp和8080端口可以检查集群是否启动成功 4、进入spark-shell查看是否正常
12、至此,Spark集群搭建完成
注意:scp命令=>
scp -r 要复制的文件夹 户名@IP:目标路径
如:
scp -r spark root@192.168.0.102:/usr/local
scp -r ~/.bashrc root@192.168.0.102:~/