分享

about云日志分析项目准备6:Hadoop、Spark集群搭建

Oner 发表于 2016-12-22 15:24:03 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 8 11807
问题导读:
1. 如何配置linux环境?
2. 如何安装java和scala?
3. 如何安装和配置hadoop集群?
4. 如何验证hadoop集群搭建成功?
5. 如何安装和配置spark集群?
6. 如何验证spark集群搭建成功?
7. 可能会遇到哪些问题?


接上篇:about云日志分析项目准备5:hadoop,spark,kafka,flume,hive等工具的版本选择

这节开始讲解集群搭建:
这儿选用的linux环境是CentOS-7.0-1406-x86_64-GnomeLive.iso GNOME桌面版。安装虚拟机的过程就不说了,这儿使用的网络模式是NAT模式。目前已aboutyun用户登录master机器。本次我们要搭建的是一个三节点的Hadoop、Spark集群。


一、Linux环境准备

1. 设置静态ip

NAT模式下设置静态ip可以参考这篇文章:集群搭建必备:nat模式设置静态ip,达到上网与主机相互通信
在将宿主机器的VMnet8适配器和VMware的虚拟网络编辑器中的NAT设置一直后(这儿采用的网段是192.168.1.x),这儿简单地以Cent OS 7.0来说下在虚拟机里该做什么操作。由于采用的是桌面版,在查看/etc/sysconfig/network-scripts目录下时,发现并没有一个配置文件去配置网络,在这儿可以先通过图形界面来操作。


1)右上角找到网络设置选项:

20161222102325.jpg


2)点击设置按钮
20161221145246.jpg


3)选择IPv4选型,在地址栏选项选择手动,之后将地址、子网掩码、网关设置成下图中的值。
20161221145435.jpg



4)进行完上面的操作之后,进入/etc/sysconfig/network-scripts目录,输入ls -rt命令,发现新生成了一个ifcfg-Wired_connection_1文件,其实这个文件就是保存刚才对网卡的操作。以后也可以通过修改这个文件来达到网卡修改的目的(需要重启,但是不推荐这样操作)。
20161222102524.jpg

2. 关闭SELINUX

修改 /etc/sysconfig/selinux文件
  1. vim  /etc/sysconfig/selinux
复制代码

20161221213537.jpg

3. 关闭防火墙
  1. sudo systemctl stop firewalld.service  #停止firewall
  2. sudo systemctl disable firewalld.service  #禁止firewall开机启动
复制代码

4. 开启ssh


  1. sudo systemctl start sshd.service  #开启ssh
  2. sudo systemctl enablesshd.service  #开机启动ssh
复制代码

5.  修改hosts

  1. sudo vim  /etc/hosts
复制代码

以下内容加入到hosts文件中:
20161222131058.jpg

6. 修改主机名
  1. sudo vim /etc/hostname
复制代码
将文件内容改为master
20161222131259.jpg

7.  配置ntp服务

  1. sudo vim /etc/ntp.conf
复制代码
设置服务器为以下几个(默认为以下服务器的不用修改):
  1. server 0.centos.pool.ntp.org iburst
  2. server 1.centos.pool.ntp.org iburst
  3. server 2.centos.pool.ntp.org iburst
  4. server 3.centos.pool.ntp.org iburst
复制代码
20161222131509.jpg


保存后执行:
  1. sudo systemctl start ntpd.service  #开启ntp服务
  2. sudo systemctl enable ntpd.service # 开机运行ntp服务
复制代码

8. 克隆节点


20161221154652.jpg


按照上图的步骤,克隆了两台新的机器,克隆后需要对新的机器的主机名名、ip地址以及mac地址进行修改。主机名和ip地址需要按照前面第4步中说明的对应关系来修改,mac地址的修改可以参考这篇帖子:VM虚拟机克隆后需要更改的配置(我使用的是VMware12,mac地址会自动更改)

到目前为止,我们已经拥有了3台机器:
192.168.1.10    master
192.168.1.20    slave1
192.168.1.30    slave2


