hadoop+zookeeper+Hbase+spark安装部署总结

hadoop+zookeeper+Hbase+spark安装部署总结

主要参考:https://blog.csdn.net/sunxiaoju/article/details/85918135

计算机命名也按照引用的命名,比较省事,不过遇到的问题有点不一样。。。特此记录

hadoop安装与部署

配置资源:

阿里云镜像:ubuntu18.04

hyperV虚拟机:3台=1maste+2slave

虚拟机分配:CPU1个线程2个,内存1.5G,硬盘分配每个70G

操作步骤:

  1.  使用vm创建3个ubuntu18.04系统,一个主节点:master(NameNode)和两个从节点slave1(DataNode)和slave2(DataNode)
    
  2.  节点IP分配:主节点IP为:192.168.2.109、从节点1IP为:192.168.2.110、从节点2IP为:192.168.2.111虚拟机的网络选择桥接模式与物理网络的网段相同,这样有助于远程连接。
    
  3.  master的主机名为:sunxj-hdm,slave1的主机名为:sunxj-hds1,slave2的主机名为:sunxj-hds2,如下图所示:
    

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0PYGNY1A-1588155362324)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C4GhH2Rj-1588155362328)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G6csaQcL-1588155362329)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png)]

  1.  定义域名:sunxj-hdm.myhd.com(master),sunxj-hds1.myhd.com(slave1),sunxj-hds2.myhd.com(slave2)通过配置hosts,将3台的hosts配置为:   
    

192.168.2.109 sunxj-hdm.myhd.com

192.168.2.110 sunxj-hds1.myhd.com

192.168.2.111 sunxj-hds2.myhd.com

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CNrd0JXn-1588155362331)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png)]

注意:不能放在最下边,从注释行开始往下是配置ipv6的,ip和域名之间必须是一个tab,且域名后不能有空格,否则是ping不通的,还有3个主机必须配置相同才能互ping。

  1.  然后使用如下命令进行重启网络
    

sudo /etc/init.d/networkingrestart

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yaFdFG73-1588155362334)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)]

然后master通过ping sunxj-hds1.myhd.com就可以直接ping slave1。查看是否可以ping的通,如果是通的则配置成功,如果不通需要在找原因了.

在master机ping slave1和slave2

在 slave1机ping master和slave2

在 slave2机ping master和slave1

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y5yeh9qp-1588155362335)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)]

  1. 三个节点需要安装的工具为:gcc、net-tools、openssh-server、vsftpd、vim(用于ftp服务,windows中直接用winscp传文件)

sudo apt install gcc,

sudo apt install net-tools,

sudo apt install vim,

sudo apt install openssh-server

在安装好ssh后即可远程操作,在windows中打开putty进行ssh远程连接。

安装ftp服务并配置vsftpd请看:https://blog.csdn.net/sunxiaoju/article/details/85224602

  1. 安装java,三台主机都需要安装,安装方法请看:https://blog.csdn.net/sunxiaoju/article/details/51994559

(jdk文件夹命名为jdk1.8.0_251,因为下载的版本是这个版本,所以$JAVAHOME=/usr/jdk1.8.0_251)

  1. 在master节点上使用如下命令来创建hadoop用户``
sudo adduser hadoop

``如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rqXhyR9c-1588155362336)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png)]

  1. 使用如命令把hadoop用户加入到hadoop用户组,前面一个hadoop是组名,后面一个hadoop是用户名
sudo usermod -a -G hadoop Hadoop

\10. 可以使用如下命令来查看结果

cat /etc/group |grep hadoop

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTQcIWaV-1588155362336)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image011.png)]

\11. 把hadoop用户赋予root权限,让他可以使用sudo命令,使用如下命令编辑(当没有权限修改文件时,sudo chmod 777 /etc/sudoers 之后会有bug 导致后续的sudo 命令无法使用,所以777不能乱用啊

解决方式一定要登入图形界面,打开终端执行

pkexecchmod 0440 /etc/sudoers 把权限改回来)

​ sudovim /etc/sudoers

修改文件如下:

root ALL=(ALL)ALL

hadoop ALL=(root) NOPASSWD:ALL

\12. 用同样方法在slave1和slave2上创建hadoop用户。

\13. 首先用hadoop用户在master主机上创建ssh-key,这里我们采用rsa方式。使用如下命令(P是要大写的,后面跟"",表示无密码)

ssh-keygen -t rsa -P ""

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PC8QjlE-1588155362337)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png)]

直接回车即可,然后就会生成相应的信息,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-byfHfQkN-1588155362338)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image014.png)]

回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的,进入到该目录查看,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPk05Dst-1588155362339)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image015.png)]

然后分别在slave1和slave2用同样的方法生成,然后分别用

从1:scpid_rsa.pub hadoop@192.168.2.109:/home/sunftp/ftpdir/slave1_id_rsa.pub

从2:scpid_rsa.pub hadoop@192.168.2.109:/home/sunftp/ftpdir/slave2_id_rsa.pub

将slave1和slave2的文件上传到master上

将id_rsa.pub、slave1_id_rsa.pub、slave2_id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的,只需要执行如下命令即可:

cat *.pub>>authorized_keys

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l0Smbcn0-1588155362340)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png)]

然后可以通过:sshlocalhost测试本机无密码登录,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ube1qREi-1588155362341)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png)]

将master上的公钥拷贝到slave1和slave2上,使其master无密码登录slave1和slave2,首先将authorized_keys文件通过scp上传到slave1和slave2的/home/sunftp/ftpdir/目录中,使用如下命令来上传(winscp也行)

scp authorized_keys hadoop@192.168.2.110:/home/sunftp/ftpdir

scp authorized_keys hadoop@192.168.2.110:/home/sunftp/ftpdir

此时在slave1和slave2上的/home/sunftp/ftpdir/目录中存在authorized_keys文件,分别在两台slave机器上执行

sudochmod 664 authorized_keys

修改authorized_keys的权限,

然后如下命令将公钥拷贝到~/.ssh/目录中

cp/home/sunftp/ftpdir/authorized_keys ~/.ssh/authorized_keys

