Zookeeper3.4+Hadoop2.7+Spark2.3.1+kafka+Redis+Tensorflow服务器配置说明

2018年9月29日

阅读本文档者需要具备一定的linux、大数据平台架构经验,关键一点你需要一个VPN账号和堡垒机账号(单位管理规定)。

因为产品上线,临时申请了三台云服务器(有点措手不及),从晚上8点开始,和同事(小韩)一块进行服务器配置和应用部署,到第二天凌晨3点多,完全部署完成,并进行了服务测试,一切ok!有点小兴奋,晚上吃了个饭,到凌晨5点才在会议室睡着了(是不是有点贱)。

下面记录一下整个流程,以便自己后续遇到类似情况少犯错误(服务器平台环境不同,还是会遇到新的问题),另外,也希望能够帮助有需要的小伙伴。

整体的内容包括(1)云服务器配置(因为每个人用到服务器及服务器安装的软件、系统配置是不一样的,仅供参考)、(2)集群搭建之前的设置、(3)安装zookeeper、(4)安装hadoop集群、(5)安装spark集群、(6)安装kafka、(7)安装redis、(8)配置深度学习环境。

云服务器配置

搭建过程中可能需要在线安装一些软件,服务器首先要配置上网代理,并进行磁盘挂载操作。

1. 上网代理设置

上网代理设置比较简单,打开终端并执行下述命令即可:

echo -e "export http_proxy=http://ip:port\nexport http_proxy" >> /etc/profile && source /etc/profile

echo -e "export https_proxy=http://ip:port\nexport https_proxy" >> /etc/profile && source /etc/profile

2. 服务器磁盘挂载

新分配的云服务器的数据盘需要手动挂载,过程稍微复杂一些,这里参考运维中心提供的操作说明。

  • 查看数据盘是否需要挂载

在终端输入df -h命令,如果看不到数据盘(在没有分区和格式化数据盘之前,是看不到数据盘),执行fdisk -l命令,如果发现存在/dev/vdb,则表示存在需要挂载的数据盘,否则,表示没有数据盘需要挂载,具体操作如下图所示,显示信息因服务器不同会有所差别,比如vdb是待挂载数据盘名称,也有可能是其他名称。

  • 对数据盘进行分区

运行 fdisk /dev/vdb,对数据盘进行分区操作。根据提示,依次输入 n,p,1,两次回车,wq,分区就开始了。

  • 查看新的分区

运行 fdisk -l 命令,查看新的分区。如果新分区 vdb1 已经创建好,会显示如下面示例中的/dev/vdb1。

  • 对新分区进行格式化

运行 mkfs.ext3 /dev/vdb1,对新分区进行格式化。格式化所需时间取决于数据盘大小。您也可自主决定选用其他文件格式,如 ext4 等。

  • 写入新分区信息

运行 echo /dev/xvdb1 /mnt ext3 defaults 0 0 >> /etc/fstab 写入新分区信息。完成后,可以使用 cat /etc/fstab 命令查看。

  • 挂载新分区

运行 mount /dev/vdb1 /mnt 挂载新分区,然后执行 df -h 查看分区。如果出现数据盘信息,说明挂载成功,可以使用新分区了。

集群搭建之前的准备工作

这一步主要是对服务器做必要的设置,方便后续集群搭建工作。主要包括服务器主机名修改,添加主机名和IP地址映射,设置主机之间的免口令登陆,安装JDK。

首先,确定三台主机的主机名分别为:risbigdata5、risbigdata6、risbigdata7;

其次,在risbigdata5的/mnt目录下,新建software文件夹,用来存在相关软件(本人习惯);

再次,将搭建集群所需要的软件拷贝到risbigdata5的/mnt/software下,接下来开始其它的工作。

1. 设置主机名

查看当前的主机名,在终端输入hostname;

