这里值得一提的是,学校课程附赠了价值776HKD,大约100美金的credits可以在Azure上挥霍,本来想大手笔一下的,可是看到Azure里边的虚拟机的收费,还有各式各样的开销,最后忍住了,打算走理财流,留点用来做别的事,迷之微笑。
1 在Azure中创建虚拟机
创建Resource groups
创建Virtual networks
创建虚拟机
- Basics:将虚拟机放置在前面创建的Resource group中,三台虚拟机的名称,我分别命名为Machine-1、Machine-2和Machine-3,根据自己的经济情况选择合适的Size,设置管理员账户
- Disks:选择系统盘和数据盘的类型(SSD/HHD)和大小
- Networks:配置到前面创建的虚拟网络中,选择分配公网IP需要另外收费
创建好VM后打开Resource group,我们可以看到Machine-1分配了如下资源,Machine-1-ip是它的公网ip,Machine-1-nsg是网络安全组策略,我们可以在里面配置出入网的规则,而machine-1355是Network interface,Machine-1-ip和Machine-1-nsg绑定在这个interface上。两个Disk,一个是数据盘,另一个系统盘。
我们重复操作,完成另外两个虚拟机(Machine-2、Machine-3)的创建,创建过程中我们需要把它们都放置在相同的Resource group和Virtual networks中。
配置公网IP和端口安全策略,需要开放所需的端口。毕竟后面的命令行操作需要用SSH协议,所以22端口需要开启。还有其他一些需要开放的端口,我会在后续的配置中说明。
2 主节点分发SSH密钥
三台机器的信息如下,我们将Machine-1作为主节点,另外两台机器作为分支节点:
节点 | 主机名 | 内网IP | 公网IP |
---|---|---|---|
主节点 | Machine-1 | 10.0.0.7 | 公网ip-1 |
分支节点 | Machine-2 | 10.0.0.8 | 公网ip-2 |
分支节点 | Machine-3 | 10.0.0.4 | 公网ip-3 |
在master节点上生成ssh key $ ssh-keygen -b 4096
将key拷贝到其他节点上
$ ssh-copy-id -i .ssh/id_rsa.pub localhost
$ ssh-copy-id -i .ssh/id_rsa.pub Machine-2
$ ssh-copy-id -i .ssh/id_rsa.pub Machine-3
3 Java环境配置
在三台机器上都安装java
$ sudo apt update
$ sudo apt install default-jre
$ sudo apt install openjdk-11-jdk-headless
在master node上设置Java环境变量,查看Java安装路径
$ update-alternatives --display java
$ vim ~/hadoop/etc/hadoop/hadoop-env.sh
将{JAVA_HOME}
替换成你的Java安装目录
4 Hadoop配置
下载并解压hadoop
$ wget http://apache.01link.hk/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz
$ tar xf hadoop-2.8.5.tar.gz
$ mv hadoop-2.8.5 hadoop
设置环境变量 $ vim ~/.profile
添加PATH=$HOME/hadoop/bin:$HOME/hadoop/sbin:$PATH
配置core-site.xml
文件
$ vim ~/hadoop/etc/hadoop/core-site.xml
因为我的master节点的主机名是Machine-1,所以我的配置为
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://Machine-1:9000</value>
</property>
</configuration>
配置hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/yelbee/data/nameNode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/yelbee/data/dataNode</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>false</value>
</property>
</configuration>
配置slaves
文件
vim ~/hadoop/etc/hadoop/slaves
我让Machine-2和Machine-3作为slaves节点,在文件里添加
Machine-2
Machine-3
ssh登入Machine-2和Machine-3,我创建了的用户都为yelbee,所以均在/home/yelbee
目录下配置。在Machine-1中进行如下操作,将主节点中的所有配置拷贝到分支节点中:
$ ssh Machine-2
$ mkdir spark
$ exit
$ scp ~/spark/* Machine-2:~/spark/
对Machine-3重复此操作
$ ssh Machine-3
$ mkdir spark
$ exit
$ scp ~/spark/* Machine-3:~/spark/
在主节点上,初始化hdfs namenode hdfs namenode –format
启动hdfs系统 start-dfs.sh
用jps
命令检查每个节点上跑的java进程,如果操作正确的话,我们应该会看到
21922 Jps
21603 NameNode
21787 SecondaryNameNode
在分支节点上,即在Machine-2和Machine-3上运行jps
命令,会有
12186 Jps
11918 DataNode
hdfs集群的管理界面,在浏览器中打开http://Master的公网ip:50070
,能看到Hadoop的管理界面,这里需要注意要在Azure的安全组策略nsg中开放50070端口。
hdfs的文件操作
创建test目录 hdfs dfs -mkdir -p test
将文件放在HDFS中
hdfs dfs -put LICENSE.txt
hdfs dfs -put spark-2.2.0-bin-hadoop2.7.tgz
修改文件的副本数(replication factor) hdfs dfs -setrep 3 spark-2.4.0-bin-hadoop2.7.tgz
从HDFS中下载文件 hdfs dfs -get test/LICENSE.txt
5 Spark配置
Spark其实可以不依赖于Hadoop运行的,Spark在内存模式下,将文件读入内存中,直接进行高速的运算和处理,也可以与Hadoop的HDFS文件系统协同工作。
下载并解压Spark
$ wget http://apache.website-solution.net/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz
$ tar xf spark-2.4.0-bin-hadoop2.7.tgz
$ mv spark-2.4.0-bin-hadoop2.7 spark
设置环境变量, $ vim ~/.profile
添加
export SPARK_HOME=/home/yelbee/spark
export SPARK_MASTER_HOST=master的私有ip
新建文件conf/slaves
$ vim spark/conf/slaves
写入分支节点的主机名
Machine-2
Machine-3
类似于Hadoop的操作,我们用需要scp
命令将整个Spark文件夹拷贝到另外两台机器上。
启动Master $ spark/sbin/start-master.sh
启动slaves: $ spark/sbin/start-slaves.sh
同样我们需要在安全组策略中开放8080端口,然后在浏览器中访问主节点公网ip的8080端口,我们就可以进入Spark的管理界面了。
jps
命令查看jvm进程,在主节点上会多出一个Master进程
21922 Jps
21603 NameNode
21787 SecondaryNameNode
+ Master
而在分支节点上会多出一个Worker进程
12186 Jps
11918 DataNode
+ Worker
本博客文章除特别声明外,均可自由转载与引用,转载请标注原文出处:http://www.yelbee.top/index.php/archives/160/