然后在master上无密码登录slave1:ssh 192.168.2.110

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-faUx2PI2-1588155362342)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png)]

master上无密码登录slave2:ssh 192.168.2.111

如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BSc6iQAZ-1588155362342)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png)]

同理:slave1也可以通过ssh命令无密码登录master和slave2;。。。

14.注意:如果无法登录请查看各个节点 /home/下的用户权限是否是755,如果不是则无法登录的,只需要将对应用户设置为755即可。

首先从https://hadoop.apache.org/releases.html下载,这里选择hadoop2.7.7的Binary版本。使用winscp命令将下载好的hadoop上传到master。

\15. 使用如下命令解压到/usr/

tar -xzvf hadoop-2.7.7.tar.gz -C /usr/

\16. 在hadoop-2.7.7目录中一个hdfs目录和三个子目录

sudo mkdir hdfs

sudo **mkdir** hdfs/tmp

sudo mkdir hdfs/name

sudo mkdir hdfs/data

\17. 首先配置core-site.xml文件,使用如下命令打开

sudo vim etc/hadoop/core-site.xml

然后在中如下配置是读写sequence file 的 buffer size,可减少 I/O 次数。在大型的 Hadoop cluster,建议可设定为 65536 到 131072,默认值 4096.按照教程配置了131072:

<property>

hadoop.tmp.dir

file:/usr/hadoop-2.7.7/hdfs/tmp

A base for other temporarydirectories.

io.file.buffer.size

131072

fs.defaultFS

hdfs://sunxj-hdm.myhd.com:9000

</property>

注意:第一个属性中的value和我们之前创建的/usr/hadoop-2.7.7/hdfs/tmp路径要一致。

\18. 配置 hadoop-env.sh文件,用于配置jdk目录,使用如下命令打开

sudo vim etc/hadoop/hadoop-env.sh

然后将exportJAVA_HOME=${JAVA_HOME}注释掉配置成具体的路径:exportJAVA_HOME=/usr/jdk1.8.0_251,否则在运行时会提示找不到JAVA_HOME

\19. 在mapred-env.sh加入JAVA_HOME

\20. 在yarn-env.sh加入JAVA_HOME

\21. 配置hdfs-site.xml,使用如下命令打开文件

        sudo vim etc/hadoop/hdfs-site.xml

然后在中加入以下代码:

<property>

​ dfs.replication

​ 2

​ dfs.namenode.name.dir

​ file:/usr/hadoop-2.7.7/hdfs/name

​ true

​ dfs.datanode.data.dir

​ file:/usr/hadoop-2.7.7/hdfs/data

​ true

​ dfs.namenode.secondary.http-address

​ sunxj-hdm.myhd.com:9001

​ dfs.webhdfs.enabled

​ true

​ dfs.permissions

​ false

</property>

注意:其中第二个dfs.namenode.name.dir和dfs.datanode.data.dir的value和之前创建的/hdfs/name和/hdfs/data路径一致;由于有两个从主机slave1、slave2,所以dfs.replication设置为2

\22. 复制mapred-site.xml.template文件,并命名为mapred-site.xml,使用如下命令拷贝

cp etc/hadoop/mapred-site.xml.templateetc/hadoop/mapred-site.xml

并编辑mapred-site.xml,在标签中添加以下代码:

<property>

​ mapreduce.framework.name

​ yarn

​ mapreduce.jobhistory.address

​ sunxj-hdm.myhd.com:10020

​ mapreduce.jobhistory.webapp.address

​ sunxj-hdm.myhd.com:19888

</property>

\23. 配置yarn-site.xml,使用如下命令打开

sudo vim etc/hadoop/yarn-site.xml

然后在标签中添加以下代码:(注意加粗代码,如果没有的话,后面配置成功后用自带的例子执行

hadoop jar/usr/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi10 10

来计算圆周率,发现到 Running job一直没反应,也没有报错)

原因可能是: 在每个Docker分配的内存和CPU资源太少,不能满足Hadoop和Hive运行所需的默认资源需求。

**<property>**

yarn.nodemanager.resource.memory-mb

2048

**</property>**

**<property>**

yarn.scheduler.minimum-allocation-mb

2048

**</property>**

**<property>**

yarn.nodemanager.vmem-pmem-ratio

2.1

**</property>**

<property>

​ yarn.resourcemanager.address

​ sunxj-hdm.myhd.com:18040

​ yarn.resourcemanager.scheduler.address

​ sunxj-hdm.myhd.com:18030

​ yarn.resourcemanager.webapp.address

​ sunxj-hdm.myhd.com:18088

​ yarn.resourcemanager.resource-tracker.address

​ sunxj-hdm.myhd.com:18025

​ yarn.resourcemanager.admin.address

​ sunxj-hdm.myhd.com:18141

​ yarn.nodemanager.aux-services

​ mapreduce_shuffle

​ yarn.nodemanager.auxservices.mapreduce.shuffle.class

​ org.apache.hadoop.mapred.ShuffleHandler

</property>

\24. 使用如下命令打开slaves文件

sudo vim etc/hadoop/slaves 

把原本的localhost删掉,然后分别改为:sunxj-hds1.myhd.com,sunxj-hds2.myhd.com ,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Maycgbqz-1588155362343)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image023.png)]

\25. 配置hadoop环境变量,使用sudo vim /etc/profile打开文件,在末尾添加入下代码:

export HADOOP_HOME=/usr/hadoop-2.7.7

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

exportHADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

\26. 输入如下命令使配置立即生效

source /etc/profile 

\27. 使用如下命令:

scp -r hadoop-2.7.7 sunxj@192.168.0.110:/home/sunftp/ftpdir/

将hadoop-2.7.7传给slave1然后在slave1上hadoop-2.7.7移动到usr目录,使用如下命令进行移动

sudo mv/home/sunftp/ftpdir/hadoop-2.7.7 /usr/

\28. 用同样办法拷贝到slave2上。

\29. 在两个slave从机上执行25~26

\30. Master和两个slave从机上分别添加写入权限:

sudo chmod -R 777/usr/hadoop-2.7.7