设置新的主机名,在终端输入hostname risbigdata5,主机名被设置为risbigdata5。其它修改主机名的方法如下:

  • 也可以通过编辑network文件,来修改主机名,不过这种情况下需要重启服务器才能生效。具体操作如下:

       vi /etc/systconfig/network

       添加或修改的内容为:HOSTNAME=risbigdata5

  • 通过编辑hosts文件,给127.0.0.1添加主机名来实现。具体操作如下:

       vi /etc/hosts

       添加或修改的内容为:127.0.0.1 localhost localhost.localdomain localhost6 localhost6.localdomain6 risbigdata5

2. 添加主机名和IP地址映射

打开终端,编辑/etc/hosts,添加集群中所有主机的ip和主机名映射(每一台主机的设置相同),本文配置的三台主机的ip和主机名设置如下:

3. 设置主机之间的免口令登陆

  • 关闭selinux防火墙

通过vi /etc/selinux/config打开文件编辑,将SELINUX=enforcing修改为SELINUX=disabled, 重启机器可生效。最好执行一下防火墙停止命令(有不可以预知的原因),systemctl stop firewalld.service --停止firewall。

  • 设置免口令登陆

生成ssh密钥

查看当前账户下是否存在.ssh目录(通过cd ~/.ssh,如果没有,会提示不存在,可通过mkdir创建,也可以不创建,在执行ssh-keygen -t rsa时会自动生成),然后通过ssh-keygen -t rsa为每个主机生成ssh密钥,遇到提示,直接按entor健就可以了。

生成授权文件

进入.ssh目录,cd ~/.ssh,通过密钥文件生成授权文件:cat id_rsa.pub>>authorized_keys,此时可以通过使用ssh无密码登陆本机了。

生成所有主机的授权文件

将三台主机的密钥都加入到授权文件authorized_keys中,然后将授权文件分发到每台主机的.ssh目录下。可以使用远程拷贝命令scp,需要知道主机的密码。

在每台主机上,执行ssh 主机名命令,如果不需要输入密码,则表示ssh无密码登陆设置成功。

4. 安装并配置Java运行环境

将准备好的jdk文件解压到/usr/local目录下,在终端执行tar -zxvf /mnt/software/jdk1.8.0_91.tar.gz命令,然后配置jdk环境变量,通过编辑/etc/profile,在done这一行的下一行添加如下内容:

export JAVA_HOME=/usr/local/jdk1.8.0_91

ClASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/tools.jar

export JAVA_HOME=$PATH:$JAVA_HOME/bin

然后,将profile和jak1.8.0_91文件将拷贝到risbigdata6、risbigdata7对应目录下,通过在终端执行java -version来验证安装配置是否正确,如果能够显示java版本信息表示安装配置正常。

Zookeeper集群搭建

1. 在/mnt下新建program目录,用来放置安装文件(深受windows影响)。

2. 将zookeeper文件解压到/usr/local目录下,在终端执行如下命令:

            tar -zxvf /mnt/software/zookeeper-3.4.10.tar.gz -C /mnt/program

3. 配置zookeeper

  • 通过zoo_sample.cfg新建一个zoo.cfg文件,在终端执行cp zoo_sample.cfg zoo.cfg命令;
  • 修改zoo.cfg文件内容,具体修改如下:

       其中,tickTime表示Zookeeper服务器心跳时间,单位毫秒

                  dataDir表示数据持久化路径,存储内存数据库快照、日志等数据

                  clientPort=2181 连接端口

                  server.1=risbigdata5:2888:3888  集群中第一个节点

                  server.2=risbigdata6:2888:3888  集群中第二个节点

                  server.3=risbigdata7:2888:3888  集群中第三个节点

       server.1、server.2、server.3表示了不同的zookeeper服务器的自身标识,作为集群的一部分,每一台服务器应该知道其他服务器的信息。用户可以从“server.id=host:port:port” 中读取到相关信息。

  • 创建myid文件,设置zookeeper服务器唯一标志