9. ssh免密码登录

需要实现在master ssh无密码登录本机、slave1和slave2。在master机器上,执行ssh-keygen -t rsa,然后一直回车,这样就生成了aboutyun用户在master上的公钥和秘钥。
20161222132857.jpg

执行ssh-copy-id -i ~/.ssh/id_rsa.pub aboutyun@master
20161222133314.jpg


这样就实现了master使用ssh无密码登录本机。在依次执行以下命令:
  1. ssh-copy-id -i ~/.ssh/id_rsa.pub aboutyun@slave1
  2. ssh-copy-id -i ~/.ssh/id_rsa.pub aboutyun@slave2
复制代码
这样就实现了在master上ssh无密码登录slave1和slave2.

二、安装Java


1. 创建安装目录
  1. sudo mkdir /data
  2. sudo chmod -R 777 /data
复制代码

2. 解压安装包
  1. tar -zxvf ~/jar/jdk-8u111-linux-x64.tar.gz -C /data
复制代码

3. 设置环境变量

将以下内容加入到~/.bashrc文件中,
  1. export JAVA_HOME=/data/jdk1.8.0_111
  2. export PATH=$JAVA_HOME/bin:$PATH
  3. export CLASS_PATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
复制代码
20161222140321.jpg
然后执行下面的命令:
source ~/.bashrc

4. 验证安装是否成功

使用which java命令来确认
20161222140427.jpg
上图说明调用java命令来自于我们安装的目录,说明安装成功。


三、安装scala

1. 解压安装包
  1. tar -zxvf ~/jar/scala-2.11.8.tgz -C /data
复制代码

2.  设置环境变量


将以下内容加入到~/.bashrc文件中,
  1. export SCALA_HOME=/data/scala-2.11.8
  2. export PATH=$SCALA_HOME/bin:$PATH
复制代码
然后执行下面的命令:source ~/.bashrc

3. 验证安装是否成功

使用which scala命令来确认
20161222141619.jpg
由此可以看出scala安装成功

四、安装hadoop

1. 解压安装包
  1. tar -zxvf ~/jar/hadoop-2.6.5.tar.gz -C /data
复制代码

2. 配置hadoop


