Hadoop+Zookeeper+Scala+Spark搭建

平台架构:拟使用三台虚拟机搭建hadoop平台,为了节省时间,首先在一台虚拟机上进行操作,另外两台克隆配置好的虚拟机而成。  

Hadoop平台的搭建:

1,安装虚拟机

在此处需要选择自己下载的光盘镜像的位置,选择后选择稍后安装操作系统,然后进行下一步                                                                                                                                    

此处选择自己物理机创建的预放置虚拟机的文件夹                                                                                                                                                     

建议分配40G的磁盘,以免后期平台运行时造成存储空间不够的问题,这里如果没有设置,在虚拟机完全安装完毕后,

也是可以进行调整的

                                                                                                                                                                           

点击完成之后,选择虚拟机,选择光盘镜像,然后点击确定,这里一定要进行设置,否则在下一步启动时会出错,

设置完毕后,点击开启此虚拟机,建议把主节点的内存设为2GB(视自身物理机内存大小情况而定)。

                                     

这里一定要选择第一个选项,不要进行检查安装,太耗费时间                                                                                

选择安装过程中使用的语言以及后期安装完毕,系统内部的语言,根据自己喜好进行选择,选择完毕后,

点击右下角的continue按钮   

                                                                                                                                                   

点击NETWORK&HOSTNAME,可以对虚拟机的主机名设置,这里也可以不进行设置后期使用vim /etc/hostname进行更改                                                                             

设置完毕后,点击begin install进行安装                                 

此处一定要设置root的密码,并且要谨记root的密码                                               

安装完毕后,点击reboot                     

安装完成后,第一步需要配置ip地址,打开虚拟机设置,查看你的虚拟机的网络模式,总共有三种不同的网络模式,

每一种模式都和物理机上的虚拟网卡对应。

点击编辑,选择虚拟网络编辑器,查看当前网络模式对应的网卡,我的虚拟机是nat模式,映射的网卡为vmnet8                                         

打开物理机的网络连接查看对应的网卡是否存在,一定要确保对应的虚拟网卡存在,否则虚拟机和物理机无法实现通信。                                                                                           

如果对应的虚拟网卡不存在,可以在虚拟网络编辑器界面,点击恢复默认设置,

这时会自动重新配置网络,对应的虚拟机网卡也会重新生成。                                                                                                                                   

下面进行虚拟机ip的配置,点击虚拟网络设置界面的nat设置按钮,查看网关ip  

        

首先登录到虚拟机中,查看当前虚拟机的ip地址

                                                                                                                    

进入到网卡的配置文件内进行ip相关配置

注意上面的DNS1的配置要和本地物理机对应的虚拟网卡的DNS一致

配置完成后,重启网络服务并查看

关闭防火墙并禁用防火墙

测试网络是否配置成功

基本配置已经完成,接下来进行hadoop相关配置,首先配置hosts映射文件,这要求在配置前提前规划好各个节点对应的虚拟机ip,这里ip规划如下

master 192.168.184.128

slave1 192.168.184.129

slave2 192.168.184.130 

因为这里主机与虚拟机之间通信连接已建立,这里借助xshell工具进行操作,不需要在虚拟机里操作,相对比较方便,打开xshell工具,

输入ssh 192.168.184.128(自己配置的虚拟机的ip地址)

因为centos自带的命令中只有vi命令并没有vim命令,vi命令和vim命令其实一样,都是文本编辑命令,区别在于vim命令有高亮显示,

而vi命令并不能高亮显示,本人习惯高亮显示,方便查看,所以在这里安装vim命令,可根据自己喜好选择是否安装vim命令,

首先需要有yum源,可以配置本地yum源,需要挂载本地光盘,创建一个挂载目录,然后进行挂载,挂载完毕后修改/etc/yum.repos.d/CentOS-Base.repo文件。

这里采用阿里云的yum源,也就是网络yum源,原因是因为网络yum源相对比较丰富,下载速度也比较快。

在修改文件时,建议最好先做个备份,因为linux系统本身就是由文件组成,如果文件出错,可能会导致系统本身出现故障

备份命令           

cp  /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

需要首先安装wget命令

 安装完毕后,下载阿里云yum源

 下载完毕后,需要更新yum仓库