在zkdata目录下,创建myid文件,设置一行内容,指定的是自身的id值。比如,服务器“1”应该在myid文件中写入“1”。这个id必须在集群环境中服务器标识中是唯一的,且大小在1~255之间。本次配置中,三台服务器的myid分别设置为1、2和3。

注意:一定要把防火墙关闭掉。(经常会忽落掉,泪!)

       systemctl stop firewalld.service
       systemctl disable firewalld.service
       systemctl status firewalld.service (查看关闭状态)

4. 配置环境变量

    在/etc/profile文件中添加如下内容:

     export ZOOKEEPER_HOME=/mnt/program/zookeeper3410

     export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf

5. 检查安装配置是否成功

  • 将/etc/profile和/mnt/program/zookeeper3410拷贝到其它两个主机对应目录下。
  • 打开终端,在zookeeper安装目录下,执行下列命令:

  启动zookeeper

./bin/zkServer.sh start

#正常启动将会显示如下信息

ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper3.4.10/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

通过JPS查看zookeeper线程

查看zookeeper状态

./bin/zkServer.sh status

#正常情况下会显示如下信息

ZooKeeper JMX enabled by default

Using config: /mnt/program/zookeeper3410/bin/../conf/zoo.cfg

Mode: follower(三台机器应该有一台是Leader)

停止zookeeper

./bin/zkServer.sh stop

#正常情况下会显示如下信息

ZooKeeper JMX enabled by default

Using config: /usr/local/zookeeper3.4.10/bin/../conf/zoo.cfg

Stopping zookeeper ... STOPPED

Hadoop集群搭建

虽然只有三台机器,还是搭建了一个hadoop ha集群,规划如下:risbigdata5、risbigdata6规划为namenode节点,risbigdata6、risbigdata7规划为datanode节点。Hadoop HA的原理图为(插入个别人的图):

1. Hadoop安装配置

将hadoop文件解压到/mnt/program目录下,修改名称为hadoop27。然后,依次修改etc/hadoop目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh、slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml文件。

第一步,在hadoop-env.sh、mapred-env.sh、yarn-env.sh文件中,加上本机jdk的路径,具体修改内容如下:

编辑hadoop-env.sh文件,在# The java implementation to use.这一行后面加上export JAVA_HOME=/usr/local/jdk1.8.091

编辑mapred-env.sh文件,找到# export JAVA_HOME=/home/y/libexec/jdk1.6.0/,将#去掉,并将=后面的内容修改为你自己的jdk路径,比如/usr/local/jdk1.8.091

编辑yarn-env.sh文件,找到# some Java parameters这一行,在改行后面添加内容:export JAVA_HOME=/usr/local/jdk1.8.091

第二步,编辑slaves文件,添加作为datanode节点的主机名,内容如下:

risbigdata5

risbigdata6

risbigdata7

第三步,配置core-site.xml

<configuration>

    <property>

<!--其它临时目录的根目录 -->

        <name>hadoop.tmp.dir</name>

        <value>file:/mnt/program/hadoop27/tmp</value>

        <description>Abase for other temporary directies.</description>

    </property>

    <property>

<!--默认文件系统名称 -->

        <name>fs.defaultFS</name>

        <value>hdfs://amend</value>

    </property>

    <property>

<!--配置checkpoint删除周期,单位为分钟 -->

          <name>fs.trash.interval</name>

          <value>10080</value>

    </property>

    <property>

<!--zookeeper集群配置 -->

        <name>ha.zookeeper.quorum</name>

        <value>risbigdata5:2181,risbigdata6:2181,risbigdata7:2181</value>

   </property>

</configuration>

第四步,配置hdfs-site.xml

<configuration>

 <property>

    <!--DFS name node存储路径-->

    <name>dfs.namenode.name.dir</name>

    <value>file:/mnt/program/hadoop27/dfs/name</value>

  </property>

  <property>

<!--DFS data node存储路径-->

    <name>dfs.datanode.data.dir</name>

    <value>file:/mnt/program/hadoop27/dfs/data</value>

  </property>

  <property>