涉及到的配置文件为以下几个:
  1. ${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
  2. ${HADOOP_HOME}/etc/hadoop/yarn-env.sh
  3. ${HADOOP_HOME}/etc/hadoop/slaves
  4. ${HADOOP_HOME}/etc/hadoop/core-site.xml
  5. ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
  6. ${HADOOP_HOME}/etc/hadoop/mapred-site.xml
  7. ${HADOOP_HOME}/etc/hadoop/yarn-site.xml
复制代码

如果有的文件不存在,可以复制相应的template文件获得,例如,mapred-site.xml文件不存在,则可以从mapred-site.xml.template复制一份过来。


配置文件1:hadoop-env.sh

指定JAVA_HOME
export JAVA_HOME=/data/jdk1.8.0_111

20161222143308.jpg

配置文件2:yarn-env.sh

指定JAVA_HOME
export JAVA_HOME=/data/jdk1.8.0_111

20161222143435.jpg

配置文件3:slaves

将所有的从节点加入
20161221173307.jpg

配置文件4:core-site.xml
  1. <configuration>
  2.         <property>
  3.                 <name>fs.defaultFS</name>
  4.                 <value>hdfs://master:8020</value>
  5.         </property>

  6.         <property>
  7.                 <name>hadoop.tmp.dir</name>
  8.                 <value>file:///home/aboutyun/hadoop/tmp</value>
  9.                 <description>Abase for other temporary directories.</description>
  10.         </property>

  11.         <property>
  12.                 <name>hadoop.proxyuser.aboutyun.hosts</name>
  13.                 <value>*</value>
  14.                 <description>abouyun用户可以代理任意机器上的用户</description>
  15.         </property>

  16.         <property>
  17.                 <name>hadoop.proxyuser.aboutyun.groups</name>
  18.                 <value>*</value>
  19.                 <description>abouyun用户代理任何组下的用户</description>
  20.         </property>

  21.         <property>
  22.                 <name>io.file.buffer.size</name>
  23.                 <value>131072</value>
  24.         </property>
  25. </configuration>
复制代码

注意: 需要在本地创建/home/aboutyun/hadoop/tmp目录


配置文件5:hdfs-site.xml

  1. <configuration>
  2.         <property>
  3.                 <name>dfs.namenode.secondary.http-address</name>
  4.                 <value>master:9001</value>
  5.         </property>

  6.         <property>
  7.                 <name>dfs.namenode.name.dir</name>
  8.                 <value>file:///home/aboutyun/hadoop/namenode</value>
  9.         </property>

  10.         <property>
  11.                 <name>dfs.datanode.data.dir</name>
  12.                 <value>file:///home/aboutyun/hadoop/datanode</value>
  13.         </property>

  14.         <property>
  15.                 <name>dfs.replication</name>
  16.                 <value>3</value>
  17.         </property>

  18.         <property>
  19.                 <name>dfs.webhdfs.enabled</name>
  20.                 <value>true</value>
  21.         </property>
  22. </configuration>
复制代码

注意: 需要在本地创建/home/aboutyun/hadoop/namenode和/home/aboutyun/hadoop/datanode目录


配置文件6:mapred-site.xml

  1. <configuration>
  2.         <property>
  3.                 <name>mapreduce.framework.name</name>
  4.                 <value>yarn</value>
  5.         </property>

  6.         <property>
  7.                 <name>mapreduce.jobhistory.address</name>
  8.                 <value>master:10020</value>
  9.         </property>

  10.         <property>
  11.                 <name>mapreduce.jobhistory.webapp.address</name>
  12.                 <value>master:19888</value>
  13.         </property>
  14. </configuration>
复制代码

配置文件7:yarn-site.xml

  1. <configuration>
  2.         <property>
  3.                 <name>yarn.nodemanager.aux-services</name>
  4.                 <value>mapreduce_shuffle</value>
  5.         </property>
  6.         
  7.         <property>                                                               
  8.                 <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  9.                 <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  10.         </property>
  11.         
  12.         <property>
  13.                 <name>yarn.resourcemanager.address</name>
  14.                 <value>master:8032</value>
  15.         </property>
  16.         
  17.         <property>
  18.                 <name>yarn.resourcemanager.scheduler.address</name>
  19.                 <value>master:8030</value>
  20.         </property>
  21.         
  22.         <property>
  23.                 <name>yarn.resourcemanager.resource-tracker.address</name>
  24.                 <value>master:8031</value>
  25.         </property>
  26.         
  27.         <property>
  28.                 <name>yarn.resourcemanager.admin.address</name>
  29.                 <value>master:8033</value>
  30.         </property>
  31.         
  32.         <property>
  33.                 <name>yarn.resourcemanager.webapp.address</name>
  34.                 <value>master:8088</value>
  35.         </property>
  36. </configuration>
复制代码

3. 设置环境变量

将以下内容加入到~/.bashrc文件中
  1. export HADOOP_HOME=/data/hadoop-2.6.5
  2. export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
复制代码

然后执行以下命令:
  1. source ~/.bashrc[/font][font=Tahoma]
复制代码




4. 复制到其他节点

1)复制安装目录

在master机器上:
  1. scp -r /data/hadoop-2.6.5/ /data/scala-2.11.8/ /data/jdk1.8.0_111/ aboutyun@slave1:~/
复制代码

在slave1和slave2机器上:

  1. sudo mkdir /data
  2. sudo chmod 777 /data
  3. mv hadoop-2.6.5/ scala-2.11.8/ jdk1.8.0_111/ /data
复制代码

2) 复制hadoop日志目录

在master机器上:
  1. scp -r ~/hadoop aboutyun@slave1:~/
  2. scp -r ~/hadoop aboutyun@slave2:~/
