一、创建虚拟机安装CentOS及环境部署
1.1、安装CentOS
1、安装VMware Workstation 12 Pro虚拟机。
2、创建虚拟机:打开VMware Workstation 12 Pro 版本12.5.6,新建虚拟机,选择【自定义】点击【下一步】,直接【下一步】,选择【稍后安装操作系统】点击【下一步】,默认即可点击【下一步】,输入虚拟机名称为CentOS201点击【下一步】,默认点击【下一步】,分配1024内存点击【下一步】,默认的点下去直到完成。
3、安装虚拟机中的CentOS 6.5操作系统:选择创建好的虚拟机CentOS201,单击【编辑虚拟机设置】,选择安装介质(即本地的CentOS 6.5镜像文件),进入安装,选择第一项开始安装 =>Skip=>欢迎界面Next=>选择默认语言=>Baisc Storage Devices=>
Yes, discard any data=>输入主机名(spark6)=>选择时区=>设置初始密码为hadoop=>Replace Existing Linux System=>
Write changes to disk之后CentOS 6.5自己开始安装。
4、安装完以后,CentOS会提醒你要重启一下,就是reboot,单击reboot就可以了。
1.2、配置网路
1、先临时性设置虚拟机ip地址:ifconfig eth0 192.168.1.6
,然后在/etc/hosts文件中配置本地ip(192.168.1.6)到host(spark6)的映射。
vi /etc/hosts
vi /etc/sysconfig/network
另起一行输入(192.168.1.6 spark6
)退出保存就可以了。
vi 编辑器的使用方法详见:Linux操作命令
2、配置windows主机上的hosts文件:C:\Windows\System32\drivers\etc\hosts,加入(192.168.1.6 spark6
)。这样配置好,虚拟机和本地的windows就能通信了,可以互相的ping一下检验是否配置成功。
3、使用SecureCRT从windows上连接虚拟机。
4、使用SecureCRT永久性配置CentOS网络。
输入命令:
vi /etc/udev/rules.d/70-persistent-net.rules
vi /etc/sysconfig/network-scripts/ifcfg-eth0
按照下面的配置进行修改
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.6
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
5、输入下面的命令重启网卡
service network restart
6、逐步输入下面两个命令关闭防火墙
service iptables stop
chkconfig iptables off
编辑config文件把SELINUX改成(disabled)
vi /etc/selinux/config
SELINUX=disabled
关闭windows的防火墙!
7、配置dns服务器
编辑resolv.conf
vi /etc/resolv.conf
把下面的这两句话粘贴进去
nameserver 8.8.8.8
nameserver 61.139.2.69
ping www.baidu.com
试一下是否能连网。
说明:即使更换了ip地址,重启网卡,可能还是联不通网。那么可以先将IPADDR、NETMASK、GATEWAY给删除,将BOOTPROTO改成dhcp。然后用service network restart重启网卡。此时linux会自动给分配一个ip地址,用ifconfig查看分配的ip地址。然后再次按照之前说的,配置网卡,将ip改成自动分配的ip地址。最后再重启一次网卡。
1.3、yum配置
CentOS默认yum源是国外的,速度无法保证,用起来很不爽,我们把默认源换成国内的163源,163源速度相对来说快很多。
1、修改repo
使用WinSCP,将CentOS6-Base-163.repo上传到CentOS中的/usr/local目录下。
执行下面两句话,删除yum.repos.d里的所有内容
cd /etc/yum.repos.d/
rm -rf *
把自己的repo文件移动到/etc/yum.repos.d/目录中:cp /usr/local/CentOS6-Base-163.repo .
修改repo文件,把所有gpgcheck属性修改为0。
执行下面两句话清除缓存再重新加载。
yum clean all
yum makecache
安装telnet:yum install telnet
1.4、安装JDK
1、将jdk-7u60-linux-i586.rpm通过WinSCP上传到虚拟机中
2、安装JDK:rpm -ivh jdk-7u65-linux-i586.rpm
3、配置jdk相关的环境变量:根目录下执行vi .bashrc
粘贴下面两句话
export JAVA_HOME=/usr/java/latest
export PATH=$PATH:$JAVA_HOME/bin
重启一下:source .bashrc
4、测试jdk安装是否成功:java -version
5、rm -f /etc/udev/rules.d/70-persistent-net.rules
查看是否有预装jdk及jdk版本
rpm -qa|grep jdk
卸载预装jdk rpm -e --nodeps jdk-1.7.0_79-fcs.x86_64
到这里第一台虚拟机就完成了,接下来重复上面的步骤再安装两台。另外两台机器的hostname分别设置为spark7和spark8即可,ip分别为192.168.1.7和192.168.1.8。在安装的时候,另外两台虚拟机的centos镜像文件必须重新拷贝一份,放在新的目录里,使用各自自己的镜像文件。安装好之后,记得要在三台机器的/etc/hosts文件中,配置全三台机器的ip地址到hostname的映射,而不能只配置本机,这个很重要!还有windows的hosts文件中也要配置全三台机器的ip地址到hostname的映射。
1.5、配置集群ssh免密码登录
1、首先在三台机器上配置对本机的ssh免密码登录
使用以下命令生成本机的公钥,过程中不断敲回车即可,ssh-keygen命令默认会将公钥放在/root/.ssh目录下
ssh-keygen -t rsa
将公钥复制为authorized_keys文件,此时使用ssh连接本机就不需要输入密码了
cd /root/.ssh
cp id_rsa.pub authorized_keys
2、接着配置三台机器互相之间的ssh免密码登录
使用ssh-copy-id -i hostname
命令将本机的公钥拷贝到指定机器的authorized_keys文件中(hostname分别为另外两台虚拟机的名称)
第一章所需要的安装包:安装包提取码:u9fq
二、Hadoop-2.4.1集群搭建
2.1、安装hadoop包
1、使用WinSCP把hadoop-2.4.1.tar.gz上传到CentOS的/usr/local目录下。
2、将hadoop包进行解压缩:tar -zxvf hadoop-2.4.1.tar.gz -C /usr/local/
3、对hadoop目录进行重命名:mv hadoop-2.4.1 hadoop
4、配置hadoop相关环境变量:vi .bashrc
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin
别忘了source .bashrc
压缩包可以删除了:rm -rf hadoop-2.4.1.tar.gz
Linux 命令行输入命令执行后报“bash:vi:command not found”,这是由于系统 PATH 设置问题,PATH没有设置正确,系统就无法找到精确命令了。在命令行中输入:
export PATH=/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin
这样可以保证命令行命令暂时可以使用。vi .bashrc
重新编写环境变量。
2.2、修改配置文件
在hadoop集群中,需要配置的文件主要包括五个,分别是hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml,这五个文件分别是对不同组件的配置参数:
配置文件名 | 配置对象 | 主要内容 |
---|---|---|
hadoop-env.sh | hadoop运行环境 | 用来定义hadoop运行环境相关的配置信息 |
core-site.xml | 集群全局参数 | 用于定义系统级别的参数,如HDFS URL 、Hadoop的临时目录等 |
hdfs-site.xml | HDFS | 如名称节点和数据节点的存放位置、文件副本的个数、文件的读取权限等 |
mapred-site.xml | Mapreduce参数 | 包括JobHistory Server 和应用程序参数两部分,如reduce任务的默认个数、任务所能够使用内存的默认上下限等 |
yarn-site.xml | 集群资源管理系统参数 | 配置ResourceManager ,nodeManager的通信端口,web监控端口等 |
cd /usr/local/hadoop/etc/hadoop/
- 修改core-site.xml设置文件系统主机
vi core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://spark6:9000</value>
</property>
通过hadoop官方网址查询core-site.xml 配置信息可以了解最新的全部的core-site.xml 配置信息,而且包括一些过时的定义标识。
- 修改hdfs-site.xml更改数据存储路径,存储在/usr/local/data里所以不要忘记创建data文件夹
<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>
- 修改mapred-site.xml
指明hadoop的MR将来运行于YARN上。Yarn为资源调度系统(可运行MR,STORM,SPARK等计算框架)
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 修改yarn-site.xml
指定yarn的resourcemanager的地址;Nodemanager获取数据方式为shuffle方式
<property>
<name>yarn.resourcemanager.hostname</name>
<value>spark6</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 修改slaves文件(便于群起集群)
spark6
spark7
spark8
2.3、在另外两台机器上搭建hadoop
1、使用如上配置在另外两台机器上搭建hadoop,可以使用scp命令将spark6上面的hadoop安装包和.bashrc配置文件都拷贝过去。
2、要记得对.bashrc文件进行source,以让它生效。
3、记得在spark7和spark8的/usr/local目录下创建data目录mkdir data
。
scp -r hadoop root@spark6:/usr/local/
mkdir data
scp .bashrc root@spark7:
source .bashrc
4、脚本小工具(循环拷贝)保存文件为xsync。修改脚本 xsync 具有执行权限:chmod 777 xsync
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项参数说明
-r 递归
-v 显示复制过程
-l 拷贝符号连接
把spark2机器上的/usr/local/text/目录同步到spark3服务器的root用户下的/usr/local/text/目录
rsync -rvl /usr/local/text/ root@spark3:/usr/local/text/
```powershell
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环scp
for((host=6; host<9; host++)); do
echo ------------------- spark$host --------------
scp -r $pdir/$fname $user@spark$host:$pdir
done
调用:xsync 文件名
2.4、启动hdfs集群、yarn集群
1、格式化namenode:在spark6上执行以下命令,hdfs namenode -format
2、启动hdfs集群:start-dfs.sh
3、验证启动是否成功:输入jps会有以下几个进程
spark6:namenode、datanode、secondarynamenode
spark7:datanode
spark8:datanode
打开浏览器输入:spark6:50070
1、启动yarn集群:start-yarn.sh
2、验证启动是否成功:输入jps会有以下几个进程
spark6:resourcemanager、nodemanager
spark7:nodemanager
spark8:nodemanager
打开浏览器输入:spark6:8088
官方文档介绍使用Hadoop MapReduce和Hadoop分布式文件系统(HDFS)快速执行简单的操作
三、Hive 0.13搭建
3.1、安装hive包
1、将apache-hive-0.13.1-bin.tar.gz使用WinSCP上传到spark6的/usr/local目录下。
2、解压缩hive安装包:tar -zxvf apache-hive-0.13.1-bin.tar.gz
3、重命名hive目录:mv apache-hive-0.13.1-bin hive
4、配置hive相关的环境变量
vi .bashrc
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin
source .bashrc
3.2、安装mysql
1、在spark6上安装mysql。
2、使用yum安装mysql server。
yum install -y mysql-server
service mysqld start
chkconfig mysqld on
3、使用yum安装mysql connector
yum install -y mysql-connector-java
4、将mysql connector拷贝到hive的lib包中
cp /usr/share/java/mysql-connector-java-5.1.17.jar /usr/local/hive/lib
5、在mysql上创建hive元数据库,并对hive进行授权
输入mysql进入mysql执行下面的语句
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'@'spark04' identified by 'hive';
flush privileges;
use hive_metadata;
3.3 、配置hive-site.xml
1、先到hive的conf目录重命名hive-default.xml.template文件再用vi修改
cd /usr/local/hive/conf/
mv hive-default.xml.template hive-site.xml
vi hive-site.xml
找到以下的name修改value
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://spark6: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>
2、重命名hive-env.sh.template文件
mv hive-env.sh.template hive-env.sh
3、加入环境变量
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执行下面的语句验证是否配置成功
show databases;
create table t1(id int);
select * from t1;
drop table t1;
四、ZooKeeper 3.4.5集群搭建
4.1、安装ZooKeeper包
1、将zookeeper-3.4.5.tar.gz使用WinSCP拷贝到spark04的/usr/local目录下。
2、对zookeeper-3.4.5.tar.gz进行解压缩:tar -zxvf zookeeper-3.4.5.tar.gz
。
3、对zookeeper目录进行重命名:mv zookeeper-3.4.5 zk
。
4、配置zookeeper相关的环境变量
vi .bashrc
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=$ZOOKEEPER_HOME/bin
source .bashrc
4.2、配置zoo.cfg
cd zk/conf
mv zoo_sample.cfg zoo.cfg
编辑:vi zoo.cfg
修改:dataDir=/usr/local/zk/data
新增:三个节点
server.0=spark6:2888:3888
server.1=spark7:2888:3888
server.2=spark8:2888:3888
Server.A=B:C:D。
A是一个数字,表示这个是第几号服务器;
B是这个服务器的IP地址;
C是这个服务器与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
在zk目录创建data文件夹,在data文件夹创建myid文件并输入0
在另外两个节点上按照上述步骤配置ZooKeeper,使用scp将zk和.bashrc拷贝到spark7和spark8上即可。
唯一的区别是spark7和spark8的/usr/local/zk/data/myid标识号分别设置为1和2。
scp -r zk root@spark7:/usr/local/
scp .bashrc root@spark7:
source .bashrc
4.3、启动ZooKeeper集群
(1)启动Zookeeper,分别在三台机器上执行:zkServer.sh start
。
(2)查看进程: jps
是否有 QuorumPeerMain进程。
(3)检查ZooKeeper状态:zkServer.sh status
。
(4)启动客户端:zkCli.sh
(5)退出客户端:quit
(6)停止Zookeeper:zkServer.sh stop
群起脚本
#! /bin/bash
case $1 in
"start"){
for i in hadoop129 hadoop130 hadoop131
do
ssh $i "/usr/local/zookeeper-3.4.10/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop129 hadoop130 hadoop131
do
ssh $i "/usr/local/zookeeper-3.4.10/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop129 hadoop130 hadoop131
do
ssh $i "/usr/local/zookeeper-3.4.10/bin/zkServer.sh status"
done
};;
esac
五、kafka_2.9.2-0.8.1集群搭建
5.1、安装scala 2.11.4
将scala-2.11.4.tgz使用WinSCP拷贝到spark04的/usr/local目录下。
2、对scala-2.11.4.tgz进行解压缩:tar -zxvf scala-2.11.4.tgz
。
3、对scala目录进行重命名:mv scala-2.11.4 scala
4、配置scala相关的环境变量
vi ~/.bashrc
export SCALA_HOME=/usr/local/scala
export PATH=$SCALA_HOME/bin
source ~/.bashrc
5、查看scala是否安装成功:scala -version
6、按照上述步骤在spark7和spark8机器上都安装好scala。使用scp将scala和.bashrc拷贝到spark7和spark8上即可。
scp -r scala root@spark7:/usr/local/
scp -r ~/.bashrc root@spark7:
5.2、安装Kafka包
1、将课程提供的kafka_2.9.2-0.8.1.tgz使用WinSCP拷贝到spark6的/usr/local目录下。
2、对kafka_2.9.2-0.8.1.tgz进行解压缩:tar -zxvf kafka_2.9.2-0.8.1.tgz
。
3、对kafka目录进行改名:mv kafka_2.9.2-0.8.1 kafka
4、配置kafka
vi /usr/local/kafka/config/server.properties
broker.id:依次增长的整数,0、1、2、3、4,集群中Broker的唯一id,不用去管。
zookeeper.connect=192.168.1.6:2181,192.168.1.7:2181,192.168.1.8:2181
5、安装slf4j
将课程提供的slf4j-1.7.6.zip上传到/usr/local目录下
unzip slf4j-1.7.6.zip
没有unzip的话用:yum install unzip
安装
把slf4j中的slf4j-nop-1.7.6.jar复制到kafka的libs目录下面:
mv slf4j-nop-1.7.6.jar /usr/local/kafka/libs/
用scp把kafka拷贝到spark7和spark8行即可,没有配置环境变量.bashrc就不用拷贝了。
唯一区别的,就是server.properties中的broker.id,要设置为1和2
5.3、启动kafka集群
1、在三台机器上kafka的目录下` cd /usr/local/kafka`分别执行以下命令:
nohup bin/kafka-server-start.sh config/server.properties &
使用jps检查启动是否成功
解决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即可
5.4、测试kafka集群
使用基本命令检查kafka是否搭建成功
在/usr/local/kafka/目录下执行下面两句话
bin/kafka-topics.sh --zookeeper 192.168.1.6:2181,192.168.1.7:2181,192.168.1.8:2181 --topic TestTopic --replication-factor 1 --partitions 1 --create
bin/kafka-console-producer.sh --broker-list 192.168.1.6:9092,192.168.1.7:9092,192.168.1.8:9092 --topic TestTopic
克隆一个spark6会话在/usr/local/kafka/目录下执行下面这句话
bin/kafka-console-consumer.sh --zookeeper 192.168.1.6:2181,192.168.1.7:2181,192.168.1.8:2181 --topic TestTopic --from-beginning
当我们在原来的会话输入任何的东西按回车后也会打印在克隆的会话里。
六、Spark集群搭建
6.1、安装spark包
1、将spark-1.3.0-bin-hadoop2.4.tgz使用WinSCP上传到/usr/local目录下。
2、解压缩spark包:tar zxvf spark-1.3.0-bin-hadoop2.4.tgz
。
3、更改spark目录名:mv spark-1.3.0-bin-hadoop2.4 spark
4、设置spark环境变量
vi .bashrc
export SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/bin
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
source .bashrc
6.2、修改配置文件
到cd /usr/local/spark/conf
目录下重命名mv 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.1.6
export SPARK_WORKER_MEMORY=1g
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
重命名mv slaves.template slaves
vi slaves
spark1
spark2
spark3
在另外两个节点进行一模一样的配置,使用scp将spark和.bashrc拷贝到spark2和spark3即可。
scp -r spark root@spark7:/usr/local/
scp ~/.bashrc root@spark7:~/
source ~/.bashrc
6.3、启动spark集群
1、在spark目录下的sbin目录
2、执行./start-all.sh
3、使用jsp和spark4:8080端口可以检查集群是否启动成功
4、进入spark-shell查看是否正常
搭完了下一篇:算法篇