hadoop2.7.2+hbase1.2.5+storm1.1.0+spark2.1.1环境搭建

一、硬件环境准备(仅供学习之用)

1.笔记本电脑一台:16G内存、4核8线程,1T硬盘
2.虚拟环境:VMware Player 、CentOS7镜像 安装3个虚拟节点,并设置hostname分别为node1,node2,node3
注意:安装虚拟机节点时注意配置hostname,安装之后在进行配置会比较麻烦

二、虚拟机网络环境配置

1.host及网络ip配置

选择某个网卡绑定静态ip,例如修改eth0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
做以下修改:
BOOTPROTO="static"
IPADDR=192.168.0.110
GATEWAY=192.168.0.1
NETMASK=255.255.255.0
依次配置node1,node2,node3节点的静态ip分别为192.168.0.110,192.168.0.120,192.168.0.130

然后修改node1节点的hosts文件,将自己与其他两个节点的ip-host映射添加进来
vim /etc/hosts
添加以下三行
192.168.0.110 node1
192.168.0.120 node2
192.168.0.130 node3
保存退出,然后使用scp命令将修改好的hosts文件拷贝到其他两个节点上,覆盖etc目录下已有的hosts文件,
之后在node1上执行ping node2和ping node3,同样在其他两个节点上也尝试ping命令,如果发现ping不同,可能是防火墙没有关闭,即使可以ping通,为了方便,
最好也关闭防火墙,执行systemctl stop firewalld. service  命令关闭防火墙,执行 systemctl disable firewalld.service 关闭防火墙开机自启动。这样我们就可以通过hostname互相访问了,但是通过ssh访问时仍需要输入密码访问,接下来配置集群的ssh免密钥登陆

2.ssh免密钥登陆配置

进入node1的/root/.ssh目录下,如果没有.ssh这个目录,说明还没有使用过ssh命令,第一次使用ssh登陆其他主机时,会自动创建.ssh目录
,并在该目录下生成一个known_hosts文件存储访问过的主机信息,所以如果node1上没有.ssh这个目录,那么使用ssh执行一次远程登录
或者手动创建这个目录,然后进入.ssh目录,执行 ssh-keygen -t rsa 然后一路回车,结束之后会在.ssh目录下生成一对密钥,id_rsa为私钥,
id_rsa.pub为公钥,分别在node2,node3节点上执行同样的操作,然后将node2,node3节点上的公钥通过scp命令传到node1节点的.ssh目录
下并分别命名为id_rsa_node2.pub,id_rsa_node3.pub,这样在node1的.ssh目录下就有了所有节点的公钥,接下来创建一个名为authorized_keys
的文件来合并这些公钥,依次执行以下命令:
touch authorized_keys
cat id_rsa.pub >> authorized_keys
cat id_rsa_node2.pub >> authorized_keys
cat id_rsa_node3.pub >> authorized_keys
这样,我们得到一个所有节点的公钥集文件,最后将这个文件scp只其他所有节点的/root/.ssh目录下,就可以实现集群中各节点的免密钥登陆访问了

三、创建安装目录,上传所有需要的安装包

到目前为止,通过一、二两个步骤,一个基础的集群已经搭建完成了,接下来就可以开始软件的安装了,安装之前建议所有节点统一各软件的安装目录,
这样会为以后的使用配置带来很大的方便,比如,在node1节点的/opt目录下创建bigdata目录作为以后各种软件安装部署的根目录,然后将我们准备好的
所有的安装包上传到这个目录下,包括jdk-8u21-linux-x64.rpm、hadoop-2.7.2.tar.gz、hbase-1.2.5-bin.tar.gz、apache-storm-1.1.0.tar.gz、spark-2.1.1-bin
-hadoop2.7.tgz、zookeeper-3.4.6.tar.gz、kafka_2.10-0.8.2.1.tgz、apache-hive-2.1.1-bin.tar.gz、supervisor-3.3.1.tar.gz、meld3-1.0.2.tar.gz,这些所有的
安装包都可以在响应的官网上下载,上传完之后,使用scp命令将bigdata整个目录拷贝至其他节点的/opt目录下

四、安装 jdk 1.8,配置环境变量

1.安装jdk