\31. 在slave1和slave2上更改hdfs-site.xml 配置文件,由于两个从节点上的hadoop是从master节点拷贝过的,因此需要单独更改两个节点上的hdfs-site.xml文件,通过如下命令进行编辑slave1节点上的配置文件:

sudo vim/usr/hadoop-2.7.7/etc/hadoop/hdfs-site.xml

将两个从机的hdfs-site.xml 配置文件改成如下:

<configuration>

<property>

​ dfs.replication

​ 2

</configuration>

将master、slave1、slave2上的/etc/hosts文件中所有127.0.01的注释掉(如果没有的话,后面配置成功后用自带的例子执行

hadoop jar/usr/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi10 10

来计算圆周率,发现到 Running job一直没反应,也没有报错)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WND1oyfA-1588155362345)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image025.png)]

\32. 在master主机上执行,此时使用hadoop用户登录通过如下命令进行格式化

hdfs namenode -format 

返回,没有报错 status 0 表示格式化成功

\33. 在master上开启hadoop,使用start-all.sh 启动,然后输入yes回车,然后只要是出现此界面都输入yes即可。

\34. 然后在master节点上输入jps命令查看hadoop进程,此时master主节点有4个ResourceManager,Jps, NameNode,SecondaryNamenode,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqCwXQ9n-1588155362346)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image029.png)]

\35. 两个从节点slave1和slave2的hadoop进程,如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mg4mCUKQ-1588155362346)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image030.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O8RWANUq-1588155362348)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image031.png)]

\36. stop-all.sh停止haddoop。

\37. 到此hadoop集群环境安装完毕。

\38. 执行hadoop jar/usr/hadoop-2.7.7/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar pi10 10

来计算圆周率

得到结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RvpDWymI-1588155362349)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image033.png)]

修改参数得到以下结果:

10 10

Job Finished in 69.767 seconds

Estimated value of Pi is3.20000000000000000000

10 1000

Job Finished in 69.91 seconds

Estimated value of Pi is3.14080000000000000000

10 100000000

Job Finished in 93.765 seconds

Estimated value of Pi is3.14159274400000000000

2 500000000

Job Finished in 52.501 seconds

Estimated value of Pi is3.14159273600000000000

\39. hadoop fs -mkdir word_count_input 创建文件夹目录word_count_input

hadoop fs -put file*.txt word_count_input上传文件到word_count_input

hadoop fs -ls word_count_output 查看文件夹word_count_output的目录

\40. YARN的web页面,则是在master机器上,然后端口是用yarn-site.xml配置文件中的yarn.resourcemanager.webapp.address指定的,我配置的是18088,那么在浏览器中输入:http://192.168.2.109:18088即可打开界面

HDFS界面在master上打开,如果没有更改端口,则默认的端口是50070:http://192.168.2.109:50070,

引用链接:https://blog.csdn.net/sunxiaoju/article/details/85222290

zookeeper安装与部署

  1. 多配置一台hadoop的namenode节点,那么现在在新建一台hadoop的namenode节点,配置方法与之前3台相同,新建的一台我们叫做master1,域名配置为:sunxj-hdm1.myhd.com,IP:192.168.2.108,首先在master1节点上使用如下命令创建一个hadoop用户:

sudo adduser hadoop

  1.  使用如命令把hadoop用户加入到hadoop用户组,前面一个hadoop是组名,后面一个hadoop是用户名:
    

sudo usermod -a -Ghadoop hadoop

  1.  把hadoop用户赋予root权限,让他可以使用sudo命令,使用如下命令编辑
    

su root

vi /etc/sudoers

在root ALL=(ALL:ALL) ALL下一行加入:

hadoop ALL=(root)NOPASSWD:ALL

!q 强制保存退出

  1.  修改master1的主机名为:sunxj-hdm1,使用如下命令修改:
    

sudo vim/etc/hostname

  1.   在master、master1、slave1、slave2节点上在/etc/hosts文件中加入:
    

192.168.0.109 sunxj-hdm.myhd.com

192.168.0.108 sunxj-hdm1.myhd.com

192.168.0.110 sunxj-hds1.myhd.com

192.168.0.111 sunxj-hds2.myhd.com

然后将原来的localhost,sunxj-hdm1注释掉,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PsMNoY5d-1588155362349)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)]

  1.  然后使用如下命令,在四个节点中执行使配置生效:
    

sudo /etc/init.d/networkingrestart

如果直接通过ping sunxj-hdm1.myhd.com是通的即可配置完成。

  1.  建立四个节点之间的ssh无密码登录,参照hadoop配置部分或者<https://blog.csdn.net/sunxiaoju/article/details/85222290>中的第五部分。即可。
    
  2.  配置master1节点的环境变量,hadoop配置部分,编辑/etc/profile文件,配置jdk环境,以及hadoop环境。(master,salve1,slave2已经配置过了)
    
  3. 下载zookeeper3.4.14版本:https://zookeeper.apache.org/releases.html

  4. 然后将下载好的zookeeper通过scp命令上传到master节点:

scp zookeeper-3.4.14.tar.gz hadoop@192.168.0.109:/home/sunftp/ftpdir/

  1. 此时在master节点的/home/sunftp/ftpdir/目录中有一个zookeeper-3.4.10.tar.gz文件,使用如下命令解压:

tar -xzvfzookeeper-3.4.10.tar.gz

  1. 将zookeeper-3.4.14文件夹移动到/usr/目录下,使用如下命令移动:

sudo mvzookeeper-3.4.10 /usr/

  1. 然后进入到**/usr/zookeeper-3.4.14/conf/**目录,修改配置,使用如下命令从模板配置文件中复制一个zookeeper的配置文件,如:

sudo cpzoo_sample.cfg zoo.cfg

  1. 在zookeeper-3.4.14目录中新建一个data目录,使用如下命令:

sudo mkdir data

  1. 使用如下命令打开zoo.cfg进行编辑

sudo vimconf/zoo.cfg

然后修改添加入下信息:

dataDir=/usr/zookeeper-3.4.14/data/

server.1=192.168.2.109:2888:3888

server.2=192.168.2.110:2888:3888

server.3=192.168.2.111:2888:3888

server.4=192.168.2.108:2888:3888

``

其中dataDir修改为刚刚新建data的目录,server.1是master节点IP,1是编号,其余的是slave节点IP

  1. 在dataDir指定的目录中新建一个myid文件,文件内容:master节点上为:1,slave1节点上为:2,slave2节点上为:3,master1节点上为:4,使用如下命令新建文件,然后输入1:

sudo vim data/myid

  1. 保存退出,然后通过如下命令分别上传到slave1和slave2,master1:

scp -r zookeeper-3.4.14 hadoop@192.168.2.110:/home/sunftp/ftpdir/

scp -rzookeeper-3.4.14 hadoop@192.168.2.111:/home/sunftp/ftpdir/

scp -rzookeeper-3.4.14 hadoop@192.168.2.108:/home/sunftp/ftpdir/

``

  1. 然后将slave和master1节点上的zookeeper目录从/home/sunftp/ftpdir/移动到/usr/,然后分别修改myid 为2,3,4

  2. 将/usr/zookeeper-3.4.14/bin/添加到环境变量中,修改/etc/profile,4个节点都要添加入下:

export ZOOKEEPER_HOME=/usr/zookeeper-3.4.10

exportPATH="$ZOOKEEPER_HOME/bin:$PATH"

保存退出,然后执行source/etc/profile,使之生效,

  1. 使用如下命令修改zookeeper目录权限**:**4个节点都要

sudo chmod -R 777/usr/zookeeper-3.4.10

  1. 分别在4个节点使用如下命令启动zookeeper:

zkServer.sh start

zkServer.shstatus 查看启动的进程

四台机器必须只有一个leader,其他都是follower

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yEbIk3B7-1588155362350)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png)]

此时用jps查看进程,每个会有一个QuorumPeerMain则表示zookeeper配置启动成功。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NFWeAf8g-1588155362351)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png)]

  1. 为了保持干净,我们把master、slave1、slave2上的hadoop目录更改一个名字,然后重新解压一个干净的hadoop,比如将原来的hadoop-2.7.7更改为hadoop-2.7.7_no_zookeeper。Master上拷贝一个新的hadoop到usr,注意:文件夹名应与原来的文件夹名相同,这样对于环境变量就不用重新配置了

  2. 修改hadoop-2.7.7的权限,使用如下命令修改权限:

sudo chmod 777/usr/hadoop-2.7.7

  1. 在hadoop-2.7.7目录中一个hdfs目录和三个子目录,如

sudo mkdir hadoop-2.7.7/hdfs

sudo mkdir hadoop-2.7.7/hdfs/tmp

sudo mkdir hadoop-2.7.7/hdfs/name

sudo mkdir hadoop-2.7.7/hdfs/data

sudo mkdir hadoop-2.7.7/hdfs/data/journaldata

  1. master首先修改hadoop-env.sh文件,将export JAVA_HOME=${JAVA_HOME}更改为:/usr/jdk1.8.0_251

  2. 修改core-site.xml,如下:

<configuration>

​ fs.defaultFS

​ hdfs://master/

​ hadoop.tmp.dir

​ file:/usr/hadoop-2.7.7/hdfs/tmp

​ ha.zookeeper.quorum

​ sunxj-hdm.myhd.com:2181,sunxj-hdm1.myhd.com:2181,sunxj-hds1.myhd.com:2181,sunxj-hds2.myhd.com:2181

​ ha.zookeeper.session-timeout.ms

​ 1000

​ ms

</configuration>

  1. 修改hdfs-site.xml,修改如下:

<configuration>

​ dfs.replication

​ 2

​ dfs.namenode.name.dir

​ file:/usr/hadoop-2.7.7/hdfs/name

​ dfs.datanode.data.dir

​ file:/usr/hadoop-2.7.7/hdfs/data

​ dfs.webhdfs.enabled

​ true

​ <!–指定hdfs的nameservice为master,需要和core-site.xml中的保持一致

​ dfs.ha.namenodes.[nameserviceid]为在nameservice中的每一个NameNode设置唯一标示符。

​ 配置一个逗号分隔的NameNodeID列表。这将是被DataNode识别为所有的NameNode。

​ 例如,如果使用"master"作为nameserviceID,并且使用"hdm"和"hdm1"作为NameNodes标示符

​ -->

​ dfs.nameservices

​ master

​ dfs.ha.namenodes.master

​ hdm,hdm1

​ dfs.namenode.rpc-address.master.hdm

​ sunxj-hdm.myhd.com:9000

​ dfs.namenode.http-address.master.hdm

​ sunxj-hdm.myhd.com:50070

​ dfs.namenode.rpc-address.master.hdm1

​ sunxj-hdm1.myhd.com:9000

​ dfs.namenode.http-address.master.hdm1

​ sunxj-hdm1.myhd.com:50070

​ <!-- 指定NameNode的edits元数据的共享存储位置。也就是JournalNode列表

​ 该url的配置格式:qjournal://host1:port1;host2:port2;host3:port3/journalId

​ journalId推荐使用nameservice,默认端口号是:8485–>

​ dfs.namenode.shared.edits.dir

​ qjournal://sunxj-hdm.myhd.com:8485;sunxj-hdm1.myhd.com:8485;sunxj-hds1.myhd.com:8485/master

<property>

​ dfs.journalnode.edits.dir

​ /usr/hadoop-2.7.7/hdfs/data/journaldata

​ dfs.ha.automatic-failover.enabled

​ true

​ dfs.client.failover.proxy.provider.master

​ org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

​ dfs.ha.fencing.methods

​ sshfence

​ shell(/bin/true)

​ dfs.ha.fencing.ssh.private-key-files

​ /home/hadoop/.ssh/id_rsa

​ dfs.ha.fencing.ssh.connect-timeout

​ 30000

​ ha.failover-controller.cli-check.rpc-timeout.ms

​ 60000

</configuration>

  1. 修改mapred-site.xml ,先通过如下命令拷贝一个模板文件:

sudo cpmapred-site.xml.template mapred-site.xml

然后编辑修改mapred-site.xml,修改如下:

<configuration>

​ mapreduce.framework.name

​ yarn

​ mapreduce.jobhistory.address

​ sunxj-hdm.myhd.com:10020

​ mapreduce.jobhistory.webapp.address

​ sunxj-hdm.myhd.com:19888

</configuration>

  1. 修改yarn-site.xml ,修改如下:

<configuration>

<!-- Sitespecific YARN configuration properties -->

​ yarn.resourcemanager.ha.enabled

​ true

​ yarn.resourcemanager.cluster-id

​ yrc

​ yarn.resourcemanager.ha.rm-ids

​ rm1,rm2

​ yarn.resourcemanager.hostname.rm1

​ sunxj-hds1.myhd.com

​ yarn.resourcemanager.hostname.rm2

​ sunxj-hds2.myhd.com

​ yarn.resourcemanager.zk-address

​ sunxj-hdm.myhd.com:2181,sunxj-hdm1.myhd.com:2181,sunxj-hds1.myhd.com:2181

​ yarn.nodemanager.aux-services

​ mapreduce_shuffle

​ yarn.log-aggregation-enable

​ true

​ yarn.log-aggregation.retain-seconds

​ 86400

​ yarn.resourcemanager.recovery.enabled

​ true

​ yarn.resourcemanager.store.class

​ org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore

</configuration>

  1. 在mapred-env.sh加入JAVA_HOME

  2. 在yarn-env.sh加入JAVA_HOME

  3. 修改slaves,修改如下:

sunxj-hdm.myhd.com

sunxj-hdm1.myhd.com

sunxj-hds1.myhd.com

sunxj-hds2.myhd.com

  1. 将master上的hadoop-2.7.7目录分发到master1、slave1、slave2的/usr目录中

  2. 然后在每个节点执行:

sudo mv/home/sunftp/ftpdir/hadoop-2.7.7 /usr/

  1. 通过如下命令更改权限:

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/tmp

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/name

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/data

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/data/journaldata

  1. 各个节点重新启动zookeeper

  2. 在master,master1,slave1节点上启动journalnode进程,使用如下命令启动:

hadoop-daemon.shstart journalnode

  1. 使用如下命令在master格式化namenode:

hadoop namenode -format

  1. 把在master节点上生成的元数据 给复制到 另一个namenode(master1)节点上,数据位置在/usr/hadoop-2.7.7/hdfs/name/,将current目录放置到到master1节点相同的位置。

Master上:scp -r/usr/hadoop-2.7.7/hdfs/name/current hadoop@192.168.2.108:/home/sunftp/ftpdir

在master1上:sudo mv /home/sunftp/ftpdir/current/usr/hadoop-2.7.7/hdfs/name/

  1. 在master节点上使用如下命令格式化zkfc:

hdfs zkfc -formatZK

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvxJxcD5-1588155362353)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)]

表示成功:

  1. 然后在master节点上使用start-all.sh启动HDFS

  2. slave1和slave2上(通过start-all.sh启动)没有ResourceManager进程。需要单独的使用如下命令进行启动:

yarn-daemon.shstart resourcemanager

  1. 启动之后,jps检查各节点的进程,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y6rJilBg-1588155362354)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vRHIvT0Y-1588155362355)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6w6JUoi5-1588155362356)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cKOFUXJx-1588155362357)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image014.png)]

  1. 在nodename节点上resourcemanager和NodeManager进程同时只能运行一个,而datanode节点可以同时运行。

  2. 此时可通过web界面来查看master和master1两个节点的状态,必然有一个是active,一个是standby,如下图所示:

Master:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpsmBhpz-1588155362358)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image016.png)]

Master1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-80ZcwDZ9-1588155362358)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image018.png)]

\46. 在slave1节点上查看yarn的web界面,地址为:http://192.168.1.110:8088,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fue8XUdQ-1588155362359)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png)]

  1. web界面来查看master和master1两个节点的状态,可以确定在master1节点上的namenode是活动的,那么我们在master1节点上找到namenode进程的PID,然后强制结束,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ube1nYqP-1588155362360)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png)]

此时master1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LyqyMkMw-1588155362361)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image024.png)]

Master自动切换成活动状态:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qb21x08Y-1588155362362)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image026.png)]

现在将master1上的namenode通过如下命令单独启动起来:

hadoop-daemon.shstart namenode

matser1变成stanby状态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ssDlRb3-1588155362363)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image028.png)]

  1. 因此在上传文件的时候干掉active namenode,在上传过程中如果出现active的namenode节点异常退出,会有一个备用namenode节点启动来保证文件不会丢失。

  2. 然后也可以通过web界面查看,注意只能在active的节点上查看,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bsjAZJMY-1588155362364)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image030.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X8BHQpDy-1588155362365)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image032.png)]

  1. 然后在上图点击下载上传的文件

问题:

  1. start-all.sh启动之后,master上 只有六个进程少了一个datanode,

解决方案:

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/tmp

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/name

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/data

sudo chownhadoop:hadoop hadoop-2.7.7/hdfs/data/journaldata

  1. 在slave2节点上查看yarn的web界面,地址为:http://192.168.2.111:8088,如下图所示:到达yarn的web页面,二十自动显示sunxj-hds1.myhd.com(salve1的域名)没有回复

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wUgzhxpV-1588155362366)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image034.png)]

只能在slave1上访问,地址为:http://192.168.2.110:8088

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPuyQ03P-1588155362368)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png)]

原因:yarn.site.xlm中没有指定,默认8088中,先去访问s1然后s2

hbase的安装与部署

  1.  <https://hbase.apache.org/downloads.html>下载hbase,我们选择2.0.4版本的bin。将下载好的hbase-2.0.4-bin.tar.gz通过winscp传如到master节点。
    
  2.  然后使用如下命令进行解压:
    

tar -xzvf hbase-2.0.4-bin.tar.gz

  1. 然后通过如下命令将解压后的文件夹移动到/usr/命令:
    
sudo mv hbase-2.0.4 /usr/
  1. 配置hbase的环境变量编辑 /etc/profile 文件,通过如下命令进行编辑:
    
sudo vim /etc/profile

然后在该文件中的最后位置加入:

export HBASE_HOME=/usr/hbase-2.1.1

export PATH="$HBASE_HOME/bin:$PATH"

保存退出,然后执行:source /etc/profile命令使之生效.

  1.  然后即可通过如下命令查看版本:
    

hbase version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nmVnvOGv-1588155362369)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png)]

  1.  修改配置文件,切换到 /usr/hbase-2.0.4/conf 下
    

使用如下命令在hbase-2.0.4创建一个pids,用于存放用于运行hbase进程的pid文件:

sudo mkdir /usr/hbase-2.0.4/pids

通过如下命令修改权限:

sudo chown -R hadoop:hadoop/usr/hbase-2.0.4/pids

在次创建一个tmp文件夹,然后修改所有者,如下所示:

sudo mkdir /usr/hbase-2.0.4/tmp

通过如下命令修改权限:

sudo chown -R hadoop:hadoop /usr/hbase-2.0.4/tmp

  1.  修改hbase-env.sh,使用如下命令编辑:
    

sudo vim hbase-env.sh

然后在文件末尾加入如下信息:

export JAVA_HOME=/usr/jdk1.8.0_191

export HADOOP_HOME=/usr/hadoop-2.7.7

export HBASE_HOME=/usr/hbase-2.0.4

export HBASE_CLASSPATH=/usr/hadoop-2.7.7/etc/hadoop

export HBASE_PID_DIR=/usr/hbase-2.0.4/pids

export HBASE_MANAGES_ZK=false

其中HBASE_PID_DIR的路径就是刚才创建的pids文件夹路径,HBASE_MANAGES_ZK则表示禁用hbase自己的zookeeper。

  1.  修改hbase-site.xml,编辑hbase-site.xml 文件,在`<configuration>`添加如下配置:
    

<property>

​ hbase.rootdir

​ hdfs://sunxj-hdm.myhd.com:9000/hbase

​ Thedirectory shared byregion servers.

​ hbase.zookeeper.property.clientPort

​ 2181

​ zookeeper.session.timeout

​ 120000

​ hbase.master.maxclockskew

​ 150000

​ hbase.zookeeper.quorum

​ sunxj-hdm.myhd.com,sunxj-hdm1.myhd.com,sunxj-hds1.myhd.com,sunxj-hds2.myhd.com

​ hbase.tmp.dir

​ /usr/hbase-2.0.4/tmp

​ hbase.cluster.distributed

​ true

​ hbase.master

​ sunxj-hdm.myhd.com:60000

</property>

  1.   修改regionservers指定hbase的主从,和hadoop的slaves文件配置一样, 将文件修改为:
    

sunxj-hdm.myhd.com

sunxj-hdm1.myhd.com

sunxj-hds1.myhd.com

sunxj-hds2.myhd.com

  1. 使用scp命令将hbase-2.0.4传输到master1,slave1,slave2节点上

  2. 在master1、slave1、slave2节点上将hbase-2.0.4移动到/usr/目录

  3. 在master1、slave1、slave2节点上分别配置/etc/profile,将如下代码也加入到其他三个节点上:

export HBASE_HOME=/usr/hbase-2.0.4

export PATH="$HBASE_HOME/bin:$PATH"

然后在master1、slave1、slave2节点上分别执行source /etc/profile使之配置生效,可通过hbase version验证。

  1. 在成功启动Hadoop、zookeeper之后在master上启动hbase,使用如下命令进行启动:

start-hbase.sh

  1. 然后用jps查看各个节点的进程情况,如下图所示:

Master:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HZzOQ1cB-1588155362371)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image004.png)]

Master1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0NVNjaM-1588155362372)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image006.png)]

Slave1:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EmyR8cpt-1588155362373)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image008.png)]

Slave2:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nj1LVa3G-1588155362374)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image010.png)]

发现master有Hmaster进程,说明启动成功

  1. http://192.168.2.109:16010访问Hbase的web管理界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Leqn3nE9-1588155362375)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image012.png)]

此时说明配置habase成功。

  1. 为了保证HBase集群的高可靠性,HBase支持多BackupMaster 设置。当Active Master挂掉后,BackupMaster可以自动接管整个HBase的集群。在master、master1、slave1、slave2节点的/usr/hbase-2.0.4/conf/ 目录下新增文件配置backup-masters,在其内添加要用做Backup Master的节点hostname,使用如下命令新建一个backup-masters,如果已存在则进行编辑

sudo vim /usr/hbase-2.0.4/conf/backup-masters

然后输入备用节点的hostname,我们在hbase-site.xml配置的hbase master是sunxj-hdm.myhd.com,那么我们备用的使用sunxj-hdm1.myhd.com,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SK9Xx12S-1588155362376)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image013.png)]

  1. hbase.rootdir配置成nameservice方式,何为nameservice方式,意思就是在hadoop中配置了nameservice方式,对于外部需要连接hadoop时,只关心nameservice,而不关心是哪个namenode,不管namenode如何切换,都会自动连接到active的哪个namenode节点上,因此需要先查看hadoop的hdfs-site.xml文件中的nameservice名称,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HKJ8RkHk-1588155362377)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image015.png)]

然后打开hbase-site.xml将原来的hbase.rootdir对应的hdfs://sunxj-hdm.myhd.com:9000/hbase更改为hdfs://master/hbase即可,注意在此处是不需要填写端口号的,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q4qgNKyF-1588155362378)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image017.png)]

18. 注意:以上步骤将master,master1,slave1,slave2上的全部都修改。如果没有修改此时在两个节点上就会启动两个HMaster,但是在备用节点master1启动之后,master节点上的HMaster进程就会自动关闭,由于在配置的时候配置的hadoop的主namenode配置到了sunxj-hdm.myhd.com(master)上,但是master的状态是standby,这就引出了当namenode节点来回切换的情况下,而hbase-site.xml中只配置了一个namenode节点,name此时hbase集群就会全部挂掉。

19.stop-hbase.sh停止,再使用start-hbase.sh启动hbase集群。Jps

查看各个节点的线程情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPROdAUf-1588155362379)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image019.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-83pu08AA-1588155362380)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image020.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SCOgrgJq-1588155362380)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image022.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WC1FNUO-1588155362381)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image023.png)]

此时****master和master1上都有Hmaster进程

  1. http://192.168.2.109:16010进入Hbase的web管理界面

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H6FWUHna-1588155362382)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image025.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3BShDr2s-1588155362382)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image027.png)]

此时已经配置完成。

  1. 通过以下命令进入hbase的shell命令命令行:

hbase shell

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DRbo82dM-1588155362383)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image029.png)]

Hbase的web管理界面

http://192.168.2.109:16010

HBase Shell的一些基本操作命令,列出了几个常用的HBaseShell命令,如下:

查看存在哪些表: list

创建表 : create ‘表名称’, ‘列名称1’,‘列名称2’,‘列名称N’

添加记录: put’表名称’, ‘行名称’, ‘列名称:’, ‘值’

查看记录: get’表名称’, ‘行名称’

查看表中的记录总数: count’表名称’

删除记录: delete’表名’ ,‘行名称’ , ‘列名称’

删除一张表: 先要屏蔽该表,才能对该表进行删除,第一步disable ‘表名称’ 第二步 drop ‘表名称’

查看所有记录: scan"表名称"

查看某个表某个列中所有数据: scan"表名称", [‘列名称:’]

更新记录: 就是重写一遍进行覆

spark安装与部署

  1. 搭建scale环境,首先从<https://www.scala-lang.org/download/>地址下载,选择linux,下的2.12.11版本
    

使用winscp将下载好的scala上传到master节点。使用如下命令解压: tar -xzvfscala-2.12.8.tgz

配置环境变量,编辑/etc/profile文件,然后加入如下配置:

export SCALA_HOME=/usr/scala-2.12.8
export PATH="$SCALA_HOME/bin:$PATH"

然后执行source/etc/profile,使之配置生效,

然后执行scala -version查看scala版本,并检测是否配置成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qyXWl7aM-1588155362384)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png)]

  1. 按照以上配置分别配置master1、slave1、slave2节点上的scala运行环境。
    
  2. 从<http://spark.apache.org/downloads.html>下载spark,选择spark和hadoop版本,下载spark-2.4.0-bin-hadoop2.7.tgz
    

使用winscp将下载好的spark上传至master节点, 然后使用人下命令在master解压spark:

tar -xzvf spark-2.4.0-bin-hadoop2.7.tgz

将解压出的spark目录移动到/usr/目录,

然后在/usr/spark-2.4.0-bin-hadoop2.7/目录创建一个zookeeper_spark文件夹,如下图:

sudo chowm -R hadoop:hadoop /usr/spark-2.4.0-bin-hadoop2.7/zookeeper_spark

进入到/usr/spark-2.4.0-bin-hadoop2.7/conf/目录修改配置文件: 复制spark-env.sh.template并重命名为spark-env.sh,然后编辑spark-env.sh,在文件的末尾添加入下配置:

export JAVA_HOME=/usr/jdk1.8.0_251

export SCALA_HOME=/usr/scala-2.12.11

export HADOOP_HOME=/usr/hadoop-2.7.7

export HADOOP_CONF_DIR=/usr/hadoop-2.7.7/etc/hadoop

export SPARK_WORKER_MEMORY=500m

export SPARK_WORKER_CORES=1

exportSPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER-Dspark.deploy.zookeeper.url=sunxj-hdm.myhd.com:2181,sunxj-hdm1.myhd.com:2181,sunxj-hds1.myhd.com:2181,sunxj-hds2.myhd.com:2181-Dspark.deploy.zookeeper.dir=/usr/spark-2.4.0-bin-hadoop2.7/zookeeper_spark"

-Dspark.deploy.recoveryMode=ZOOKEEPER #说明整个集群状态是通过zookeeper来维护的,整个集群状态的恢复也是通过zookeeper来维护的。就是说用zookeeper做了spark的HA配置,Master(Active)挂掉的话,Master(standby)要想变成Master(Active)的话,Master(Standby)就要像zookeeper读取整个集群状态信息,然后进行恢复所有Worker和Driver的状态信息,和所有的Application状态信息;

-Dspark.deploy.zookeeper.url=sunxj-hdm.myhd.com:2181,sunxj-hdm1.myhd.com:2181,sunxj-hds1.myhd.com:2181,sunxj-hds2.myhd.com:2181#将所有配置了zookeeper,并且在这台机器上有可能做master(Active)的机器都配置进来;(我用了4台,就配置了4台)

-Dspark.deploy.zookeeper.dir=/usr/spark-2.4.0-bin-hadoop2.7/zookeeper_spark

#-Dspark.deploy.zookeeper.dir是保存spark的元数据,保存了spark的作业运行状态;

zookeeper会保存spark集群的所有的状态信息,包括所有的Workers信息,所有的Applactions信息,所有的Driver信息

注意:如果存在****exportSPARK_MASTER_IP则需要将此项注释掉。然后保存退出。

  1. 复制slaves.template成slaves,然后编辑slaves,将localhost删除,然后添加入下内容:
    
sunxj-hdm.myhd.com
sunxj-hdm1.myhd.com
sunxj-hds1.myhd.com
sunxj-hds2.myhd.com
  1. 配置环境变量,编辑/etc/profile文件,在最后加入如下配置:
    
export SPARK_HOME=/usr/spark-2.4.0-bin-hadoop2.7
export PATH="$SPARK_HOME/bin:$PATH"
然后使用source /etc/profile使之配置生效,使用同样方法在master1,slave1,slave2节点上配置环境变量。
  1. 然后使用如下命令将配置好的spark-2.4.0-bin-hadoop2.7上传到master1,slave1,slave2节点上的/usr/路径
    
  2. 在各个节点上依次启动zookeeper、hadoop、resourcemanager(slave1、slave2)、hbase、spark命令如下:

(1)、zkServer.sh start(master,master1,slave1,slave2都要执行)

(2)、start-all.sh(只在master上执行,注意:有时候第一次启动时两个namenode节点都是standby状态,需要停止在启动即可)

(3)、yarn-daemon.sh start resourcemanager(只在slave1,slave2上执行

(4)、start-hbase.sh(只在master上执行)

(5)、/usr/spark-2.4.0-bin-hadoop2.7/sbin/start-all.sh (只在master上执行)

  1. 此时Master进程和Worker进程都以启动成功,但是spark只有一个Master说明spark HA没有启动起来,那么此时必须要手动启动才行,在master1上使用如下命令进行启动:

/usr/spark-2.4.0-bin-hadoop2.7/sbin/start-master.sh

  1. 网页查看spark运行状态打开web页面查看http://192.168.2.109:8080/http://192.168.2.108:8080/

Master:active,master1 :standby

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQTNjsvP-1588155362385)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image003.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IS7V5kRn-1588155362386)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image005.png)]

可以看到状态一个是(master)ALIVE,一个是(master1)STANDBY,此时将master节点上的Master进程kill掉,如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3S5Yg5Mz-1588155362387)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image007.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rYBrIp68-1588155362388)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image009.png)]

可以看出master中的Master进程kill掉之后,master1会自动切换成active。然后手动再启动master中的Master进程:

/usr/spark-2.4.0-bin-hadoop2.7/sbin/start-master.sh

如下图:

Master机器转换成STANDBY

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZNJrSIoi-1588155362388)(file:///C:/Users/z00Local/Temp/msohtmlclip1/01/clip_image011.png)]

  1. 到此为止spark环境配置成功

  2. 测试:然后在master1上创建一个worldcount.txt文件,使用如下命令创建:sudo vim worldcount.txt文件内容如下:

hello
hello
world
world
hello
linux
spark
window
linux
spark
spark
linux
hello
sunxj
window

保存退出

然后通过如下命令将文件上传至hdfs系统:``

hadoopfs -put worldcount.txt /user_data

  1. 通过spark-shell命令进行测试,在master节点上输入该命令进入scala环境,然后在spark即scala命令行依次输入如下代码:
val file=sc.textFile("hdfs://master/user_data/worldcount.txt")
val rdd = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)rdd.collect()
rdd.foreach(println)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5yqvqvu-1588155362389)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image013.png)]

  1. 执行pyspark脚本报错

$ pyspark

pyspark: line 45: python: command not found

env: ‘python’: No such file or directory

因为没有配置Spark python的环境变量, 所以需要添加python相关环境变量

sudo vim /etc/profle

末尾添加:

export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH

export PYSPARK_PYTHON=python3

然后 source /etc/profle

此时再执行就可以了:如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLpQHp3H-1588155362390)(file:///C:/Users/z0044j2u/AppData/Local/Temp/msohtmlclip1/01/clip_image015.png)]

  1. 网页查看spark运行状态打开web页面查看http://192.168.2.109:8080/http://192.168.2.108:8080/

  2. 注意在写hdfs路径时,可以通过hadoop fs -ls hdfs://master/,一步一步的找路径,如下图所示:

  3. 开机顺序

(1)、zkServer.shstart(master,master1,slave1,slave2都要执行)

(2)、start-all.sh(只在master上执行,注意:有时候第一次启动时两个namenode节点都是standby状态,需要停止在启动即可)

(3)、yarn-daemon.shstart resourcemanager(只在slave1,slave2上执行)

(4)、start-hbase.sh(只在master上执行)

(5)、/usr/spark-2.4.0-bin-hadoop2.7/sbin/start-all.sh(只在master上执行)如下图所示:

  1. 常用命令:

启动journalnode进程:hadoop-daemon.sh start journalnode

查看状态zkServer.sh status

master格式化namenode: hadoop namenode -format

master节点上使用如下命令格式化zkfc:hdfs zkfc -formatZK

slave1和slave2上没有ResourceManager进程(通过start-all.sh启动),单独的使用如下命令启动:yarn-daemon.sh start resourcemanager

hadoop fs相关命令操作hdfs的文件

nt.txt文件,使用如下命令创建:sudo vim worldcount.txt文件内容如下:

hello
hello
world
world
hello
linux
spark
window
linux
spark
spark
linux
hello
sunxj
window

保存退出

然后通过如下命令将文件上传至hdfs系统:``

hadoopfs -put worldcount.txt /user_data

  1. 通过spark-shell命令进行测试,在master节点上输入该命令进入scala环境,然后在spark即scala命令行依次输入如下代码:
val file=sc.textFile("hdfs://master/user_data/worldcount.txt")
val rdd = file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)rdd.collect()
rdd.foreach(println)

[外链图片转存中…(img-F5yqvqvu-1588155362389)]

  1. 执行pyspark脚本报错

$ pyspark

pyspark: line 45: python: command not found

env: ‘python’: No such file or directory

因为没有配置Spark python的环境变量, 所以需要添加python相关环境变量

sudo vim /etc/profle

末尾添加:

export PYTHONPATH=$SPARK_HOME/python:$SPARK_HOME/python/lib/py4j-0.10.7-src.zip:$PYTHONPATH

export PYSPARK_PYTHON=python3

然后 source /etc/profle

此时再执行就可以了:如下

[外链图片转存中…(img-KLpQHp3H-1588155362390)]

  1. 网页查看spark运行状态打开web页面查看http://192.168.2.109:8080/http://192.168.2.108:8080/

  2. 注意在写hdfs路径时,可以通过hadoop fs -ls hdfs://master/,一步一步的找路径,如下图所示:

  3. 开机顺序

(1)、zkServer.shstart(master,master1,slave1,slave2都要执行)

(2)、start-all.sh(只在master上执行,注意:有时候第一次启动时两个namenode节点都是standby状态,需要停止在启动即可)

(3)、yarn-daemon.shstart resourcemanager(只在slave1,slave2上执行)

(4)、start-hbase.sh(只在master上执行)

(5)、/usr/spark-2.4.0-bin-hadoop2.7/sbin/start-all.sh(只在master上执行)如下图所示:

  1. 常用命令:

启动journalnode进程:hadoop-daemon.sh start journalnode

查看状态zkServer.sh status

master格式化namenode: hadoop namenode -format

master节点上使用如下命令格式化zkfc:hdfs zkfc -formatZK

slave1和slave2上没有ResourceManager进程(通过start-all.sh启动),单独的使用如下命令启动:yarn-daemon.sh start resourcemanager

hadoop fs相关命令操作hdfs的文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值