<!--HDFS是否进行权限检查-->

    <name>dfs.permissions.enabled</name>

    <value>false</value>

  </property>

  <property>

<!--namenode服务器 -->

    <name>dfs.nameservices</name>

    <value>amend</value>

  </property>

  <property>

<!--namenode服务器 -->

    <name>dfs.ha.namenodes.amend</name>

    <value>ris5,ris6</value>

  </property>

  <property>

<!--namenode服务器 -->

    <name>dfs.namenode.rpc-address.amend.ris5</name>

    <value>risbigdata5:9000</value>

  </property>

<property>

    <name>dfs.namenode.rpc-address.amend.ris6</name>

    <value>risbigdata6:9000</value>

  </property>

  <property>

 

    <name>dfs.namenode.http-address.amend.ris5</name>

    <value>risbigdata5:50070</value>

  </property>

  <property>

    <name>dfs.namenode.http-address.amend.ris6</name>

    <value>risbigdata6:50070</value>

  </property>

  <property>

    <name>dfs.namenode.shared.edits.dir</name>    <value>qjournal://risbigdata5:8485;risbigdata6:8485;risbigdata7:8485/amend</value>

  </property>

  <property>

    <name>dfs.journalnode.edits.dir</name>

    <value>/mnt/program/hadoop27/journal</value>

  </property>

  <property>

    <name>dfs.ha.automatic-failover.enabled</name>

    <value>true</value>

  </property>

  <property>

    <name>dfs.client.failover.proxy.provider.amend</name>    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

  </property>

  <property>

    <name>dfs.ha.fencing.methods</name>

    <value>sshfence</value>

  </property>

<property>

     <name>ha.zookeeper.parent-znode</name>

     <value>/hadoop-amend</value>

  </property>

  <property>

     <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>

     <value>true</value>

  </property>

  <property>

     <name>dfs.client.block.write.replace-datanode-on-failure.policy</name>

     <value>NEVER</value>

  </property>

</configuration>

第五步,mapred-site.xml

<configuration>

    <property>

<!--The runtime framework for executing MapReduce jobs. Can be one of local, classic or yarn.-->

        <name>mapreduce.framework.name</name>

        <value>yarn</value>

    </property>

        <property>

<!--The amount of memory to request from the scheduler for each reduce task.-->

        <name>mapreduce.reduce.memory.mb</name>

        <value>1024</value>

    </property>

    <property>

<!--The amount of memory to request from the scheduler for each map task.-->

        <name>mapreduce.map.memory.mb</name>

        <value>1024</value>

    </property>

</configuration>

第六步,yarn-site.xml

<configuration>

<property>

<!--A comma separated list of services where service name should only contain a-zA-Z0-9_ and can not start with numbers-->

     <name>yarn.nodemanager.aux-services</name>

     <value>mapreduce_shuffle,spark_shuffle</value>

    </property>

<property>

<!--执行Hadoop MR作业-->

<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property>

   <property>

<!--执行spark作业,需要将${SPARK_HOME}/lib/spark-X.X.X-yarn-shuffle.jar拷贝到“${HADOOP_HOME}/share/hadoop/yarn/lib/目录下”-->

       <name>yarn.nodemanager.aux-services.spark_shuffle.class</name>

       <value>org.apache.spark.network.yarn.YarnShuffleService</value>

  </property>

  <property>

<!--Shuffle服务监听数据获取请求的端口-->

    <name>spark.shuffle.service.port</name>

    <value>7337</value>

  </property>

  <property>

<!--Enable RM high-availability. -->

    <name>yarn.resourcemanager.ha.enabled</name>

    <value>true</value>

  </property>

  <property>

    <!--Whether virtual memory limits will be enforced for containers.-->

    <name>yarn.nodemanager.vmem-check-enabled</name>

    <value>false</value>

  </property>

  <property>