在每个节点上,切换到/opt/bigdata目录下,执行命令: rpm -ivh jdk-8u21-linux-x64.rpm --prefix=/opt/bigdata 

2.配置环境变量

在node1上,vim /etc/profile
按下shift+G组合键将光标移动到文件末尾,添加以下环境变量
export JAVA_HOME=/opt/bigdata/jdk1.8.0_121
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
保存退出,执行source /etc/profile 使增加的环境变量生效,然后执行java -version,出现版本信息,最后同样,将修改后的profile拷贝至其他节点的/etc目录下覆盖
执行source /etc/profile和java -version查看安装信息,至此,jdk安装及配置完成。

五、安装 hadoop 2.7.2

在node1上,切换到/opt/bigdata目录下,执行:tar -xzvf hadoop-2.7.2.tar.gz 
下一步,进入到hadoop-2.7.2/etc/hadoop目录,hadoop相关的配置文件均存放在该目录下,我们一共需要修改4个配置文件:hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 以及 slaves文件

1.修改 hadoop-env.sh 文件

修改 JAVA_HOME为jdk的安装目录
export JAVA_HOME=/opt/bigdata/jdk1.8.0_121

2.修改 core-site.xml

<configuration>
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://node1:9000</value>
  </property>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>file:/opt/bigdata/hadoop-2.7.2/tmp</value>
  </property>
  <property>
     <name>io.file.buffer.size</name>
     <value>131702</value>
  </property>
</configuration>


3.修改 hdfs-site.xml

<configuration>
  <property>
     <name>dfs.namenode.name.dir</name>
     <value>file:/opt/bigdata/hadoop-2.7.2/dfs/name</value>
  </property>
  <property>
     <name>dfs.datanode.data.dir</name>
     <value>file:/opt/bigdata/hadoop-2.7.2/dfs/data</value>
  </property>
  <property>
     <name>dfs.replication</name>
     <value>2</value>
  </property>
  <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2:9000</value>
  </property>
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
  </property>
</configuration>


4.修改 mapred-site.xml

<configuration>
  <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node1:19888</value>
    </property>
</configuration>


5.修改 yarn-site.xml

<configuration>

<!-- Site specific YARN configuration properties -->
  <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>node1:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>node1:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>node1:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>node1:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>node1:8088</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>2048</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmen-pmem-ratio</name>
        <value>4</value>
    </property>	
    <property>
        <name>yarn.nodemanager.resource.cpu-vcores</name>
        <value>4</value>
    </property>  
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.class</name>
        <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    </property>
</configuration>




6.修改 slaves 文件

node1
node2
node3


至此,配置文件修改完成,接下来将另外两个节点上的hadoop安装包同样的命令解压,使用scp命令将node1上的hadoop-2.7.2/etc/hadoop整个配置

文件目录拷贝至其他两个节点的相同位置并覆盖


7.格式化 namenode

进入到 /opt/bigdata/hadoop-2.7.2/bin目录下,执行命令: ./hadoop namenode -format,格式化成功后可以看到 类似 format succeed的提示

8.启动 hadoop 集群

hadoop集群的启动直接而简单,在安装目录下的sbin目录中有很多可以使用的脚本,直接执行 ./start-all.sh 启动集群,启动成功后,在各节点上执行jps查看
进程信息,node1上可以看到namenode,datanode,resourcemanager,nodemanager四个进程,在node2上可以看到 secondarynamenode,datanode,
nodemanager三个进程,在node3上可以看到datanode、nodemanager两个进程,最后,通过浏览器访问node1:50070 查看hdfs的web UI界面,访问
node1:8088查看yarn的web UI界面

六、安装 zookeeper 3.4.6

1.安装配置zookeeper集群

zookeeper是一个分布式应用协调通知以及元数据管理组件,非常好用而且非常有用,由于hbase、spark、storm以及kafka等都使用到zookeeper做高可用
或者元数据管理,这里提前部署好zookeeper服务。
在node1节点上,同样在/opt/bigdata目录下( 以下安装都在node1上的/opt/bigdata目录下进行),执行 tar -xzvf  zookeeper-3.4.8.tar.gz ,解压之后进入解压
后根目录的conf目录,将zoo_sample.cfg 文件cp 一份命名为zoo.cfg,vim zoo.cfg 修改以下内容:

dataDir=/opt/bigdata/zookeeper-3.4.8/data
dataLogDir=/opt/bigdata/zookeeper-3.4.8/dataLog
clientPort=2181
server.1=node1:6666:8888        
server.2=node2:6666:8888
server.3=node3:6666:8888

保存退出,然后在/opt/bigdata/zookeeper-3.4.8目录下创建data目录以及dataLog目录,在data目录下创建一个名为myid的文件,接下来,将配置好的整个
zookeeper-3.4.8文件夹scp至其他两个节点上,最后依次修改node1上的myid文件内容为1,node2上myid文件的内容为2,node3上myid文件的内容为3,
在每个节点上执行/opt/bigdata/zookeeper-3.4.8/bin/zkServer start,全部启动后,执行/opt/bigdata/zookeeper-3.4.8/zkServer status 查看个节点的角色,
运行正常的集群有两个follower,一个leader

2.添加 zookeeper 开机自启动

zookeeper部署好之后,每次开机都需要自己动手依次开启三个节点,很是麻烦,所以将zookeeper服务添加到开机启动项中,具体步骤如下:
进入到/etc/init.d目录下,新建名为zookeeper的可执行文件,然后授权chmod 777 zookeeper,编辑文件内容:
#!/bin/bash
#chkconfig:2345 20 80
#description:zookeeper service
export JAVA_HOME=/opt/bigdata/jdk1.8.0_121
export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.8
case $1 in
        start) su root $ZOOKEEPER_HOME/bin/zkServer.sh start;;
               
        stop) su root $ZOOKEEPER_HOME/bin/zkServer.sh stop;;

        status) su root $ZOOKEEPER_HOME/bin/zkServer.sh status;;
               
        *) echo "usage: start|stop|status";;
esac
前三行是chkconfig的固定格式,第二行的‘2345’表示操作系统的运行级别,这里表示我们在2345这四个级别启动zookeeper
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

再后面的20表示开机启动的优先级,越小表示优先级越高,注意不能设置的太小,需要保证其他依赖的服务启动之后(如网络服务)才能成功启动zookeeper服务,
80表示关机时关闭服务的优先级,一般zookeeper都是作为其他服务的依赖服务,所以优先级可以设置的低些,最后关闭。脚本写好之后,将zookeeper服务添加
到开机自启动列表中:chkconfig --add zookeeper,然后通过 chkconfig --list  查看自启动列表,最后将zookeeper文件拷贝至其他节点的相同目录下,
执行service zookeeper status|stop|start测试。

七、安装 hbase 1.2.5

解压hbase部署包:tar -xzvf hbase-1.2.5-bin.tar.gz,然后进入conf目录下,修改相关的配置文件:hbase-env.sh 、hbase-site.xml、regionservers、backup-masters

1.修改hbase-env.sh

export JAVA_HOME=/opt/bigdata/jdk1.8.0_121
export HBASE_MANAGES_ZK=false

2.修改hbase-site.xml

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://node1:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node1,node2,node3</value>
  </property>
</configuration>

3.修改regionservers

node1
node2
node3

4.修改 backup-masters

node2

然后启动hbase,差点忘了,这里还需要将配置好的解压后的文件夹整个scp到node2和node3节点上去,也可以在node2,node3两个节点上解压部署包,
然后只scp conf目录,最后,进入安装目录下的bin目录下,执行: ./start-hbase.sh ,启动之后,通过浏览器访问 node1:16010 查看UI界面,还有一点需要注意的是,hbase
依赖时统服务,这里3个虚拟机都在同一台物理机上,时间是统一的,真正的物理集群部署时,需要时统,否则会启动失败。

八、安装 spark 2.1.1

spark的部署比较简单,解压之后只需要修改conf目录下的两个配置文件:slaves、spark-env.sh,这两个文件解压完是没有的,需要执行 cp slaves.template slaves
和 cp spark-env.sh.template spark-env.sh 得到,另外还有一个 spark-defaults.conf.template ,里面主要是一些spark application运行时的默认配置,后面写spark应用
开发时会讲到。

1.修改spark-env.sh

JAVA_HOME=/opt/bigdata/jdk1.8.0_121
SPARK_MASTER_WEBUI_PORT=8101
SPARK_WORKER_WEBUI_PORT=8102
#Spark HA
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER
 -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark"