yum仓库更新完毕后,安装vim命令

安装完毕后,修改映射文件

 vim /etc/hosts

在原有映射关系基础上,新增以下映射关系  

 xshell自带有xftp传输文件功能,这时把搭建hadoop需要的压缩包上传到虚拟机中去

直接将所需的压缩包拖进去即可

sftp对应的目录即是压缩包所在目录,这里是/root目录                                              

切换到xshell界面,查看是否上传成功

 上传成功后,将对应的压缩文件解压到一个指定的目录中去

tar -zxvf jdk-8u162-linux-x64.tar.gz -C /opt/

tar -zxvf hadoop-2.9.2.tar.gz -C /opt/

解压完成后,配置相应的环境变量,首先配置jdk环境

vim /etc/profile

      

使环境变量生效并测试          

配置hadoop的环境

vim /etc/profile

 使环境变量生效并测试

  为了确保系统本身的安全性,一般不会允许使用root用户进行操作,所以在这里创建普通用户,用于后续的操作

 普通用户对于root用户家目录下的文件一般没有操作权限,所以如果需要修改某个目录下的文件,需要为普通用户赋予权限,

或者更改目录的属主                                                 

chown -R ll /opt/hadoop-2.9.2/                                                                                                                                                                                                                                       

修改完毕,切换用户,接下来是对hadoop的配置文件进行配置,首先修改hadoop-env.sh文件

修改完毕后,接下来修改core-site.xml文件

vim /opt/hadoop-2.9.2/etc/hadoop/core-site.xml

修改的内容如下:                          

<configuration>

<!--配置HDFS文件系统的命名空间-->

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

<!--HDFS读取文件的缓冲大小-->

<property>

<name>io.file.buffer.size</name>

<value>4096</value>

</property>

</configuration>  

箭头处为自己所规划的主节点的主机名                                                                                           

                                 

修改完毕后,接下来修改hdfs-site.xml

 vim /opt/hadoop-2.9.2/etc/hadoop/hdfs-site.xml

修改的内容如下:

<configuration>

<!--配置hdfs文件系统的副本数-->

<property>

<name>dfs.replication</name>

<!--一个文件三个副本-->

<value>3</value>

</property>

<!--指定hdfs文件系统的元数据存放目录-->

<property>

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

<!--路径可以不存在,可以自动创建-->

<value>file:///opt/hadoopdata/dfs/name</value>

</property>

<!--指定hdfs文件系统的数据块存放目录-->

<property>

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

<value>file:///opt/hadoopdata/dfs/data</value>

</property>

<!--配置HDFS的web管理地址-->

<property>

<name>dfs.http.address</name>

<!--浏览器通过这个路径可以直接访问hdfs的界面-->

<value>master:50070</value>

</property>

<!--配置secondaryNamenode的web管理地址-->

<property>

<name>dfs.secondary.http.address</name>

<value>slave1:50090</value>

</property>

<!--配置是否打开web管理-->

<property>

<name>dfs.webhdfs.enabled</name>

<!--打开true web端才可以看到-->

<value>true</value>

</property>

<!--指定hdfs文件系统权限是否开启-->

<property>

<name>dfs.permissions</name>

<value>false</value>

</property>

</configuration>

第一个箭头处为namenode所在节点的主机名称,第二和箭头处为secondarynamenode所在节点的主机名称,

建议namenode和secondarynamenode放置在不同的节点上,减轻主节点的负载压力            

  

接下来需要配置mapred-site.xml,hadoop安装路径下并没有该文件,只是给了一个模板文件。所以我们需要直接去根据模板文件创建一份该文件,

然后进行修改    

                      

修改内容如下:

<configuration>

<!--指定mapreduce运行的框架名-->

<property>

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

<value>yarn</value>

<final>true</final>

</property>

<!--配置mapreduce的历史记录组件的内部通信地址-->

<property>

<name>mapreduce.jobhistory.address</name>

<value>master:10020</value>

</property>

<!--配置mapreduce的历史记录服务的web管理地址-->

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master:19888</value>

</property>

<property>

<name>mapreduce.job.ubertask.enable</name>

<value>true</value>