<!--Name of the cluster. -->

    <name>yarn.resourcemanager.cluster-id</name>

    <value>amend_cluster</value>

  </property>

  <property>

<!--The list of RM nodes in the cluster when HA is enabled. See description of yarn.resourcemanager.ha .enabled for full details on how this is used.-->

    <name>yarn.resourcemanager.ha.rm-ids</name>

    <value>risbigdata5,risbigdata6</value>

  </property>

  <property>

<!--RM主机名>

    <name>yarn.resourcemanager.hostname.risbigdata5</name>

    <value>risbigdata5</value>

  </property>

  <property>

    <!--RM主机名>

    <name>yarn.resourcemanager.hostname.risbigdata6</name>

    <value>risbigdata6</value>

  </property>  

  <property>

<!--RM HTTP访问地址,查看集群信息-->

    <name>yarn.resourcemanager.webapp.address.risbigdata5</name>

    <value>risbigdata5:8088</value>

  </property>

  <property>

<!--RM HTTP访问地址,查看集群信息-->

    <name>yarn.resourcemanager.webapp.address.risbigdata6</name>

    <value>risbigdata6:8088</value>

  </property>

  <property>

<!--使用ZK集群保存状态信息-->

    <name>yarn.resourcemanager.zk-address</name>

    <value>risbigdata5:2181,risbigdata6:2181,risbigdata7:2181</value>

  </property>

  <property>

<!--Enable RM to recover state after starting. If true, then yarn.resourcemanager.store.class must be specified.-->

    <name>yarn.resourcemanager.recovery.enabled</name>

    <value>true</value>

  </property>

  <property>

<!--The class to use as the persistent store.-->

    <name>yarn.resourcemanager.store.class</name>    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

  </property>

  <property>

<!--Amount of physical memory, in MB, that can be allocated for containers. -->

    <name>yarn.nodemanager.resource.memory-mb</name>

    <value>2048</value>

  </property>

  <property>

<!--The minimum allocation for every container request at the RM in MBs-->

    <name>yarn.scheduler.minimum-allocation-mb</name>

    <value>256</value>

  </property>

  <property>

<!--The maximum allocation for every container request at the RM in MBs. -->

    <name>yarn.scheduler.maximum-allocation-mb</name>

    <value>2048</value>

  </property>

  <property>

<!--The address of the container manager in the NM-->

    <name>yarn.nodemanager.address</name>

    <value>0.0.0.0</value>

  </property>

</configuration>

第七步,设置环境变量,修改/etc/profile文件,添加如下信息:

export HADOOP_HOME=/mnt/program/hadoop27

export HADOOP_INSTALL=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export YARN_HOME=$HADOOP_HOME

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

最后一步,将risbigdata5上配置好的hadoop拷贝到risbigdata6、risbigdata7对应目录下将/etc/profile同步到risbigdata6、risbigdata7主机上,并在每台主机上分别执行source /etc/profile操作。

至此,整个hadoop安装和配置基本完成,另外,为了执行spark作业,别忘了把将“${SPARK_HOME}/lib/spark-X.X.X-yarn-shuffle.jar”拷贝到“${HADOOP_HOME}/share/hadoop/yarn/lib/目录下”。

上述配置方式,仅仅只是一种可以用方式,如果想更好的使用hadoop集群,还需要深入学习一下各个变量如何更好的设置,才能使得集群达到最优,并能更好满足业务的需要。

2. Hadoop启动并验证

安装并配置好每个节点hadoop之后,接下来就是调试(因为可能会遇到各种问题,所以我称之为调试,而不是启动。)

首先,确定每个节点正常启动应该执行的进程,上述部署方法每个节点启动的进程如下:

risbigdata5

risbigdata6

risbigdata7

NameNode

ResourceManager

JournalNode

DFSZKFailoverController

DataNode

NodeManager

NameNode

ResourceManager

DataNode

NodeManager

JournalNode

DFSZKFailoverController

