首页 其他

这里值得一提的是,学校课程附赠了价值776HKD,大约100美金的credits可以在Azure上挥霍,本来想大手笔一下的,可是看到Azure里边的虚拟机的收费,还有各式各样的开销,最后忍住了,打算走理财流,留点用来做别的事,迷之微笑。

1 在Azure中创建虚拟机

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-1

我们重复操作,完成另外两个虚拟机(Machine-2、Machine-3)的创建,创建过程中我们需要把它们都放置在相同的Resource group和Virtual networks中。

配置公网IP和端口安全策略,需要开放所需的端口。毕竟后面的命令行操作需要用SSH协议,所以22端口需要开启。还有其他一些需要开放的端口,我会在后续的配置中说明。

2 主节点分发SSH密钥

三台机器的信息如下,我们将Machine-1作为主节点,另外两台机器作为分支节点:

节点主机名内网IP公网IP
主节点Machine-110.0.0.7公网ip-1
分支节点Machine-210.0.0.8公网ip-2
分支节点Machine-310.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端口。

Hadoop-window

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的管理界面了。

Spark-window

jps命令查看jvm进程,在主节点上会多出一个Master进程

21922 Jps
21603 NameNode
21787 SecondaryNameNode
+     Master

而在分支节点上会多出一个Worker进程

12186 Jps
11918 DataNode
+     Worker



文章评论

captcha