2.修改slaves

node1
node2
node3

spark解压后的东西比较多,所以这里就不scp整个解压后的部署包了,解压另外两个节点上的部署压缩包,然后将配置文件scp过去覆盖,最后启动spark,启动脚本在
安装目录下的sbin目录下:./start-all.sh,如果要做高可用的话可以在另一个节点上执行 ./start-master.sh 再启动一个master,两个master通过zookeeper选主和保存数据,
启动完成后,通过浏览器访问 node1:8101查看UI界面

九、安装 kafka 0.8.2

为什么要安装kafka?kafka是一个有着 高吞吐量、高可靠性、高实时性 可扩展的分布式消息队列,应用场景非常广泛,storm中集成了kafka组件,可以讲kafka作为数据源
以及数据终点,使用非常方便,之后的文章里会 详细的介绍kafka的原理以及使用。
同样的,tar解压kafka的部署包,之后修改config目录下的 server.properties、consumer.properties、producer.properties 三个配置文件

1.修改server.properties

broker.id=0
port=9092
host.name=node1
log.dirs=/opt/bigdata/kafka_2.10-0.8.2.1/logs
zookeeper.connect=node1:2181,node2:2181,node3:2181

2.修改consumer.properties

zookeeper.connect=node1:2181,node2:2181,node3:2181
group.id=default-group

3.修改producer.properties

metadata.broker.list=node1:9092,node2:9092,node3:9092

其他配置项一般使用默认值就可以,修改完配置文件之后,在kafka的安装目录下创建logs文件夹,即之前配置过的logs.dirs的值,这个目录要提前创建好,然后将配置好的解压缩包scp到其他两个节点上,修改node2的server.properties文件:
broker.id=1
host.name=node2

修改node3的server.properties文件:
broker.id=2
host.name=node3

修改完成之后,准备启动kafka集群并测试,kafka的命令行工具同样都在部署包的bin目录下,进入到/opt/bigdata/kafka_2.10-0.8.2.1/bin目录下,执行
./kafka-server-start.sh ../config/server.properties & ,在每个节点上执行相同的命令启动kafka集群,接下来对kafka集群进行测试,首先,创建topic “test-topic”
./kafka-topics.sh --create --partitions 2 --replication-facctor 3 --zookeeper node1:2181 --topic test-topic
在node1上启动消费者:
./kafka-console-consumer.sh --zookeeper node1:2181 --topic test-topic 
在node2上启动生产者:
./kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092 --topic test-topic

生产者启动后,在命令行处输入要发送的消息,比如输入 hello ,按回车发送,在node1的消费者命令行将接收到 生产者发送的消息,至此表示kafka集群部署成功。
但是比较郁闷的是,kafka提供给我们的启动工具是一个终端进程,即作为终端的子进程创建的,一旦当前终端关闭后,kafka进程也就结束了,所以我们需要一个进程
管理器,来帮助管理kafka进程,这里我选择使用supervisor进程管理工具来管理kafka服务,接下来的storm也要用到这个管理工具。

十、安装 supervisor-3.3.1

安装supervisor需要使用 Python,CentOS7操作系统在安装时自动安装了Python 2.7.5,另外还需要一个 提前安装一个 python包meld3,并且要使用较高版本,否则在安装supervisor时会提示缺少meld包或版本过低的提示,这里首先安装 meld3-1.0.2,再安装supervisor,最后配置supervisor管理kafka进程。

1.安装 meld3 

解压meld3-1.0.2.tar.gz ,进入meld3-1.0.2目录,执行 python install setup.py 安装meld3,安装完成之后,下一步安装supervisor

2.安装 supervisor

解压 supervisor-3.3.1.tar.gz,进入 supervisor-3.3.1 目录,执行 python install setup.py 

3.配置supervisor及kafka进程