</property>

<property>

<name>mapreduce.job.ubertask.maxmaps</name>

<!--最大数量是9-->

<value>9</value>

</property>

<property>

<name>mapreduce.job.ubertask.maxreduces</name>

<value>1</value>

</property>

</configuration>         

          

修改yarn-site.xml文件

vim /opt/hadoop-2.9.2/etc/hadoop/yarn-site.xml

修改内容如下

<configuration>

<!-- Site specific YARN configuration properties -->

<!--指定resourcemanager所启动服务的主机名/ip-->

<property>

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

<value>master</value>

</property>

<!--指定mapreduce的shuffle处理数据方式-->

<property>

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

<value>mapreduce_shuffle</value>

</property>

<!--配置resourcemanager内部通讯地址-->

<property>

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

<value>master:8032</value>

</property>

<!--配置resourcemanager的scheduler组件的内部通信地址-->

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>master:8030</value>

</property>

<!--配置resource-tracker组件的内部通信地址-->

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>master:8031</value>

</property>

<!--配置resourcemanager的admin的内部通信地址-->

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>master:8033</value>

</property>

<!--配置yarn的web管理地址-->

<property>

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

<value>master:8088</value>

</property>

<!--yarn的聚合日志是否开启-->

<property>

<name>yarn.log-aggregation-enable</name>

<value>true</value>

</property>

<!--聚合日志报错hdfs上的时间-->

<property>

<name>yarn.log-aggregation.retain-seconds</name>

<value>86400</value>

</property>

<!--聚合日志的检查时间段-->

<property>

<name>yarn.log-aggregation.retain-check-interval-seconds</name>

<value>3600</value>

</property>

<!---->

<property>

<name>yarn.nodemanager.log.retain-seconds</name>

<value>10800</value>

</property>

<!--当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)-->

<property>

<name>yarn.nodemanager.remote-app-log-dir</name>

<value>/opt/hadoopdata/logs</value>

</property>

</configuration>                                                                                                                                                                                                                                                                          修改slaves文件,也就是配置datanode节点,可以配置两个datanode也可以配置三个,可自行决定

vim /opt/hadoop-2.9.2/etc/hadoop/slaves

修改内容如下                 

                                                                                                    

配置完成,关闭虚拟机,拍快照,克隆生成另外两个节点

 

克隆完毕后,需要修改相应的主机名和ip地址

slave1的配置如下:

改完之后,使用reboot命令重启使刚才的配置生效

slave2配置如下:

                

   

    

改完之后,使用reboot命令重启使刚才的配置生效

接下来配置免密登录

(三台虚拟机都需要进行配置---每台主机上的秘钥长得都不一样)

  生成ssh免登陆密钥

(1)ssh-keygen -t rsa (四个回车)

  //执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

 //将公钥拷贝到要免登陆的机器上

(2)给钥匙(一台机器给三个,三要机器都需要各给三个)

 ssh-copy-id master ssh-copy-id slave1 ssh-copy-id slave2

hadoop namenode -format(格式化namenode)---格式化第一台机器(主节点),因为只有第一台机器含有namenode,

格式化第一台才有意义

出现下图代表格式化成功                                

开启hadoop平台,start-hdfs.sh+start-yarn.sh开启或者使用start-all.sh开启     

使用mr-jobhistory-daemon.sh start historyserver开启jobhistory服务                

开启hadoop后,使用jps查看进程

master:

slave1:

slave2:

客户端进行验证,需要在物理主机的hosts文件中配置这三台虚拟机的ip地址和主机名的映射关系

 浏览器中进行验证:

 运行wordcount示例

首先在虚拟机上创建文件并写入一些内容

touch test.txt

vim test.txt  

在hdfs上创建一个输入目录,并将本地测试文件放到该目录上

 使用hadoop自带的wordcount的jar包进行单词切分计数

查看输出结果

 hadoop平台搭建完毕,接下来搭建zookeeper

zookeeper的搭建

为了操作的便捷,这里也只是对一台虚拟机进行配置,配置完毕后,使用scp发送至另外两个节点,这里选择master主机也就是主节点进行配置

首先需要上传zookeeper的压缩包

     