DataNode

NodeManager

JournalNode

 

启动方式,网上有很多人写,但是真正好用的不是很好找(因为每个搭建集群时的hadoop版本、操作系统配置等等不尽相同),最终,还是需要自己去尝试,去解决遇到的各种问题。下面是一个较为通用的一个流程(感谢小郭提供的资料),主要包括启动和验证的操作方法。

启动HDFS

  • -formatZK操作

因为是搭建的hadoop-ha集群,所以首先要做的就是在ZK上创建一个父目录,以便后续fc把nn的状态写到该目录下。可以在集群的任意一个nn节点上执行下面的操作,并且该操作只需要执行一次就可以。

hdfs zkfc -formatZK

需要注意的是:默认情况下会在zookeeper集群上创建一个名为hadoop-ha的节点,为了便于多个集群共用一个zookeeper集群,最好给每个hadoop-ha集群起一个不同的名字。

验证方法:查看是否有异常日志,查看是否zookeeper上是否创建了hadoop-[*]目录,[*]为你所设定的名称,对应于hdfs-site.xml中dfs.nameservices。

  • 启动JournalNode

在hadoop2配置高可用集群时,会同时启动2个nn节点,其中一个处于工作状态(active),一个处于非工作状态(standby)。JournalNode可以实现nn之间的数据同步。在每个主机上执行下面的命令,即可启动JournalNode进程。

hadoop-daemon.sh start journalnode

  • 格式化NameNode

在hadoop2的集群配置中,因为是双nn节点,需要在每个nn节点上进行格式化操作,并启动NameNode进程。

首先,在确定为Active的主机上,执行hdfs namenode -format命令,进行格式化操作,然后,通过hadoop-daemon.sh start namenode命令来启动该nn节点;

其次,在确定为Standby的主机上,执行hdfs namenode -bootstrapStandby操作,然后,通过hadoop-daemon.sh start namenode命令启动该nn节点。

  • 启动ZKFC

在两个NameNode的节点执行下面的命令来启动ZKFC进程

hadoop-daemon.sh start zkfc

  • 启动DataNode

在所有需要启动DataNode的节点上,执行下面的命令来启动DataNode服务进程。

hadoop-daemon.sh start datanode

验证HDFS

  • 通过jps命令,查看各个进程是否启动;
  • 在HDFS中创建目录

       hdfs dfs -mkdir /user/demo/input/wordcount (hdfs上的目录)

       hdfs dfs -mkdir /user/demo/output

  • 导入数据到HDFS

       hdfs dfs -put /home/hadmin/Hadoop/README.txt(本地文件) /user/demo/input/wordcount(hdfs上的目录)

  • 查看HDFS目录

       hdfs dfs -ls /user/demo/input/wordcount (hdfs上的目录)

  • 查看HDFS中的文件

        hdfs dfs -cat /user/demo/input/wordcount/README.txt

  • 访问HDFS NameNode的监控界面,主机不一定安装图形界面,如果服务器支持或者远程可连接主机,可以打开浏览器,在浏览器中输入:

       http://namenode1:50070

       http://namenode2:50070

如果上述操作都可以执行成功,说明HDFS启动成功,可以进行下一步了。

启动YARN

  • 启动ResourceManager

       在risbigdata5节点上启动ResourceManager,执行下面的命令:

             yarn-daemon.sh start resourcemanager

        在risbigdata6节点上启动ResourceManager,执行下面的命令:

             yarn-daemon.sh start resourcemanager

  • 启动NodeManager

       在risbigdata5、risbigdata6、risbigdata7节点上启动NodeManager,分别执行下面的命令:

            yarn-daemon.sh start nodemanager