复制代码

3)复制环境变量

在master机器上:
  1. scp -r ~/.bashrc  aboutyun@slave1:~/
  2. scp -r ~/.bashrc  aboutyun@slave2:~/
复制代码



在slave1和slave2机器上:

5. 登录验证
  1. source ~/.bashrc
复制代码

在master机器上进行如下操作:

1)格式化hdfs
  1. hdfs namenode –format
复制代码

2)启动hdfs
  1. start-dfs.sh
复制代码
在master上使用jps命令

20161222151534.jpg

在slave1和slave2上使用jps命令:
20161222151648.jpg

上面两张图片说明了在master节点上成功启动了NameNode和SecondaryNameNode,在slave节点上成功启动了DataNode,也就说明HDFS启动成功。

3)启动yarn
  1. start-yarn.sh
复制代码
在master使用jps命令
20161222151922.jpg

在slave1和slave2上使用jps命令
20161222152005.jpg

上面两张图片说明成功启动了ResourceManager和NodeManager,也就是说yarn启动成功。

4)访问WebUI

在master、slave1和slave2任意一台机器上打开firefox,然后输入http://master:8088/,如果看到如下的图片,就说明我们的hadoop集群搭建成功了。
20161222152220.jpg


五、安装Spark集群

1. 解压安装包
  1. tar -zxvf ~/jar/spark-1.6.3-bin-hadoop2.6.tgz -C /data
复制代码

2. 配置spark

涉及到的配置文件有以下几个:
  1. ${SPARK_HOME}/conf/spark-env.sh
  2. ${SPARK_HOME}/conf/slaves
  3. ${SPARK_HOME}/conf/spark-defaults.conf
复制代码

这三个文件都是由原始的template文件复制过来的,比如cp spark-env.sh.template spark-env.sh

配置文件1:spark-env.sh

  1. JAVA_HOME=/data/jdk1.8.0_111
  2. SCALA_HOME=/data/scala-2.11.8
  3. SPARK_MASTER_IP=192.168.1.10
  4. HADOOP_CONF_DIR=/data/hadoop-2.6.5/etc/hadoop
  5. # shuffled以及RDD的数据存放目录
  6. SPARK_LOCAL_DIRS=/data/spark_data
  7. # worker端进程的工作目录
  8. SPARK_WORKER_DIR=/data/spark_data/spark_works
复制代码

注意:需要在本地创建/data/spark_data/spark_works目录


配置文件2:slaves

  1. master
  2. slave1
  3. slave2
复制代码


配置文件3:spark-defaults.conf

  1. spark.master        spark://master:7077
  2. spark.serializer        org.apache.spark.serializer.KryoSerializer
  3. spark.eventLog.enabled        true
  4. spark.eventLog.dir        file:///data/spark_data/history/event-log
  5. spark.history.fs.logDirectory        file:///data/spark_data/history/spark-events
  6. spark.eventLog.compress        true
复制代码


注意:需要在本地创建/data/spark_data/history/event-log、/data/spark_data/history/spark-events

3. 复制到其他节点


在master上:
  1. scp -r /data/spark* aboutyun@slave1:~/
  2. scp -r /data/spark* aboutyun@slave2:~/
复制代码
在slave1和slave2上:
  1. mv ~/spark* /data
复制代码

4. 设置环境变量

将以下内容加入到~/.bashrc文件中,
  1. export SPARK_HOME=/data/spark-1.6.3-bin-hadoop2.6
  2. export PATH=$SPARK_HOME/bin:$SPARK_HOME/sbin:$PATH
复制代码

然后执行以下命令:
  1. source ~/.bashrc
复制代码


5. 启动验证

在master机器上进行如下操作

1)启动master
  1. start-master.sh
复制代码

在master机器上执行jps命令
20161222165828.jpg

上图说明在master节点上成功启动Master进程

2)启动slave

在master和slave机器上执行jps命令
20161222170533.jpg

