电商项目的配置

安装centos6.4

设置网卡:桥接网卡

桥接方式下,VMware模拟一个虚拟的网卡给客户系统,主系统对于客户系统来说相当于是一个桥接器。客户系统好像是有自己的网卡一样,自己直接连上网络,也就是说客户系统对于外部直接可见。
简单地说,虚拟主机和物理主机在同一个网段,就相当于局域网里多出来了一台电脑在上网,而这台电脑就是虚拟机里的系统。物理主机和虚拟主机的IP处于同一网段,DNS和网关是一样的,这样就实现了物理主机和虚拟主机,虚拟主机和外网的相互通信。

**在/etc/hosts文件中配置本地ip到host的映射`

192.168.1.110  sparkproject1

配置IP
vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.110
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

TYPE:配置文件接口类型。在/etc/sysconfig/network-scripts/目录有多种网络配置文件,有Etherne 、IPsec等类型,网络接口类型为Ethernet。
DEVICE:网络接口名称
ONBOOT:系统启动时是否激活 。yes:系统启动时激活该网络接口 。no:系统启动时不激活该网络接口
BOOTPROTO:系统启动地址协议 。none:不使用启动地址协议;bootp:BOOTP协议;dhcp:DHCP动态地址协议;static:静态地址协议
IPADDR:IP地址
NETMASK:子网掩码
GATEWAY:网关地址
BROADCAST:广播地址

重启网卡以及关闭防火墙:

service network restart

service iptables stop
service ip6tables stop
service iptables status
service ip6tables status
chkconfig iptables off
chkconfig ip6tablesoff

vi /etc/selinux/config
SELINUX=disabled

配置DNS服务器、替换repo文件、配置yum

DNS服务器:域名系统/域名服务。域名系统为Internet上的主机分配域名地址和IP地址。用户使用域名地址,该系统会自动把域名地址转换为IP地址。域名服务是运行域名系统的Internet工具。执行域名服务的服务器称为DNS服务器。
文件/etc/resolv.conf配置DNS客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。

1、配置DNS服务器

vi /etc/resolv.conf
nameserver 61.139.2.69

nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。61.139.2.69是四川省成都市 电信IP地址, 就是DNS域名解析服务器的地址。

ping www.baidu.com 进行测试是否可以连接外网

2、修改repo文件

repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!
YUM的工作原理并不复杂,每一个 RPM软件的头(header)里面都会纪录该软件的依赖关系,那么如果可以将该头的内容纪录下来并且进行分析,可以知道每个软件在安装之前需要额外安装 哪些基础软件。也就是说,在服务器上面先以分析工具将所有的RPM档案进行分析,然后将该分析纪录下来,只要在进行安装或升级时先查询该纪录的文件,就可 以知道所有相关联的软件。所以YUM的基本工作流程如下:
服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。

将CentOS6-Base-163.repo上传到CentOS中的/usr/local目录下
cd /etc/yum.repos.d/
rm -rf *
mv 自己的repo文件移动到/etc/yum.repos.d/目录中:cp /usr/local/CentOS6-Base-163.repo .
修改repo文件,把所有gpgcheck属性修改为0

gpgchkeck= 有1和0两个选择,分别代表是否是否进行gpg校验,如果没有这一项,默认是检查的。

3、配置yum

yum clean all
yum makecache
yum install telnet

安装JDK 1.7

1、将jdk-7u60-linux-i586.rpm上传到虚拟机中
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

安装第二台、第三台及更多虚拟机

1、安装上述步骤,再安装两台一模一样环境的虚拟机。
2、(另外两台机器的hostname分别设置为sparkproject2和sparkproject3即可)(省略)
3、在安装的时候,另外两台虚拟机的centos镜像文件必须重新拷贝一份,放在新的目录里,使用各自自己的镜像文件。
4、虚拟机的硬盘文件也必须重新选择一个新的目录,以更好的区分。
5、安装好之后,记得要在三台机器的/etc/hosts文件中,配置全三台机器的ip地址到hostname的映射,而不能只配置本机,这个很重要!
6、在windows的hosts文件中也要配置全三台机器的ip地址到hostname的映射

设置集群ssh免密码登陆

1、在三台机器的/etc/hosts文件中,都配置对三台机器的ip-hostname的映射

192.168.1.105 sparkproject1
192.168.1.106 sparkproject2
192.168.1.107 sparkproject3

2、首先在三台机器上配置对本机的ssh免密码登录
生成本机的公钥,过程中不断敲回车即可,ssh-keygen命令默认会将公钥放在/root/.ssh目录下

ssh-keygen -t rsa

将公钥复制为authorized_keys文件,此时使用ssh连接本机就不需要输入密码了

cd /root/.ssh
cp id_rsa.pub authorized_keys

3、接着配置三台机器互相之间的ssh免密码登录
使用

ssh-copy-id -i sparkproject2/3

命令将本机的公钥拷贝到指定机器的authorized_keys文件中(方便好用)

搭建hadoop平台

1、使用课程提供的hadoop-2.5.0-cdh5.3.6.tar.gz,上传到虚拟机的/usr/local目录下。
2、将hadoop包进行解压缩:

tar -zxvf hadoop-2.5.0-cdh5.3.6.tar.gz

3、对hadoop目录进行重命名:

mv hadoop-2.5.0-cdh5.3.6 hadoop

4、配置hadoop相关环境变量

vi ~/.bashrc
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source ~/.bashrc

5、创建/usr/local/data目录

配置hadoop
主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件。core-site.xml是全局配置,hdfs-site.xml和mapred-site.xml分别是hdfs和mapred的局部配置。
1、修改core-site.xml:相当于配置hdfs的地址

<property>
  <name>fs.default.namename>
  <value>hdfs://sparkproject1:9000value>
property>

2、修改hdfs-site.xml:hdfs的属性

<property>
  <name>dfs.name.dirname>
  <value>/usr/local/data/namenodevalue>
property>
<property>
  <name>dfs.data.dirname>
  <value>/usr/local/data/datanodevalue>
property>
<property>
  <name>dfs.tmp.dirname>
  <value>/usr/local/data/tmpvalue>
property>
<property>

  <name>dfs.replicationname>
  <value>2value>
property>

3、修改mapred-site.xml :mapreduce相关配置:框架用yarn

<property>

  <name>mapreduce.framework.namename>
  <value>yarnvalue>
property>

4、配置yarn-site.xml:资源调度相关属性

<property>

  <name>yarn.nodemanager.aux-servicesname>
  <value>mapreduce_shufflevalue>
property>

5、配置slaves文件:

vi slaves
sparkproject2
sparkproject3

在另外两台机器上搭建hadoop
1、使用如上配置在另外两台机器上搭建hadoop,可以使用scp命令将sparkproject1上面的hadoop安装包和~/.bashrc配置文件都拷贝过去。

scp -r hadoop root@sparkproject2:/usr/local

2、要记得对.bashrc文件进行source,以让它生效。
3、记得在sparkproject2和sparkproject3的/usr/local目录下创建data目录。

启动hdfs集群
1、格式化namenode:在sparkproject1上执行以下命令:

hdfs namenode -format

2、启动hdfs集群:

start-dfs.sh

3、验证启动是否成功:jps、50070端口(主机端)
sparkproject1:namenode、secondarynamenode
sparkproject2:datanode
sparkproject3:datanode
4、测试文件

hdfs dfs -put hello.txt /hello.txt

启动yarn集群
1、在sparkproject1上启动yarn集群:

start-yarn.sh

2、验证启动是否成功:jps、8088端口
sparkproject1:resourcemanager、nodemanager
sparkproject2:nodemanager
sparkproject3:nodemanager

Hive安装及配置

安装hive

tar -zxvf hive-0.13.1-cdh5.3.6.tar.gz
mv hive-0.13.1-cdh5.3.6 hive
vi ~/.bashrc
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin
source ~/.bashrc

安装mysql

yum install -y mysql-server
service mysqld start
chkconfig mysqld on
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'@'spark1project' identified by 'hive’;
Delete FROM user Where User= ‘spark1 ‘and Host='localhost';
use hive_metadata;

配置hive-site.xml

mv hive-default.xml.template hive-site.xml

<property>
  <name>javax.jdo.option.ConnectionURLname>
  <value>jdbc:mysql://sparkproject1:3306/hive_metadata?createDatabaseIfNotExist=truevalue>
property>
<property>
  <name>javax.jdo.option.ConnectionDriverNamename>
  <value>com.mysql.jdbc.Drivervalue>
property>
<property>
  <name>javax.jdo.option.ConnectionUserNamename>
  <value>hivevalue>
property>
<property>
  <name>javax.jdo.option.ConnectionPasswordname>
  <value>hivevalue>
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命令行

create table users(id int, name string) 
load data local inpath '/usr/local/users.txt' into table users
select name from users 
Drop table users

安装zookeeper包

我们知道要写一个分布式应用是非常困难的,主要原因就是局部故障。一个消息通过网络在两个节点之间传递时,网络如果发生故障,发送方并不知道接收方是否接收到了这个消息。他可能在网络故障迁就收到了此消息,也坑没有收到,又或者可能接收方的进程死了。发送方了解情况的唯一方法就是再次连接发送方,并向他进行询问。这就是局部故障:根本不知道操作是否失败。因此,大部分分布式应用需要一个主控、协调控制器来管理物理分布的子进程。目前,大部分应用需要开发私有的协调程序,缺乏一个通用的机制。协调程序的反复编写浪费,且难以形成通用、伸缩性好的协调器。协调服务非常容易出错,并很难从故障中恢复。例如:协调服务很容易处于竞态1甚至死锁2。Zookeeper的设计目的,是为了减轻分布式应用程序所承担的协调任务。
Zookeeper并不能阻止局部故障的发生,因为它们的本质是分布式系统。他当然也不会隐藏局部故障。ZooKeeper的目的就是提供一些工具集,用来建立安全处理局部故障的分布式应用。
ZooKeeper是一个分布式小文件系统,并且被设计为高可用性。通过选举算法和集群复制可以避免单点故障3,由于是文件系统,所以即使所有的ZooKeeper节点全部挂掉,数据也不会丢失,重启服务器之后,数据即可恢复。另外ZooKeeper的节点更新是原子的,也就是说更新不是成功就是失败。通过版本号,ZooKeeper实现了更新的乐观锁4,当版本号不相符时,则表示待更新的节点已经被其他客户端提前更新了,而当前的整个更新操作将全部失败。当然所有的一切ZooKeeper已经为开发者提供了保障,我们需要做的只是调用API。与此同时,随着分布式应用的的不断深入,需要对集群管理逐步透明化监控集群和作业状态,可以充分利ZK的独有特性

tar -zxvf zookeeper-3.4.5-cdh5.3.6.tar.gz。
mv zookeeper-3.4.5-cdh5.3.6 zk。

vi ~/.bashrc
export ZOOKEEPER_HOME=/usr/local/zk
export PATH=$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=sparkproject1:2888:3888    
server.1=sparkproject2:2888:3888
server.2=sparkproject3:2888:3888

(新增:server.X代表组成整个服务的机器,当服务启动时,会在数据目录下查找这个文件myid,这个文件中存有服务器的号码。 )
server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

设置zk节点标识

除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

cd zk
mkdir data
cd data

vi myid
0

搭建zookeeper集群

1、在另外两个节点上按照上述步骤配置ZooKeeper,使用scp将zk和.bashrc拷贝到spark2和spark3上即可。
2、唯一的区别是spark2和spark3的标识号分别设置为1和2。

启动zookeeper集群
1、分别在三台机器上执行:zkServer.sh start。
2、检查ZooKeeper状态:zkServer.sh status,应该是一个leader,两个follower
3、jps:检查三个节点是否都有QuromPeerMain进程。

kafka集群搭建

安装scala

tar -zxvf scala-2.11.4.tgz。
mv scala-2.11.4 scala

vi ~/.bashrc
export SCALA_HOME=/usr/local/scala
export PATH=$SCALA_HOME/bin
source ~/.bashrc

查看scala是否安装成功:

scala -version

按照上述步骤在sparkproject2和sparkproject3机器上都安装好scala。使用scp将scala和.bashrc拷贝到另外两台机器上即可。

安装kafka包

tar -zxvf kafka_2.9.2-0.8.1.tgz。
mv kafka_2.9.2-0.8.1 kafka

配置kafka

vi /usr/local/kafka/config/server.properties
broker.id:依次增长的整数,0、1、2,集群中Broker的唯一id

zookeeper.connect=192.168.1.105:2181,192.168.1.106:2181,192.168.1.107:2181

安装slf4j(Simple logging facade for Java 日志库)

unzip slf4j-1.7.6.zip 把slf4j中的slf4j-nop-1.7.6.jar复制到kafka的libs目录下面

搭建kafka集群

按照上述步骤在另外两台机器分别安装kafka。用scp把kafka拷贝到sparkproject2和sparkproject3即可。
唯一区别的,就是server.properties中的broker.id,要设置为1和2

启动kafka集群
1、解决kafka Unrecognized VM option ‘UseCompressedOops’问题

vi /usr/local/kafka/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即可

2、在三台机器上的kafka目录下,分别执行以下命令:

nohup bin/kafka-server-start.sh config/server.properties & (后台执行)

3、使用jps检查启动是否成功

flume集群搭建

Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。
Flume是一个分布式、可靠和高可用的海量日志采集、聚合和传输的系统。

tar -zxvf flume-ng-1.5.0-cdh5.3.6.tar.gz
mv apache-flume-1.5.0-cdh5.3.6-bin flume

vi ~/.bashrc
export FLUME_HOME=/usr/local/flume
export FLUME_CONF_DIR=$FLUME_HOME/conf
export PATH=$FLUME_HOME/bin
source ~/.bashrc

修改配置flume-ng配置文件

vi /usr/local/flume/conf/flume-conf.properties

#agent1表示代理名称
agent1.sources=source1
agent1.sinks=sink1
agent1.channels=channel1
#配置source1
agent1.sources.source1.type=spooldir
agent1.sources.source1.spoolDir=/usr/local/logs
agent1.sources.source1.channels=channel1
agent1.sources.source1.fileHeader = false
agent1.sources.source1.interceptors = i1
agent1.sources.source1.interceptors.i1.type = timestamp
#配置channel1
agent1.channels.channel1.type=file
agent1.channels.channel1.checkpointDir=/usr/local/logs_tmp_cp
agent1.channels.channel1.dataDirs=/usr/local/logs_tmp
#配置sink1
agent1.sinks.sink1.type=hdfs
agent1.sinks.sink1.hdfs.path=hdfs://sparkproject1:9000/logs
agent1.sinks.sink1.hdfs.fileType=DataStream
agent1.sinks.sink1.hdfs.writeFormat=TEXT
agent1.sinks.sink1.hdfs.rollInterval=1
agent1.sinks.sink1.channel=channel1
agent1.sinks.sink1.hdfs.filePrefix=%Y-%m-%d

创建需要的文件夹

本地文件夹:mkdir /usr/local/logs
HDFS文件夹:hdfs dfs -mkdir /logs

启动flume-agent

flume-ng agent -n agent1 -c conf -f /usr/local/flume/conf/flume-conf.properties -Dflume.root.logger=DEBUG,console

测试
新建一份文件,移动到/usr/local/logs目录下,flume就会自动上传到HDFS的/logs目录中

spark安装配置

tar -zxvf spark-1.5.1-bin-hadoop2.4.tgz。
mv spark-1.5.1-bin-hadoop2.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

修改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 HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

此时即可以用yarn提交任务了

mkdir spark_study
cd spark_study
vi spark_pi.sh

/usr/local/spark/bin/spark-submit \
--class org.apache.spark.example.JavaSparkPi \
--master yarn-client \
--num-executors 1 \
--driver-memory 1m \
--executor-memory 1 m \
--executor-cores 1 \
/usr/local/spark/lib/spark-examples-1.5.1-hadoop2.4.0.jar \


chmod 777 spark_pi.sh
./spark_pi.sh

你可能感兴趣的:(spark项目)