验证YARN

  • 通过jps命令查看上述步骤启动进程是否启动;
  • 查看ResourceManager服务状态

       yarn rmadmin -getServiceState risbigdata5 显示为active

        yarn rmadmin -getServiceState risbigdata6 显示为standby

  • 执行MapReduce的WordCount程序

        hadoop jar /home/hadmin/demo/hadoop/WordCount-1.0.jar com.tod.demo.WordCount

        hdfs:///user/demo/input/wordcount/README.txt hdfs:///user/demo/output/wordcount

  • 查看MapReduce的WordCount程序的执行结果

        hadoop fs -cat hdfs:///user/demo/output/wordcount/part-r-00000

  • 访问YARN ResourceManager的监控界面,主机不一定安装图形界面,如果服务器支持或者远程可连接主机,可以打开浏览器,在浏览器中输入:

        http://risbigdata5:8088

        http://risbigdata6:8088

如果上述操作都可以执行成功,说明YARN启动成功。

至此,整个hadoop集群搭建成功!!!

Spark集群搭建

下面开始安装和配置Spark,相对于Hadoop-ha要简单不少,涉及到的配置也不多,由于spark依赖scala库,需要安装并配置scala,本次安装的是scala2.1.10版本,并在/etc/profile中添加环境变量:

export SCALA_HOME=/usr/local/scala2110

Export PATH=$PATH:$SCALA_HOME/bin

    1. Spark安装和配置

首先,还是要将spark安装文件解压到/mnt/program目录下,便于管理,都放在一个目录下。将解压后的文件夹,修改名称,比如修改后为spark23127(为了便于记住使用的spark版本及其所对应的hadoop版本)。

其次,需要修改spark的conf目录下的slaves和spark-env.sh文件,如果不存在就创建。

  1. 编辑slaves文件

将作为worker节点的主机名称,添加到该文件中,本次配置中,将 risbigdata5、risbigdata6、risbigdata7都作为worker节点

  1. 编辑spark-env.sh文件,添加如下配置:

export SPARK_PID_DIR=/mnt/program/spark23127/spark_pids

export SCALA_HOME=/usr/local/scala2110

export JAVA_HOME=/usr/local/jdk1.8.091

export HADOOP_HOME=/mnt/program/hadoop27

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_MASTER_HOST=risbigdata5

export SPARK_WORKER_MEMORY=20G

export SPARK_WORKER_CORES=16

export SPARK_WORKER_INSTANCES=1

export SPARK_EXECUTOR_CORES=16

export SPARK_EXECUTOR_MEMORY=1G

export SPARK_WORKER_DIR=/mnt/program/spark23127/work

export SPARK_LOG_DIR=/mnt/applog/sparklog

  1. 添加环境变量,编辑/etc/profile,并添加如下信息:

export SPARK_HOME=/mnt/program/spark23127

export PATH=$PATH:$SPARK_HOME/bin

另外,因为要使用sparkStreaming+kafka的模式,还需要将spark-streaming-kafka-0-10_2.11_2.3.1.jarkafka-clients-0.10.0.1.jar拷贝到spark安装目录下的jars文件夹下。

最后,将scala、spark安装目录拷贝到risbigdata6,risbigdata7对应目录下,同步/etc/profile文件,并执行source /etc/profile操作。

    1. Spark启动和验证
  1. 启动spark

在spark的master节点risbigdata5上,到spark安装目录下,执行下面命令,就可以启动整个spark集群了。

./bin/start-all.sh

  1. 集群验证
  1. 通过jps查看进程情况;
  2. 运行spark自带的example,执行命令如下:

spark-submit --class org.apache.spark.examples.JavaSparkPi --master spark://risbigdata5:7077 ../examples/jars/spark-examples_2.11-2.3.1.jar 1

  1. Kafka集群搭建
  1. Kafka安装配置

将kafka安装文件解压到/mnt/program目录下,重名为kafka211100,然后编辑conf目录下的server.properties文件,主要设置如下信息:

broker.id=0

port=9092

log.dir=/usr/local/kafka2111/log

listeners=PLAINTEXT://risbigdata5:9092

advertised.listeners=PLAINTEXT://risbigdata5:9092