20161222170608.jpg

20161222170818.jpg
上面的图片说明在每台机器上都成功启动了Worker进程。


3)访问WebUI

在master、slave1和slave2这三台中任意一台机器上的浏览器中输入:http://master:8080/,看到如下图片,就说明我们的spark集群安装成功了。
20161222170941.jpg

趟过的坑

1. 配置core-site.xml和hdfs-site.xml文件时所指定的本地目录一定要自己创建,否则在执行玩格式化hdfs后,启动hdfs会丢失进程。




已有(8)人评论

跳转到指定楼层
pig2 发表于 2017-3-31 18:09:06
本帖最后由 pig2 于 2017-6-26 15:57 编辑

启动集群小记录:
以前执行start-master.sh和 都是没有问题的。

后来执行[mw_shl_code=bash,true]start-slaves.sh [/mw_shl_code]
出现下面问题
[codeUsage: ./sbin/start-slave.sh [options] <master>

Master must be a URL of the form spark://hostname:port

Options:
  -c CORES, --cores CORES  Number of cores to use
  -m MEM, --memory MEM     Amount of memory to use (e.g. 1000M, 2G)
  -d DIR, --work-dir DIR   Directory to run apps in (default: SPARK_HOME/work)
  -i HOST, --ip IP         Hostname to listen on (deprecated, please use --host or -h)
  -h HOST, --host HOST     Hostname to listen on
  -p PORT, --port PORT     Port to listen on (default: random)
  --webui-port PORT        Port for web UI (default: 8081)
  --properties-file FILE   Path to a custom Spark properties file.
                           Default is conf/spark-defaults.conf.[/code]
以为是环境变量出现问题。
解决办法:
1.原来是因为有的机器worker进程没有关闭掉导致的。2.可以使用start-slave.sh spark://Master:7077




回复

使用道具 举报

pig2 发表于 2017-1-4 18:37:13
ntp设置补充,master同步网络服务器,slave1和slave2可同步master的时间

ntp设置中:master同步网络服务器
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

slave1和slave2同步master的时间
注释上面信息采用,在配置文件中/etc/ntp.conf中注释上面信息
直接添加
  1. server master
复制代码

ntp.jpg
ssh-copy-id -i ~/.ssh/id_rsa.pub aboutyun@slave1

的含义是:
将master的公钥远程复制到slave1的authorized_keys文件中:
ssh.jpg






回复

使用道具 举报

pig2 发表于 2017-1-5 19:59:27

上述安装软件包下载地址

链接:http://pan.baidu.com/s/1eRJctZ8 密码:u8jh

安装包下载.jpg
回复

使用道具 举报

pig2 发表于 2017-1-10 17:32:22
本帖最后由 pig2 于 2017-1-11 16:21 编辑
  1. tar -zxvf ~/jar/spark-1.6.3-bin-hadoop2.6.tgz -C /data
复制代码

解压后注意更改权限
同样hadoop,spark也是
  1. tar -zxvf ~/jar/hadoop-2.6.5.tar.gz -C /data
复制代码


  1. tar -zxvf ~/jar/spark-1.6.3-bin-hadoop2.6.tgz -C /data
复制代码



回复

使用道具 举报

pig2 发表于 2017-1-18 19:06:16
本帖最后由 pig2 于 2017-1-18 19:08 编辑
pig2 发表于 2017-1-10 17:32
解压后注意更改权限
同样hadoop,spark也是

远程复制:
在/data目录的软件。配置完毕,远程复制,如果没有授权的情况下,只能复制到/home/aboutyun目录下。
对/data授权

  1. sudo chmod -R 777 /data
复制代码

即可实现远程复制,如复制hadoop
  1. scp -r /data/hadoop aboutyun@slave1:/data
复制代码

如果无授权,则出现下面情况
  1. scp: /data/hadoop: Permission denied
复制代码






回复

使用道具 举报

pig2 发表于 2017-1-19 13:30:58
本帖最后由 pig2 于 2017-1-25 20:09 编辑

远程复制纠正:
下面方式严格来讲,不正确的
  1. scp -r ~/.bashrc  aboutyun@slave1:~/
复制代码

需去掉-r
  1. scp  ~/.bashrc  aboutyun@slave1:~/
复制代码

并且特别注意远程复制之后需要生效环境变量。
  1. source ~/.bashrc
复制代码

涉及到hadoop集群及spark集群的配置

回复

使用道具 举报

pig2 发表于 2017-1-22 20:34:05
hadoop集群验证:
hadoop集群验证方式很多种,这里直接上传一个windows7文件。下面内容,保存未vim.txt文件
移动光标
上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行
下:j nj:向下移动n行
左:h nh:向左移动n列
右:l nl:向右移动n列

w:光标以单词向前移动 nw:光标向前移动n个单词 光标到单词的第一个字母上
b:与w相反
e: 光标以单词向前移动 ne:光标向前移动n个单词 光标到单词的最后一个字母上
ge:与e相反

$:移动光标到行尾 n$:移动到第n行的行尾
0(Num):移动光标到行首
^:移动光标到行首第一个非空字符上去

f:移动光标到当前行的字符a上,nf移动光标到当前行的第n个a字符上
F:相反

%:移动到与制匹配的括号上去(),{},[],<>等。

nG:移动到第n行上 G:到最后一行

CTRL+G 得到当前光标在文件中的位置

向前翻页:CTRL+F
向下移动半屏:CTRL+G

向后翻页:CTRL+B



到文件开头 gg
到文件结尾 shift+g

#############################

快速移动光标至行首和行尾

需要按行快速移动光标时,可以使用键盘上的编辑键Home,快速将光标移动至当前行的行首。除此之外,也可以在命令模式中使用快捷键"^"(即Shift+6)或0(数字0)。

如果要快速移动光标至当前行的行尾,可以使用编辑键End。也可以在命令模式中使用快捷键"$"(Shift+4)。与快捷键"^"和0不同,快捷键"$"前可以加上数字表示移动的行数。例如使用"1$"表示当前行的行尾,"2$"表示当前行的下一行的行尾。


vim查询使用/


保存后,复制到Linux,然后通过命令
  1. hdfs dfs -put vim.txt /
复制代码

乱码,
vim.jpg

主要是window下是gbk,Linux下是utf8.所以需要转换下

  1. sudo icnov -f gbk utf8 vim.txt > vim.txt.utf8
复制代码



转换后,上传即可看到

vimufg8.jpg

同时证明集群安装配置成功
回复

使用道具 举报

pig2 发表于 2017-3-31 18:04:11
本帖最后由 pig2 于 2017-3-31 18:09 编辑

sbin目录下的脚本文件:
[codeslaves.sh               在所有定义在${SPARK_CONF_DIR}/slaves的机器上执行一个shell命令
spark-config.sh         被其他所有的spark脚本所包含,里面有一些spark的目录结构信息
spark-daemon.sh                        将一条spark命令变成一个守护进程
spark-daemons.sh        在所有定义在${SPARK_CONF_DIR}/slaves的机器上执行一个spark命令
spark-executor          运行org.apache.spark.executor.MesosExecutorBackend,具体作用暂时没关注
start-all.sh            启动master进程,以及所有定义在${SPARK_CONF_DIR}/slaves的机器上启动Worker进程
start-history-server.sh 启动历史记录进程
start-master.sh         启动spark master进程
start-slave.sh          启动某机器上spark slave进程
start-slaves.sh         在所有定义在${SPARK_CONF_DIR}/slaves的机器上启动Worker进程
stop-all.sh             在所有定义在${SPARK_CONF_DIR}/slaves的机器上停止Worker进程
stop-history-server.sh  停止历史记录进程
stop-master.sh          停止spark master进程
stop-slaves.sh          停止某机器上spark slave进程[/code]
回复

使用道具 举报

关闭

推荐上一条 /2 下一条