上传完毕后,解压到指定目录,最好把搭建过程中使用到的压缩包都解压到同一个目录下

tar -zxvf zookeeper-3.4.6.tar.gz -C /opt/

切换到zookeeper对应的配置文件目录下,由于只提供了模板文件,复制模板文件并做修改                                                                                                                                                   

   

修改内容如下:

vim zoo.cfg

新建dataDir以及dataLogDir所指向的目录

在DataDir目录(/opt/zookeeper)下新建myid文件,myid文件写入的数值即在配置zoo.cfg所指定的数值即master为1,

slave1为2,slave2为3  

                                                                                                                                                        

同步各个节点数据:                                                                                                                                                                            

scp -r /opt/* root@slave1:/opt/

scp -r /opt/* root@slave2:/opt/  

该过程占据内存资源,可能会造成电脑卡死,使用以下命令替换

分别切换到slave1和slave2,分别创建以下目录

mkdir  /opt/zookeeper

mkdir  /opt/zookeeper-3.4.6

创建完毕后切换到master,使用如下命令,发送zookeeper相关配置到另外两个节点                                                                                                                   

scp -r /opt/zookeeper/*  root@slave1:/opt/zookeeper

scp -r /opt/zookeeper/*  root@slave2:/opt/zookeeper

scp -r /opt/zookeeper-3.4.6/*  root@slave1:/opt/zookeeper-3.4.6

scp -r /opt/zookeeper-3.4.6/*  root@slave2:/opt/zookeeper-3.4.6

修改slave1和slave2的myid文件

slave1的myid文件修改为2,slave2的myid文件修改为3                                                                   

传送完成后,配置环境变量,在master进行配置,然后发送到另外两个节点                                                     

vim /etc/profile

 使配置的环境变量生效(三个节点都需要做)                      

source  /etc/profile

开启zookeeper服务(三个节点都需要做)         

验证

创建临时节点并查看          

搭建完成,接下来配置scala环境,因为spark需要scala环境,在配置scala时,要注意scala和jdk版本问题。

然后使用scp进行发送到另外两个节点首先上传scala相应的压缩包


上传完毕后,解压到相应的目录下  

vim /etc/profile,配置内容如下:   

               

发送到另外两个节点

 使配置的环境变量生效(三个节点都需要做)                      

source  /etc/profile                               

切换到slave1和slave2,创建/opt/scala-2.12.13目录

 mkdir /opt/scala-2.12.13

切换到master下,发送scala相关文件

scp -r /opt/scala-2.12.13/* root@slave1:/opt/scala-2.12.13/

scp -r /opt/scala-2.12.13/* root@slave2:/opt/scala-2.12.13/

验证        

scala配置完成,接下来配置spark,首先需要下载spark的压缩包,要注意spark和hadoop的版本兼容性问题

首先需要上传spark的压缩包到虚拟机中

 上传完毕后,解压到相应目录

tar -zxvf spark-3.0.2-bin-hadoop2.7.tgz -C /opt/

解压完毕后进入到spark的安装目录下的conf目录

 cd /opt/spark-3.0.2-bin-hadoop2.7/conf/

因为spark只给了配置文件的模板文件,没有给出配置文件,所以这里我们首先要根据模板文件生成对应的配置文件

 修改slave文件,添加work节点

vim slaves

                                                                                                                                                                                                                 

修改spark-env.sh文件,添加如下配置:

vim spark-env.sh

                                                                                                                                                                                                       

配置环境变量

vim /etc/profile

分别切换到slave1和slave2创建spark安装目录

mkdir /opt/spark-3.0.2-bin-hadoop2.7

创建完毕后,使用scp命令分发文件

 使环境变量生效(三台机器都要做)

 source /etc/profile

开启spark,在主节点上(master)节点,切换到/opt/spark-3.0.2-bin-hadoop2.7/sbin

cd  /opt/spark-3.0.2-bin-hadoop2.7/sbin  

开启spark                                            

输入spark-shell进入spark的shell界面

                            

 成功              

                                                                                                                                                                                                                                                                                                                                                                     

                                                                                  

                                       

                                                                                                                                                                                                                        

                                                                                                 

 

 

                                                                                                                                                                                                                               

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值