zookeeper.connect=risbigdata5:2181,risbigdata6:2181,risbigdata7:2181

将kafka211100拷贝到risbigdata6、risbigdata7两台主机的相应目录下,修改broker.id分别为1,2;修改listeners、advertised.listeners为本主机的主机名。

  1. 启动和验证
  1. 启动kafka,在每个主机节点执行

在kafka安装目录下,执行./bin/kafka-server-start.sh conf/server.properties

  1.  创建一个topic,包含有1个Partition分区和1个备份的broker

./bin/kafka-topic.sh  --create --zookeeper xhp1:2181 --replica 1 --partition 1 --topic test

  1. 启动Producer发送消息

定义一个发送给多个broker的Producer

./bin/kafka-console-producer.sh --broker-list risbigdata5:9092, risbigdata6:9093,xhp1:9094 --topic test

  1. 启动一个消费者来消费消息

./bin/kafka-console-consumer.sh --zookeeper risbigdata5:2181 --topic test--from-beginning

如果上述操作都能正常执行,表明kafka集群安装完成。

  1. Redis安装
  1. 下载安装包

在Centos下 执行下述命令,直接从网站下载安装包:

wget http://download.redis.io/releases/redis-4.0.2.tar.gz

解压安装包并安装

tar -zxvf redis-4.0.2.tar.gz

cd redis-4.0.2

make

make install

make test

Redis没有其他外部依赖,安装过程很简单。编译后在Redis源代码目录的src文件夹中可以找到若干个可执行程序,安装完       后,在/usr/local/bin目录中可以找到刚刚安装的redis可执行文件。如下图:

 

  1. 启动和停止Redis

1)直接运行redis安装目录下的redis-server即可启动Redis

[root@localhost bin]# redis-server

 

  1. 深度学习环境配置

深度学习环境配置主要针对深度学习任务来进行配置的,如果不需要运行深度学习任务,该部分可以不用进行配置。

深度学习环境主要涉及到anaconda安装,及python库安装(包括pyspark、kafka、jieba、tensorflow、keras)。

    1. anconda安装

第一步,下载Anconda(耗时较久,如果有下载好Anconda安装包,可以直接拷贝使用),在终端执行下面的命令:

wget https://repo.continuum.io/archive/Anaconda2-5.1.0-Linux-x86_64.sh

第二步,安装Anaconda程序,安装命令如下:

bash Anaconda2-5.1.0-Linux-x86_64.sh

注:安装时全部选择yes和enter,直至直至“VSCode安装”前

第三步,把anaconda的bin所在目录加入系统环境变量,即编辑/etc/profile,在最后加入下面语句:

export PATH=~/anaconda2/bin:$PATH

注:安装过程中,可以设置anaconda的安装目录,默认情况下安装在~/目录下,安装完成后会自动在~/.bashrc中为当前用户添加环境变量,为了登陆本机的所有用户都可以使用,可以设置/etc/profile。

第四步,查看python的默认路径是否存在

[root@risbigdata5 ~]# which python

/root/anaconda2/bin/python

第五步,查看python的版本

[root@risbigdata5 ~]# python

Python 2.7.15 |Anaconda, Inc.| (default, May  1 2018, 23:32:55)

[GCC 7.2.0] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

正确显示第四步、第五步的信息,说明anaconda安装正确。

    1. 安装python库
  1. 查看Anaconda安装包默认安装的工具包及其版本,使用下面命令:

conda list

确认scikit-learn, numpy, scipy和pandas等均已安装;

  1. 若需要更新工具包版本,使用下面命令:

conda update PACKAGE_NAME

PACKAGE_NAME是指要更新的包名;

  1. 若需要安装其他工具包

conda install PACKAGE_NAME

可以依次将PACKAGE_NAME替换为pyspark、kafka、jieba、tensorflow、keras,实现这些python包的安装;

  1. 若需要删除某工具包

conda uninstall PACKAGE_NAME

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值