执行 echo_supervisord_conf > /etc/supervisord.conf 生成supervisor的配置文件,打开supervisord.conf文件,修改以下配置项:
[inet_http_server]
port=node1:9011
username=node1
password=111111
[include]
files=/etc/supervisord.d/*.conf

修改完之后,在/etc目录下创建supervisord.d目录用于存放需要管理的各个进程的配置文件,然后我们在supervisord.d目录下创建kafka.conf文件,内容如下:
[program:kafka]
command=/opt/bigdata/kafka_2.10-0.8.2.1/bin/kafka-server-start.sh /opt/bigdata/kafka_2.10-0.8.2.1/config/server.properties
priority=910
autostart=true
startretries=100
log_stdout=true
log_stderr=true
stdout_logfile=/var/log/supervisord-kafka-out.log
stderr_logfile=/var/log/supervisord-kafka-err.log

在其他节点上做同样的操作,最后我们再写一个简单的脚本,(touch supervisor-tool,chmod 777 supervisor-tool),用于一次性启动所有节点上的supervisord进程,
supervisord在启动时会扫描/etc/supervisord.d目录下的所有的配置文件并启动配置文件里描述的需要管理的进程,脚本内容如下:
#!/bin/bash
case $1 in
        start) supervisord -c /etc/supervisord.conf
              ssh node2 supervisord -c /etc/supervisord.conf
              ssh node3 supervisord -c /etc/supervisord.conf;;
        restart) supervisorctl reload
              ssh node2 supervisorctl reload
              ssh node3 supervisorctl reload;;
        stop) supervisorctl stop all
              ssh node2 supervisorctl stop all
              ssh node3 supervisorctl stop all;;
           *) echo "usage start|restart|stop";;
在终端执行 supervisor-tool start命令启动所有节点上的supervisord,最后通过浏览器访问node1:9011,输入我们配置的用户名和密码登陆就可以看到supervisord
正在管理的进程以及进程的状态了。

十一、安装 storm 1.1.0

1.安装部署storm

一样的套路,解压storm安装包,进入到conf目录下,修改 storm.yaml文件
storm.zookeeper.servers:
           - "node1"
           - "node2"
           - "node3"
#storm HA
nimbus.seeds: ["node1","node2"]
storm.health.check.dir: "healthchecks"
storm.health.check.timeout.ms: 5000
ui.port: 5555
ui.host: "node1"
然后记得把配置拷贝到其他节点上,之后就可以启动storm集群了,启动脚本在安装目录的bin目录下,storm的nimbus和supervisors本身就被设计为  fail-fast (process  self-destructs whenever any unexpected situation is encountered) and stateless (all state is kept in Zookeeper or on disk), 所以需要一个进程管理器来管理nimbus和supervisor进程,这里又用到了上面的supervisor进程管理工具了,注意此supervisor非彼supervisor,storm中也有supervisor的概念,是worker的监控进程。

2.使用 supervisord 管理storm的nimbus进程以及supervisor进程

在/etc/supervisord.d目录下创建storm.conf文件,内容如下:
[program:storm-nimbus]
command=/opt/bigdata/apache-storm-1.1.0/bin/storm nimbus
priority=920
autostart=true
startretries=100
log_stdout=true
log_stderr=true
stdout_logfile=/var/log/supervisord-storm_nimbus-out.log
stderr_logfile=/var/log/supervisord-storm_nimbus-err.log
[program:storm-supervisor]
command=/opt/bigdata/apache-storm-1.1.0/bin/storm supervisor
priority=922
autostart=true
startretries=100
log_stdout=true
log_stderr=true
stdout_logfile=/var/log/supervisord-storm_supervisor-out.log
stderr_logfile=/var/log/supervisord-storm_supervisor-err.log
[program:storm-ui]
command=/opt/bigdata/apache-storm-1.1.0/bin/storm ui
priority=930
autostart=true
startretries=100
log_stdout=true
log_stderr=true
stdout_logfile=/var/log/supervisord-storm_ui-out.log
stderr_logfile=/var/log/supervisord-storm_ui-err.log
在node1上启动了3中storm进程,nimbus、supervisor、ui,在node2上需要启动nimbus、supervisor两种进程,在node3上只需要启动supervisor进程,所以node2、node3上的
storm.conf中的program小节会依次减少某些进程的配置,最后在node1上使用之间创建的supervisor-tool脚本重启supervisord进程,supervisor-tool restart,再登陆node1:9011
发现storm进程已经运行起来了,登陆node2:9011以及node3:9011同样可以看到运行的storm进程。

到现在为止,一个大数据存储、离线数据分析以及实时流数据处理的平台已经搭建起来了,后续会陆续介绍如何使用这些工具以及一些基本的原理


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值